合理运用su和sudo命令以保证系统用户安全


Linux系统为我们提供了su、sudo两种用户权限管理机制,其中su主要是用来切换用户,而sudo用户来提升执行权限。下面分别进行详细讲解。

一、su命令——切换用户
使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要目标用户的密码进行验证(从root切换为其他用户时列外)
例如:当普通用户切换root身份时,需要输入root的密码。

合理运用su和sudo命令以保证系统用户安全

上述命令操作中,选项“-”等同于“--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命令。

合理运用su和sudo命令以保证系统用户安全

二、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命令

合理运用su和sudo命令以保证系统用户安全

首次执行sudo命令需要输入当前用户的密码,有效期是5分钟,也就是输入密码后5分钟内没有使用sudo密码,那么下次执行sudo命令时又会提示输入密码。
若不希望用户执行sudo命令时输入密码,可以修改配置文件/etc/sudores如下:
[root@lcoalhost /]#visudo
......//省略部分内容
user    localhost=NOPASSWD:/sbin/ifconfig
此时在使用user用户执行ifconfig命令时就不在提示输入密码了。
若要查看当前用户以获得哪些sudo授权命令时,可是执行“sudo -l”命令。

推荐阅读:

Ubuntu的sudo与su命令使用与开启root帐户

sudo: sorry, you must have a tty to run sudo

Linux配置sudo权限

sudo配置临时取得root权限

Linux下解决用户不能执行sudo的方法

Linux系统管理员不可不知的命令:sudo 

相关内容