目录
一、账号安全控制
1)系统账号清理
2)密码安全控制
chage命令
示例
3)命令历史限制
4)终端自动注销
总结
账号安全
密码安全
二、系统引导和登录控制
1)使用su命令切换用户
用途及用法
密码验证
限制使用su命令的用户
2)Linux中的PAM安全认证
su命令的安全隐患
PAM(Pluggable Authentication Modules)可拔插式认证模块
PAM认证原理
PAM安全认证流程
3)使用sudo机制提升权限
示例
编辑
4)配置sudo授权
别名创建
示例
使用别名进行授权
普通用户使用授权命令
查看当前用户拥有哪些操作权限编辑
启用sudo操作日志
5)安全控制
①开关机安全控制
示例:
编辑
②终端登录安全控制
三、弱口令检测
1)Joth the Ripper,简称为JR
安装JR工具
检测弱口令账号
密码文件的暴力破解
示例
编辑
四、网络端口扫描
1)NMAP
检查并安装 namp工具
使用格式
常用的扫描类型
2)ss与netstat
总结
一、账号安全控制
1)系统账号清理
- 将非登录用户的Shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
- 锁定长期不使用的账号
usermod -L 用户名
passwd -l 用户名
passwd -S 用户名
- 删除无用的账号
userdel [-r] 用户名
- 锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow
lsattr /etc/passwd /etc/shadow //锁定文件并查看状态
chattr -i /etc/passwd /etc/shadow //解锁文件
md5sum /etc/password 校验和
2)密码安全控制
chage命令
常用选项
参数 | 说明 |
---|---|
-m | 密码可更改的最小天数,为0时代表任何时候 |
-M | 密码保持有效的最大天数 |
-w | 用户密码到期前,提前收到警告信息的天数 |
-E | 账号到期的日期 |
-d | 上一次更改的日期 |
-i | 停滞时期。如果一个密码已过期这些天,那么此账号将不可用 |
-l | 列出当前的设置。由非特权用户来确定他们的密码或账号何时过期 |
- 设置密码有效期
- 要求用户下次登录时修改密码
[root@localhost ~]# vi /etc/login.defs //修改密码配置文件(适用于新建用户)
……
PASS_MAX_DAYS 30
[root@localhost ~]# chage -M 30 lisi //适用于已有用户
[root@localhost ~]# cat /etc/shadow | grep lisi
示例
[root@localhost ~]# chage -d 0 zhangsan //强制在下次登录时更改密码
[root@localhost ~]# cat /etc/shadow | grep zhangsan //shadown文件中的第三个字段被修改为0
3)命令历史限制
- 减少记录的命令条数
- 登陆时自动清空命令历史
[root@localhost ~]# vi /etc/profile
export HISTSIZE=200
[root@localhost ~]# source /etc/profile
[root@localhost ~]# vi ~/.bashrc
echo "" > ~/.bash_history
永久生效
4)终端自动注销
- 限制600秒后自动注销
[root@localhost ~]# vi /etc/profile
……
export TMOUT=600
[root@localhost ~]# source /etc/profile
- 开机永久清空历史命令
- 设置每60秒清空一次历史命令
总结
账号安全
禁止用户登录系统 usermod -s /sbin/nologin
锁定用户 usermod -L 用户名 解锁 -U
passwd -l 用户名 -u
passwd -s
删除用户 userdel -r 用户名
锁定账号文件 chattr +i /etc/{passwd,shadow} 解锁 -i
lsattr
密码安全
设置密码有效期 /etc/login.defs ——> PASS MAX DAYS 针对新建用户
chage -M 天数 用户
针对已存在的用户 99999代表密码永不过期
登录立即修改密码 chage -d 0 用户名
历史命令 history
限制历史命令数 /etc/profile ——>export HISTSIZE= ——>source /etc/profile
清空历史命令 history -c
> -/.bash_history
二、系统引导和登录控制
1)使用su命令切换用户
用途及用法
用途:Substitiute User,切换用户
格式
su -目标用户
密码验证
root——>任意用户,不验证密码
普通用户——>其他用户,验证目标用户的密码
[jerry@localhost ~]$ su -root //带-选项表示将使用目标用户的登录Shell环境
口令:
[root@localhost ~]# whoami
root
示例
限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组
- 启用pam_wheel认证模块
[root@localhost ~]#vi /etc/pam.d/su
#@PAM-1.0
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
……
2)Linux中的PAM安全认证
su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
PAM(Pluggable Authentication Modules)可拔插式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
PAM认证原理
- 一般遵循的顺序
service(服务)->PAM(配置文件)->pam_*.so
- 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
- 不同的应用程序所对应的PAM模块是不同的
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用 cat /etc/pam.d/system-auth
第一列代表PAM认证模块类型
1.auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
2.account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
3.password: 使用用户信息来更新数据,如修改用户密码。
4.session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统,能连接几个终端
第二列代表PAM控制标记
1.required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
2.requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
3.sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
4.optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型), 5.include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列代表PAM模块的参数
这个需要根据所使用的模块来添加。传递给模块的参数,参数可以有多个,之间用空格分隔开
查看某个程序是否支持PAM认证,可以用ls命令
- 示例:查看su是否支持PAM模板认证
ls /etc/pam.d | grep su
- 查看su的PAM配置文件:cat /etc/pam.d/su
每一行都是一个独立的认证过程
每一行可以区分为三个字段
认证类型
控制类型
PAM模块及其参数
PAM安全认证流程
控制类型也称做Control Flags,用于PAM验证类型的返回结果
1.required验证失败时仍然继续,但是返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
4.optional不用于验证,只显示信息(通常用于session类型)
示例
例:安全日志文件/var/log/secure
3)使用sudo机制提升权限
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
示例
4)配置sudo授权
- visudo或者vi /etc/sudoers
- 记录格式
用户 主机名=命令程序列表 //可以使用通配符*全部,!取反符号
别名创建
- User_Alias 大写别名=用户1,用户2,……
- Host_Alias 大写别名=主机名1,主机名2,……
- Cmnd_Alias 大写别名=程序1,程序2,……
示例
使用别名进行授权
#用户/组授权
用户名/用户别名 主机名/别名 =(用户)程序列表/别名
%组名 主机名 程序列表
用户名 主机名 = [(用户)NOPASSWD:] 程序列表
普通用户使用授权命令
mkdir ~/guazhai //通过wangwu用户在家目录下创建一个 guazhai的空文件
sudo mount /dev/sr0 ~/guazhai //sudo 加配置的命令表中的命令,以root的身份去运行该授权命令
ps:第一次执行需要验证密码,默认超时时长为5分钟,在此期间不再重复验证密码
查看当前用户拥有哪些操作权限
启用sudo操作日志
visudo
Defaults logfile = “/var/log/sudo”
su切换
将信任的普通用户加入到wheel组中 gpasswd -a 用户 wheel
修改su的PAM认证文件配置
/etc/pam.d/su 将2,6行注释取消
5)安全控制
①开关机安全控制
调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
GRUB限制
- 使用grub2-mkpasswd-pdkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
通常情况下在系统开机进入GRUB菜单时,按e可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB设置一个密码,只有提供正确的密码才能被允许修改参数
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB 菜单的密码
PBKDF2 hash of your password is grub.pbkdf2... #省略部分内容为经过加密生成的密码字符串
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
vim /etc/grub.d/00_header
cat << EOF
set superusers="root" #设置用户名为root
password_pbkdf2 root grub.pbkdf2..... #设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg # 生成新的grub.cfg文件
重启系统进入 GRUB 菜单时,按 e 键将需要输入账号密码才能修改引导参数
示例:
②终端登录安全控制
- 限制root只在安全终端登录
安全终端配置:/etc/securetty
[root@localhost ~]#vi /etc/securetty
……
#tty5
#tty6 //禁止root用户从终端tty5、tty6登录
- 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或重启后即恢复正常
[root@localhost ~]# touch /etc/nologin //禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin //取消上述登录限制
三、弱口令检测
1)Joth the Ripper,简称为JR
- 一款密码分析工具,支持字典式的暴力破解
- 通过对shadow文件的口令分析,可以检测密码强度
- 官方网站:http://www.openwall.com/john/
安装JR工具
- 安装方式
make clean 系统类型
- 主程序文件为john
检测弱口令账号
- 获得Linux/Unix服务器的shadow文件
- 执行john程序,将shadow文件作为参数
密码文件的暴力破解
- 准备好密码字典文件,默认为password.lst
- 执行john程序,结合--wordlist=字典文件
示例
①安装软件包
②准备破译的文件
cp /etc/shadow /app/shadow.txt
③使用JR软件进行破译
[root@localhost src]#cd /app/john-1.8.0/run
[root@localhost run]#./john /app/shadow.txt
⑤使用其他密码字典进行破译
[root@localhost run]#>john.pot //清空已破译的密码列表
四、网络端口扫描
1)NMAP
- 一款强大的网络端口扫描、安全、检测工具
- 官方网站:http://nmap.org/
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
检查并安装 namp工具
[root@localhost ~]# rpm -qa|grep nmap //查看nmap
[root@localhost ~]# yum install -y nmap //安装nmap
使用格式
nmap [扫描类型] [选项] <扫描目标>
常用的扫描类型
-p | 指定扫描的端口 |
-n | 禁用反向DNS解析(以加快扫描速度) |
-sS | TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接,否则认为目标端口并未开放 |
-sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放 |
-sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性 |
-sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢 |
-sP | ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描 |
-P0 | 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描 |
分别查看本机开放的TCP端口、UDP端口
nmap -sT127.0.0.1
nmap -sU 127.0.0.1
检测192.168.4.0/24网段有哪些主机提供FTP服务
nmap -p 21 192.168.4.0/24
检测192.168.4.0/24网段有哪些存活主机
nmap -n -sP 192.168.4.0/24
2)ss与netstat
n | 以数值形式显示IP |
l | 只查看监听状态的网络信息(LISTEN) |
t | 查看TCP协议相关的信息 |
p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) |
u | 显示UDP协议相关的信息 |
r | 显示路由表信息 |
总结
1. 用户账号的锁定和解锁。通过创建/etc/nologin 文件使普通用户无法登录
2.通过修改/etc/profile 文件来限制命令条数,以及用户退出时间
3.su命令的切换与sudo 对用户进行提权
4.pam.d /su 建立wheel组,使普通用户无法任意切花
5.ss 和nestat 产看本机具体信息,namp 查看网络端口具体信息