xharvard 2013-07-30
Linux系统为我们提供了su、sudo两种用户权限管理机制,其中su主要是用来切换用户,而sudo用户来提升执行权限。下面分别进行详细讲解。
一、su命令——切换用户
使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要目标用户的密码进行验证(从root切换为其他用户时列外)
例如:当普通用户切换root身份时,需要输入root的密码。
上述命令操作中,选项“-”等同于“--login”或“-l”,表示切换后进入目标用户的登录shell环境,若缺少此选项则仅切换身份,不切换用户环境。
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户的登录密码,带来安全风险。为了加强su命令的使用控制,可以借助于pam_wheel认证模块,只允许极个别用户使用su命令进行切换。
实现过程如下:
1、将需要使用su命令的用户加入wheel组
2、修改配置文件/etc/pam.d/su、启用pam_sheel认证。
vim /etc/pam.d/su
auth required pam_wheel.so use_uid
......//省略部分内容
3、此时user用户就可以使用su命令了,而其他没有加入wheel组的用户就不可以使用su命令。
二、sudo命令——提升权限
使用sudo命令可以使某些用户具有一些特殊的权限,而这个用户不需要知道管理员的密码,不过,这需要有管理员预先进行授权,指定允许那些用户以管理员的身份来执行那些命令。
sudo命令的配置文件在/etc/sudoers中,需要向这个配置文件中添加指定用户的指定权限,此用户才能执行这些权限,可以使用visudo命令或vim等命令进行编辑。(注意:使用vim进行编辑时需要加!强制保存)
配置文件/etc/sudoers中,授权记录的基本配置格式如下所示。
user MACHING=COMMANDS
主要包括用户、主机、命令三个部分,即那些用户从那些主机执行那些命令。
用户(user):授权的用户名,或采用“%组名”的形式表示一个组。
主机(MACHING):使用此配置文件的主机名,一般设为localhost。
命令(COMMABDS):允许授权的用户通过sudo方式执行的命令,需要填写命令程序的完整路径,多个命令之间使用逗号“,”隔开。
1、修改/etc/sudores配置文件给指定用户授权
列如:授权用户user具有执行ifconfig命令的权限。
[root@lcoalhost /]#visudo
......//省略部分内容
user localhost=/sbin/ifconfig
2、使用别名定义的方式给多个用户授权
当使用相同授权的用户较多时,或者授权的命令较多时,可以采用集中定义别名。用户、主机、命令部分都可以定义别名(别名必须大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。
如下:设置允许用户user1、user2、user3在主机localhost执行rpm、yum等命令
[root@lcoalhost /]#visudo
......//省略部分内容
User_Alias USERS=user1,user2,user3
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
USERS localhost=PKGTOOLS
在给用户授权时,命令部分可以使用通配符“*”和取反符号“!”,当需要授权某个目录下的所有命令,取消其中个别命令时特别有用。
3、为sudo启用日志记录功能
默认情况下,通过sudo方式执行的操作并不记录。若要启用sudo日志记录功能,应在/etc/sudores文件中增加“Defaults logfile”选项。
如下:添加sudo日志记录功能
[root@lcoalhost /]#visudo
......//省略部分内容
Defaults logfile=“/var/log/sudo”
4、用户通过sudo命令执行授权命令
对于已获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令行作为sudo命令的参数即可。如下:user用户执行ifconfig命令
首次执行sudo命令需要输入当前用户的密码,有效期是5分钟,也就是输入密码后5分钟内没有使用sudo密码,那么下次执行sudo命令时又会提示输入密码。
若不希望用户执行sudo命令时输入密码,可以修改配置文件/etc/sudores如下:
[root@lcoalhost /]#visudo
......//省略部分内容
user localhost=NOPASSWD:/sbin/ifconfig
此时在使用user用户执行ifconfig命令时就不在提示输入密码了。
若要查看当前用户以获得哪些sudo授权命令时,可是执行“sudo -l”命令。
推荐阅读: