分类: LINUX
2010-03-12 20:29:38
一 在一般情况下,一般用户通过执行“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, 加入或者取消注释: 这么设置以后,只有属于 wheel 组的用户可以使用 su 但是有个问题,由于上述方法是针对 su 这个 service 的,并不对其参数作检查,所以非 wheel 组的用户 su 为其他用户的权限也被剥夺了(其实并不算"问题",只是我们的需求一般只是限制特定用户能 su to root,并不打算禁止 su to 其他用户罢了)。 尝试过写一个 su 的 wrapper 来搞定它,感觉太丑,于是还是考虑从 PAM 内部来解决。 翻到 ,""给出了禁止 su to root 的办法: /etc/pam.d/su 中,添加 那么,既然可以分别对使用 su 以及 su 后成为的用户进行限制,或许可以尝试将两者结合起来: if ( 当前用户是否属于 wheel 组 ) { 这可通过 PAM 规则里面的 control flag 实现。简单的 control flag 包括 required, requisite, sufficient, optional, include, substack 较复杂一些的,使用
这么一种形式,可定义由不同的返回值(value)触发的不同操作(action) 给出,在未使用 trust 选项时,若用户属于 wheel 组,返回值是 PAM_IGNORE,对应的在 control flag 中的 value 是 ignore。那么,在 /etc/pam.d/su 中可以这么写:
其中 ignore = 1 表示返回值为 PAM_IGNORE 时,跳过后面的 1 条规则; 而 default=ignore 表示如果返回了其他没有指定 action 的 value,则忽略此规则。 这样就可以做到:wheel 组的成员可以 su,非 wheel 组成员只可 su 到非 root 的其他用户。 |