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

 

posted @ 2021-01-12 16:21  随风拂面  阅读(289)  评论(0)    收藏  举报