账号安全控制
系统账号清理
-
将非登录用户的Shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
-
锁定长期不使用的账号
usermod -L 用户名 passwd -l 用户名
passwd -S 用户名
-
删除无用的账号
userdel 【-r】用户名
-
锁定账号文件passwd、shadow
chattr +i /etc/passwd /etc/shadow
Isattr /etc/passwd /etc/shadow 锁定文件并查看状态
chattr -i /etc/passwd /etc/shadow 解锁文件
密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
命令历史限制
- 减少记录的命令条数
- 登录时自动清空命令历史
终端自动注销
- 闲置600s后自动注销
用户切换与提权
切换用户:su
【root@localhost ~】#su 目标用户
密码验证
目录
root 任意用户,不验证密码
普通用户 其他用户,验证目标用户的密码
限制使用su命令切换用户
- 将允许使用su命令的用户加入wheel组
- 启用pam_wheel认证模块
二、Linux中的PAM安全认证
1、su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
2、PAM可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
3、PAM认证原理
- 一般遵循的规律:Service(服务)→ PAM(配置文件)→ pam_*.so
- 首先要确定哪一项服务,然后加载相应的 PAM 的配置文件(位于 /etc/pam.d 下),最后调用认证文件(位于 /lib64/security 下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到 PAM 模块进行认证
- 不同的应用程序所对应的 PAM 模块是不同的
- 如果想要查看某个程序是否支持 PAM 认证,可以使用 ls 命令,进行查看 /etc/pam.d/
第一列代表PAM认证模块类型 | auth | 对用户身份进行识别,如提示输入密码,判断是否为root |
account | 对账号各项属性进行检查,如是否允许登录系统,账号是否已经过期,是否到达最大用户数等 | |
password | 使用用户信息来更新数据,如修改用户密码 | |
session | 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统 | |
第二列代表PAM控制标记 | required | 表示需要返回一个成功值,如果返回失败,不会立即将失败结果返回,而是继续进行同类型的下一步验证,所有此类型的模块都执行完成后,再返回失败 |
requisite | 与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败 | |
sufficient | 如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值 | |
optional | 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型) | |
include | 表示在验证过程中调用其他的 PAM 配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth (主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项 | |
第三列代表PAM模块 | 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径 | |
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数 | ||
第四列代表PAM模块的参数 | 根据所使用的模块进行添加 传递给模块的参数,参数可以有多个,之间用空格分隔开 |
5、PAM安全认证流程
- 1、required验证失败时仍然继续,但返回Fail
- 2、requisite验证失败则立即结束整个验证过程,返回Fail
- 3、sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
- 4、optional不用于验证,只显示信息(通常用于session类型)