Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591866
  • 博文数量: 118
  • 博客积分: 2114
  • 博客等级: 大尉
  • 技术积分: 1275
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-10 00:02
文章分类

全部博文(118)

文章存档

2019年(1)

2018年(4)

2017年(1)

2016年(6)

2015年(1)

2014年(1)

2013年(5)

2012年(4)

2011年(17)

2010年(13)

2009年(65)

分类: LINUX

2010-03-12 20:29:38

CentOS Linux系统建立管理员组wheel的使用
2008年06月17日 星期二 12:05

在一般情况下,一般用户通过执行“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 内部来解决。

翻到 ,""给出了禁止 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)

给出,在未使用 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 的其他用户。

阅读(2743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~