在Linux系统中应用su和sudo

原文发表于《网络安全和信息化》2017年第1期,现转发到博客。vim


Linux系统对用户的权限定义比较严格,root用户在系统中具备至高无上的权限,而普通用户的权限则受到严格限制。在实际使用中,管理员通常都是先以普通用户的身份登陆,而后当须要时再利用su命令切换到root用户身份。对于普通用户,若是须要执行更高权限的命令,则能够由管理员经过sudo命令对其受权。本文将介绍susudo命令在Linux运维工做中的一些常见用法。安全

1.    限制可以使用su命令的用户

 默认状况下,任何用户只要知道了root用户的密码,均可以执行su命令切换到root用户。可是咱们可能并不但愿全部用户都能切换到root身份,而是只想指定某个用户能够切换,好比只容许zhangsan用户使用su命令切换身份。bash

要限制使用su命令的用户,须要进行两个方面的设置。网络

首先须要启用pam_wheel认证模块,运维


[root@server ~]# vim /etc/pam.d/su       //将文件中下面一行前的#去掉ide

auth            required        pam_wheel.so use_uid测试


这样凡是执行“su – root”命令的用户都将受到限制,只有wheel组中的成员才有权限执行该命令。ui

于是下面须要作的就是将zhangsan加入到wheel组中。spa


[root@server ~]# gpasswd -a zhangsan wheel    orm

[root@server ~]# id zhangsan

uid=501(zhangsan) gid=501(zhangsan) groups=501(zhangsan),10(wheel)


这样当使用一个不属于wheel组成员的帐号切换到root时,系统便会拒绝。

例如,使用lisi切换到root,即便输入了正确的root用户密码,也会提示“密码不正确”。


[lisi@localhost ~]$ su - root

口令:

su: 密码不正确


2.    利用sudo命令对普通用户受权

利用su命令切换到root身份,必需要知道root用户的密码。这对于管理员没什么问题,但若是将密码透露给一个普通用户,则很明显不利于系统安全管理,于是对于普通用户更常使用的是sudo命令。

sudo命令的做用主要在于可以容许通过受权的个别普通用户以root权限执行一些受权使用的管理命令。

好比以普通用户zhangsan的身份建立用户,系统会提示没有权限:


[zhangsan@localhost ~]$ useradd test

-bash: /usr/sbin/useradd: 权限不够


下面让zhangsan使用sudo命令以root权限去执行命令。注意,普通用户使用sudo执行命令时会要求提供本身的密码进行验证。


[zhangsan@localhost ~]$ sudo useradd test

[sudo] password for zhangsan:

zhangsan is not in the sudoers file.    This incident will be reported.


zhangsan使用sudo命令仍然没法建立用户,这是由于在Linux中只有被受权的用户才能执行sudo命令,并且使用sudo也只能执行那些被受权过的命令。

因此要使用sudo命令首先必需要通过管理员的受权设置,须要修改配置文件“/etc/sudoers”,sudoers文件的基本配置格式如图1所示。

    wKioL1l9gViA7Xv6AAB9WjT6wIk374.jpg-wh_50

1 sudoers文件的配置格式

例如受权普通用户zhangsan能够经过sudo方式执行全部的命令:


[root@localhost ~]# vim /etc/sudoers     //在文件末尾增长下列内容

zhangsan    ALL=ALL


受权普通用户lisi能够执行/sbin//usr/sbin/目录中的全部命令:


lisi    ALL=/sbin/*,/usr/sbin/*


注意,“/etc/sudoers”是一个只读文件,修改完成保存退出时要使用“wq!”命令。

若是但愿用户只能执行部分命令,能够在“/etc/sudoers”中指定用户所能执行的命令的文件路径,命令的文件路径能够经过which命令查找。

例如:受权zhangsan只能执行useradduserdelpasswd命令。


zhangsan    ALL=/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd


用户每次在执行sudo命令时都要输入本身的密码,为了省去普通用户执行sudo命令时须要输入密码的麻烦,能够在“/etc/sudoers”进行以下设置:


zhangsan    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd


zhangsan被受权执行passwd命令,为了防止zhangsan修改root用户的密码,咱们能够在/etc/suoders中加入“! /usr/bin/passwd root”:


zhangsan    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd,! /usr/bin/passwd root


除了针对用户受权以外,咱们也能够对用户组受权,这样用户组内的全部成员用户就都具备了执行sudo命令的权限。若是受权的对象是用户组,须要在组名的前面加上“%”。

例如:受权managers组内的成员用户能够添加、删除用户帐号。


%managers    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd,! /usr/bin/passwd root


最后咱们以zhangsan的身份登陆系统,执行“sudo –l”命令能够查看当前用户被受权执行的命令,如图2所示。

wKioL1l9gbKxRC1LAADPl0XuQts125.jpg-wh_50

2查看用户被受权执行的命令

进行命令测试,发现zhangsan能够更改普通用户lisi的密码,即便密码不符合安全规则也一样能够设置成功,这证实zhangsan是在以root用户的权限执行passwd命令。而当zhangsan试图更改root用户的密码时,系统则提示没有权限。测试结果如图3所示。

wKiom1l9gc3B8rfZAABsTNQY1GI768.jpg-wh_50

3命令测试结果

相关文章
相关标签/搜索