一、账号安全基本措施
-
系统账号清理
将非登录用户的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/sahdow (查看文件锁定状态)
chattr -i /etc/passwd /etc/shadow (解锁文件)
-
密码安全控制
设置密码有效期
要求用户下次登录时修改密码
vi /etc/login.defs (修改密码配置文件适用于新建用户)
PASS_MAX_DAYS 天数
chage -M 天数 用户名 (针对已存在的用户,99999天为永不过期)
chage -d 0 用户名 (强制在下次登录时更改密码)
-
命令历史限制
查看历史命令
history
减少记录的命令条数
vi /etc/profile
export HISTSIZE=XX
source /etc/profile
临时清空历史命令
history -c
登录时自动清空命令历史
vim /etc/profile
> ~/.bash_history
-
终端自动注销
闲置一段时间后自动注销
vi /etc/profile
export TMOUT=时间
source /etc/profile
二、使用su命令切换用户
-
用法及用途
用途:substitute user,切换用户
格式:su -目标用户
-
密码验证
root→任意用户,不验证密码
普通用户→其他用户,验证目标用户的密码
-
限制使用su命令的用户
将允许使用su命令的用户加入wheel组
gpasswd wheel -a 用户名
修改su的PAM认证配置文件
vim /etc/pam.d/su 开启 auth required pam_wheel.so use_uid 的配置
启用pam_wheel认证模块
三、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认证,可以用ls命令
- 查看su的PAM配置文件
cat /etc/pam.d/su
每一行都是独立的认证过程
每一行可以区分为三个字段
认证类型 | 控制类型 | PAM模块及其参数 |
- 认证模块类型
auth:认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据
account:账户模块接口,检查指定账户是否满足当前验证条件,如用户是否有权访问所请求的服务,检查账户是否到期
password:密码模块接口,用于更改用户密码,以及强制使用强密码配置
session:会话模块接口,用于管理和配置用户会话。会话在用户成功认证之后启动生效
- PAM控制标记
required:模块结果必须成功才能继续认证,如果在此处测试失败,则继续测试引用在该模块接口的下一个模块,直到所有的模块测试完成,才将结果通知给用户。
requisite:模块结果必须成功才能继续认证,如果在此处测试失败,则会立即将失败结果通知给用户。
sufficient:模块结果如果测试失败,将被忽略。如果sufficient模块测试成功,并且之前的required模块没有发生故障,PAM会向应用程序返回通过的结果,不会再调用堆栈中其他模块
optional:该模块返回的通过/失败结果被忽略。一般不用于验证,只是显示信息(通常用于 session 类型)
include:与其他控制标志不同,include与模块结果的处理方式无关。该标志用于直接引用其他PAM模块的配置参数
- PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数
- PAM模块的参数
需要根据所使用的模块来添加,传递给模块的参数。参数可以有多个,之间用空格分隔开
- 小知识
ssh远程登录输入三次密码错误则锁定用户
vim /etc/pam.d/sshd
auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=600
六、PAM安全认证流程
控制类型也乘坐control flags,用于PAM验证类型的返回结果
- required验证失败时忍让继续,但是返回fail
- requisite验证失败则立即结束整个验证过程,返回fail
- sufficient验证成功立即返回,不再继续,否则忽略结果并继续
- optional不用于验证,只显示信息(通常用于session类型)
七、使用sudo机制提升权限
-
su命令的缺点
-
sudo命令的用途及用法
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
-
配置sudo授权
visudo
或者vi /etc/sudoers(要用 wq! 强制保存)
- 记录格式
用户 主机名=命令程序列表(命令要用绝对路径表示,支持使用通配符 * 表示所有, ! 表示取反)
- 别名设置
用户别名 | 主机别名=命令别名 |
User_Alias | 大写别名=用户1, 用户2, ... |
Host_Alias | 大写别名=主机名1, 主机名2, ... |
Cmnd_Alias | 大写别名=命令路径1, 命令路径2, ... |
-
使用sudo操作记录
需启用defaults logfile配置
默认日志文件:/var/log/sudo
-
查询授权的sudo操作
sudo -l
八、开关机安全控制
-
调整BIOS引导设置
将第一引导设备设为当前系统所在的硬盘
禁止从其他设备(U盘、光盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
-
GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件中,添加密码记录
生层新的grub.cfg配置文件
九、终端登录安全控制
- 限制root只在安全终端登录
安全终端配置:/etc/securetty
- 禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常
-
touch /etc/nologin(禁止普通用户登录) rm -rf /etc/nologin(取消登录限制)
十、系统弱口令检测
- joth the ripper,简称JR
一款密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
官方网站:http://www.openwall.com/john/
- 安装JR工具
安装方法
make clean 系统类型
主程序文件为john
- 检测弱口令账号
获得Linux/unix服务器的shadow文件
执行john程序,将shadow文件作为参数
- 密码文件的暴力破解
准备好密码字典文件,默认为password.lst
执行john程序,结合--wordist=字典文件
十一、网络端口扫描
-
NMAP
一款强大的网络扫描、安全检测工具
官方网站:http://nmap.org/
centos7.3光盘中安装包nmap-6.40-7.el7.x86_64.rpm