CentOS Linux 系统建立管理员组wheel的使用
一
在一般情况下,一般通过执行“su -”命令、输入正确的root密码,可以登录为root来对进行管理员级别的配置。但是,为了更进一步加强的安全性,有必要建立一个管理员的 组,只允许这个组的用户来执行“su -”命令登录为root用户,而让其他组的用户即使执行“su -”、输入了正确的root密码,也无法登录为root用户。在UNIX下,这个组的名称通常为“wheel”。
[root@sample ~]# usermod -G wheel CentOSpub ← 将一般用户 CentOSpub 加在管理员组wheel组中
[root@sample ~]# vi /etc/pam.d/su ← 打开这个配置文件
#auth required /lib/security/$ISA/pam_wheel.so use_uid ← 找到此行,去掉行首的“#”
↓
auth required /lib/security/$ISA/pam_wheel.so use_uid ← 变为此状态(大约在第6行的位置)
[root@sample ~]# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs ← 添加语句到行末
修改su的权限
chgrp wheel /bin/su
chmod 4750 /bin/su
以上操作完成后,可以再建立一个新用户,然后用这个新建的用户测试会发现,没有加入到 wheel组的用户,执行“su -”命令,即使输入了正确的root密码,也无法登录为root用户。
这个时候,只有wheel组的用户可以su命令
二编辑 /etc/pam.d/su, 加入或者取消注释:
auth required pam_wheel.so use_uid
其中第三列根据发行版选择是否使用绝对路径
这么设置以后,只有属于 wheel 组的用户可以使用 su
但是有个问题,由于上述方法是针对 su 这个 service 的,并不对其参数作检查,所以非 wheel 组的用户 su 为其他用户的权限也被剥夺了(其实并不算"问题",只是我们的需求一般只是限制特定用户能 su to root,并不打算禁止 su to 其他用户罢了)。
尝试过写一个 su 的 wrapper 来搞定它,感觉太丑,于是还是考虑从 PAM 内部来解决。
翻到 ChinaUnix 上面一个有同样需求的贴子,"網中人"给出 了禁止 su to root 的办法:
/etc/pam.d/su 中,添加auth required pam_listfile.so item=user sense=deny onerr=succeed file=/etc/sudeny
这行语句的功能是,
使用 pam_listfile.so 模块,检查 /etc/sudeny 文件(由参数 file=/etc/sudeny 指定),如果不存在该文件或其他诸如不能读取的错误发生,将返回 PAM_SUCCESS(由参数 onerr=succeed 指定);如果存在,读取 /etc/sudeny 文件的内容进行用户名检查(由参数 item=user 指定);不能 su 成为文件中指定的用户(由参数 sense=deny 指定)。
然后,将 root 写入 /etc/sudeny 文件即可。
那么,既然可以分别对使用 su 以及 su 后成为的用户进行限制,或许可以尝试将两者结合起来:
if ( 当前用户是否属于 wheel 组 ) { 直接进行后续的诸如要求输入密码的认证}else if ( 打算 su to 的用户名在 /etc/sudeny 中 ) { 禁止!else { 进行后续认证}
这可通过 PAM 规则里面的 control flag 实现。简单的 control flag 包括
required, requisite, sufficient, optional, include, substack
较复杂一些的,使用
[value1=action1 value2=action2 ...]
这么一种形式,可定义由不同的返回值(value)触发的不同操作(action)
pam_wheel 的文档给出,在未使用 trust 选项时,若用户属于 wheel 组,返回值是 PAM_IGNORE,对应的在 control flag 中的 value 是 ignore。那么,在 /etc/pam.d/su 中可以这么写:
auth [ignore=1 default=ignore] pam_wheel.so use_uid debug
auth required pam_listfile.so item=user sense=deny onerr=succeed file=/etc/sudeny
其中 ignore = 1 表示返回值为 PAM_IGNORE 时,跳过后面的 1 条规则; 而 default=ignore 表示如果返回了其他没有指定 action 的 value,则忽略此规则。
这样就可以做到:wheel 组的成员可以 su,非 wheel 组成员只可 su 到非 root 的其他用户。
- 最新评论