pam 接管sudoers 密码认证,并且针对用户组行使sudo时的密码区别认证实现
需求:
新增wheel 组 ,该组放开所有权限: %wheel ALL=(ALL) ALL,但是需要在user1每次使用sudo 提权时输入密码,sudo -u segsys commands,以segsys身份执行命令时又均要放行。
分析现有pam配置:
[luanzheng@fcu]:/home/luanzheng > cat /etc/pam.d/sudo #%PAM-1.0 auth sufficient pam_access.so accessfile=/etc/security/pam_access_sudo.conf nodefgroup auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so [luanzheng@fcu]:/home/luanzheng > sudo cat /etc/security/pam_access_sudo.conf +:(segsys) (dba):LOCAL +:apache www segsys:LOCAL -:ALL:ALL
问题1:由于当前pam 针对 segsys 用户是配置免密码的,并且系统环境是所有user的初始用户组均配置的是segsys 组,所以如果不修改pam , 那么即使在/etc/group 中配置将user1加入到wheel 组,执行sudo 时并不会提示要求密码。
问题2:如果 在pam_access_sudo.conf 中第一行插入 -:(wheel):LOCAL 以此禁止wheel 组用户免密,则有会导致user1 以任何形式输入sudo都需要密码, 不满足需求以segsys 用户执行命令免密。
解决办法:
1. 将user1 加入到wheel 组。
2. 在pam_access_sudo.conf 中第一行插入 -:(wheel):LOCAL
3. sudoers 配置中新增规则 Defaults>segsys targetpw
Defaults>segsys targetpw表示以segsys 用户身份运行时,验证的是目标用户的密码, 也就是说user1执行sudo -u segsys commands 时验证的是segsys的密码,由于segsys 在pam 中配置免密, 进而实现需求中的单独免密。
这样的话,sudo comanmds 即以root 身份运行命令的时候要求密码,但是以segsys身份运行命令的时候免密, 既提高了user1用户的可用权限, 又提高了root 权限的安全,而且还省去了sudo 成服务用户执行命令 输入密码的麻烦。
另外,关于sudo 第一次输入密码后,不同的系统的默认密码缓存有效期不一致,大概10分钟左右,不过可以通过Defaults timestamp_timeout=* 参数来修改,0表示不缓存,每次都要输入密码,-1表示一直缓存直到reboot。 也可以命令行
sudo -k 清空缓存时间,sudo -k 重新加载缓存时间。
关于Defaults参数的扩展:
Defaults@Host_List
Defaults:User_List
Defaults!Cmnd_List
Defaults>Runas_List

浙公网安备 33010602011771号