目录
账号安全的基本措施
将非登录用户的Shell设为nologin
usermod -s nologin 用户名 #禁止登录
锁定长期不使用的账号(含解锁方式)
usermod -L lisi #锁定账户
usermod -U lisi #解锁账户
passwd -l lisi #锁定账户方
passwd -u lisi #解锁账户
删除无用的账号
userdel 用户名 #删除用户
注意:删除用户最好要 -r 删除,不然就会如上图所示,再创建相同用户名的账号显示其主目录存在。
最后,用 cat /etc/passwd 命令查看用户是否已删除。
chattr锁定重要账号文件(如passwd、shadow、fstab等)
lsattr /etc/passwd /etc/shadow #查看文件的状态
chattr +i /etc/passwd /etc/shadow #锁定文件
chattr -i /etc/passwd /etc/shadow #解锁文件
密码安全控制
1.只对新建用户有效
vim /etc/login.defs #修改配置文件
-----此处省略部分注释及配置-------
PASS_MAX_DAYS 30 #修改密码有效期为30天
cat /etc/shadow #查看用户密码信息
2.适用于已有用户
chage -M 30 ky27 #修改密码有效期
3.强制在下次登录成功时修改密码(/etc/shadow第三个字段被修改为0)
chage -d 0 ky27 #设置下次登录强制修改密码
命令历史限制
- 减少记录的命令条数
- 登录时自动清空命令历史
系统默认保存1000条历史命令记录;
history -c 命令只可以临时清除记录,重启后记录还在。
1.临时修改当前用户的历史命令条数
export HISTSIZE=20
#临时修改历史命令条数为20条
[root@localhost ~]# echo $HISTSIZE
20
2.进入配置文件永久修改历史命令条数
vim /etc/profile
#进入配置文件
source /etc/profile
#刷新配置文件,使文件立即生效
3.退出当前终端将命令清除
vim .bash_logout
echo " " > ~/.bash_history
source .bash_logout
4.开机后当前终端将命令清除
vim .bashrc
echo " " > ~/.bash_history
source .bashrc
5.设置登录超时时间
vim /etc/profile
#进入配置文件
TMOUT=15
#设置全局自动注销时间,声明15s没有操作就登出
source /etc/profile
#更新配置文件
切换和限制用户
切换用户的方式
su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换。不带环境变量的登录。
su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。带环境变量的登录。
密码验证
超级管理员切换普通用户,不需要密码
普通用户切换普通用户,需要密码
普通用户切换超级管理员,需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。
限制使用su命令的用户
(1)su命令的安全隐患
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,
带来安全风险
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
示例:有 ll 和ky27两个用户,要求设置 ll 可以使用su命令切换用户,ky27用户不允许使用
vim /etc/pam.d/su #编辑/etc/pam.d/su配置文件
auth required pam_wheel.so use_uid #将此行的注释取消即可
gpasswd -a ll wheel #将希望可以使用su命令的用户加入到wheel组中
PAM安全认证
系统管理员为用户建立一个帐号并为其指定一个口令,
用户用此指定的口令登录之后重新设置自己的口令,
这样用户就具有了一个只有它自己知道的口令或者密码。
用户的身份信息在Linux系统中存放在/etc/passwd文件当中,
这实际上是一个拥有简单格式的数据库表,通过":"作为分隔符分隔出多个字段,
其中包括用户的名称、用户ID、组ID、用户说明、主目录和登录使用的shell等相关信息。
而用户口令经过加密处理后存放于/etc/shadow 文件中。也是一个格式类似的数据库表,
除了用户名和经过加密之后的密码之外,还包括多个对密码有效期进行定义的字段,包括密码有效时间、密码报警时间等。
用户登录的时候,登录服务程序提示用户输入其用户名和口令,
然后将口令加密并与/etc/shadow 文件中对应帐号的加密口令进行比较,
如果口令相匹配,说明用户的身份属实并允许此用户访问系统。
这种思想基于只有用户自己知道它的口令,所以输入的口令是正确的话,那么系统就认定它是所声称的那个人。
可插拔认证模块(PAM)机制采用模块化设计和插件功能,使用户可以轻易地在应用程序中插入新的认证模块或替换原先的组件,同时不必对应用程序做任何修改,从而使软件的定制、维持和升级更加轻松。因为认证和鉴别机制与应用程序之间相对独立。
PAM认证工作原理:
PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
PAM认证过程:
1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)
PAM相关文件
模块文件目录:/lib64/security/*.so
特定模块相关的设置文件:/etc/security/
应用程序调用PAM模块的配置文件: /etc/pam.d
第一列:type类型 第二列:control控制位 第三列:PAM模块
type 类型
- auth 用户身份认证
- account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
- password 用户修改密码时密码复杂度检查机制等功能
- session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
- -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
Control: ( 控制位)
- required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
- requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
- sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
- equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略
include: 调用其他的配置文件中定义的配置 - optional 可选项
control 总结:
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)
shell模块
功能:检查有效shell
帮助:man pam_shells
案例:不允许使用/bin/csh的用户本地登录
[root@localhost pam.d]# cat /etc/passwd | grep ll #查看用户信息
[root@localhost pam.d]# cat /etc/shells 查看支持的shell环境
[root@localhost pam.d]# vim /etc/pam.d/su
auth required pam_rootok.so #添加这一行
[root@localhost pam.d]# vim /etc/shells
把/bin/csh删除
使用sudo机制提升权限
用途:以其他用户身份(如root)执行授权的命令
用法:sudo 授权命令
配置sudo授权
举例:ll ALL=(root) /sbin/ifconfig
使用命令的用户 主机列表=代表谁去执行命令 可以执行哪些命令
用户: 直接授权指定的用户名,或采用“&组名"的形式(授权一个组的所有用户)。
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机。
(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令。
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,
需填写命令程序的完整路径,
多个命令之间以逗号“。"进行分隔。ALL则代表系统中的所有命令。
示例:设置wheel组进行sudo操作时无需密码验证,并将ky用户添加到wheel组中测试
示例:使用关键字来进行设置别名,批量控制用户
要求:控制用户进行sudo操作时无法使用重启(reboot)、关机(poweroff)、
切换init和无法删除
第一步:vim /etc/sudoers 或者visudo 修改配置文件
visudo和vim /etc/sudoers效果一样
98 ## Allows people in group wheel to run all commands
99 #%wheel ALL=(ALL) ALL #注释掉