pam多条件验证
pam是linux可植入式的验证模块
作用:通过多个模块对相应的程序进行多条件验证
不是所有的程序都支持pam,一般用于像ssh,login,vsftd等程序
[root@localhost ~]# /etc/pam.d 配置文件(相当于门)
[root@localhost ~]# /etc/pam.d/login中常见的选项
requisite 必要条件,不满足就退出
sufficient 满足条件就ok
required 必要条件,不满足也不退出
optional 条件无所谓
[root@localhost ~]# /lib64/security 库文件(想当于锁)
pam_nologin禁止非root
方法一:脚本
#!/bin/bash
for user in `awk -F: '$3!=0 && '$3!=65534 && $NF=="/bin/bash" {print $1} /etc/passwd`
do
sed -i '/^'$user':/s/\bin\/bash\/bin\/false/' /etc/passwd
done
方法二:使用pam模块
根据/etc/pam.d/login的第四行来进行测试,这一行默认就有,不需要做任何修改
account required pam_nologin.so
[root@localhost ~]# touch /etc/nologin 发布信息并且拒绝除root管理员之外所有用户登录(只要有这个文件就拒绝登录)
pam_listfile黑白名单
以ftp为例:
根据/etc/pam.d/vsftpd的第二行进行测试
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
vsftpd服务本身有一个黑白名单文件/etc/vsftpd/user_list,然后pam_listfile模块为vsftpd模块又加了一层黑白名单,也就是说vsftpd是双重黑白名单
**可以通过查看/var/log/secure日志看到pam相关的拒绝信息 **
pam_time时间控制
[root@localhost ~]# vim /etc/pam.d/login
添加以下内容
account requisite pam_time.so
[root@localhost ~]# vim /etc/security/time.conf
在此文件加入需要设置的时间以致时间控制生效
login;*;zxc;Mo1148-1150
login: 登录
*: 代表终端类型
zxc: 用户名
Mo1148-1150: 修改的时间(此处指只可以在周一11:48到11:50可以登录)
pam_tally2防止暴力破解密码
[root@localhost ~]# vim /etc/pam.d/sshd 加入下面这句代码
auth required pam_tally2.so deny=3 even_deny_root root_unlock_time=600 unlock_time=600
even_deny_root:表示对root用户也生效
deny=3 root_unlocak_time=600:表示root累积失败3次会锁定600s
deny=3 unlock_time=600:表示普通用户累积失败3次会锁定600s
可以通过pam_tally2 --user=root命令查看连续失败的次数。成功ssh登录后,失败次数会清零。
也可以使用pam_tally2 --user=root --reset把连续失败次数清零。
pam_cracklib控制密码复杂度
[root@localhost ~]# vim /etc/pam.d/passwd
password required pam_cracklib.so minlen=8 minclass=2 difok=3 maxrepeat=3 maxsequence=5
minlen: 设置密码长度
minclass: 字符类型(数字、小写字母、大写字母、符号)
difok:表示新密码和旧密码需要变动的字符 (difok=3 表示新密码和旧密码需要变动3个字符)
maxrepeat:表示重复相同字节 如:33 666
maxsequence:表示连续字节 如:123 abc
pam_securetty控制root本地登录
# vim /etc/pam.d/login 此文件默认有pam_securetty模块
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
# vim /etc/securetty
tty2 --只留下tty2,表示只能在tty2进行root用户登录(非root用户不受影响);还可以把这里的终端全去掉,实现root用户无法登录
注:在vmware虚拟里切换终端快捷键为alt+F1-F6来切换
pam_limits限制用户登录数
# vim /etc/pam.d/sshd (限制ssh连接数)
session required pam_limits.so
[root@localhost ~]# vim /etc/security/limits.conf
zxc hard maxlogins 2 表示zxc用户,最多只能ssh登录两个,第三个登录就会被拒绝
sudo
使用另一个身份来执行命令
- 普通用户可临时使用root相应的权限
- 管理为防止误操作,平时使用普通用户
sudo实例
root授予zxc用户touch命令的权限
root ALL=(ALL) ALL
zxc ALL=/usr/bin/touch(此处必须写绝对路径)
root授予zxc用户touch中的部分权限
root ALL=(ALL) ALL
zxc ALL=/usr/bin/touch /root/222,/usr/bin/touch /root/333
表示zxc用户只能创建222和333文件
root授予zxc用户有关网络的用户,但是有关命令很多,很麻烦,可以使用别名
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm 等
root ALL=(ALL) ALL
zxc ALL=NETWORKING
总结
root用户授予相应的权限给普通用户(权限最小化的原则),普通用户就可以不使用root密码来
实现root相应的权限,即使做了误操作,也能相应防护。