本文将讨论如何在 Linux 中让渡根用户的部分权限给其它普通用户。
引言我们知道 Linux 的上帝只有也只能有一个,就是根用户 root,作为掌握根用户的系统管理员,理论上最好也只有一个。但在很多情况下,如多人共管主机,某些用户请求执行某些需要根用户权限的命令,或者系统管理员忙不过来的时候,就需要共享部分根用户权限给其他人了。
将系统根用户密码告诉很多人,从安全角度考虑显然不是一个好的选择,这往往会成为灾难事件的开端。那么应该如何做呢?
sudo 命令给我们提供了一个不需要根用户密码,也能执行根用户权限命令的途径。通过 sudo 命令,我们可以分配给普通用户一些合理的权限,让他们执行一些只有根用户,或其它特定用户才能完成的任务。比如,运行一些像 reboot、shutdown 之类的系统命令,或者编辑系统配置文件。这样,不仅减少了根用户登录次数和管理时间,也提高了系统的安全性。
用法一开始系统默认仅有 root 可以执行 suto 命令,通过修改 /etc/sudoers
文件可以让别的用户也能执行 sudo 命令。注意,该文件也只有 root 用户可以修改。
使用 cat /etc/sudoers
查看该文件,可以发现其中有这行 root ALL=(ALL) ALL
,其标准格式如下:
授权用户/组 主机=[(允许切换到哪些用户或组)] [是否需要输入密码] 命令1,命令2,...
- 第一字段:代表了可使用 sudo 命令的用户或用户组。如果是用户组,前面需要加一个
%
。这里是 root 表示允许 root 用户使用 sudo 命令。 - 第二字段:表示登录用户的来源主机名。ALL 表示允许用户在任意主机上登录并执行 sudo 命令。
- 第三字段:如果省略, 相当于
(root:root)
,表示可以通过sudo 提权到 root;如果为(ALL)
或者(ALL:ALL)
,表示能够提权到(任意用户:任意用户组)
。注意:如果没省略,必须使用( )
包含起来。 - 第四字段:可选项是
NOPASSWD:
,表示执行 sudo 时不需要提供密码。 - 第五字段:用户可使用的命令列表。如果有多个请使用逗号分隔,命令必须使用绝对路径。ALL 表示允许所有命令。
如果在 /etc/sudoers
中增加一行 stus ALL=(ALL) ALL
,表示 stus
用户可以在任何地方登录,以任意用户身份执行任何命令。
[root@centos]# chmod 640 /etc/sudoers # 增加写权限
[root@centos]# vi /etc/sudoers # 添加一行 stus ALL=(ALL) ALL 并保存退出
接下来,我们就是可以使用 stus
用户来执行一些只有 root 用户才有权限执行的命令,比如查看 /etc/sudoers
文件:
[stus@centos]$ sudo -u root cat /etc/sudoers
随便一提,使用 sudo 命令以 root 身份执行命令的时候可以省略 -u
选项,命令是默认转换为 root 身份执行。
还需注意,stus ALL=(ALL) ALL
相当于给了 stus
用户等同于 root 的权限,除非我们完全信任 stus
,否则最好不要这样做。例如,如果只给了 stus
用户关机的权限,且只能在名为 centos 的主机(即本地主机)上才能执行,可以在 /etc/sudoers
中添加一行:stus centos=(root) /sbin/shutdown -h 5
。
中国大学 MOOC | Linux 系统管理 | 主题 06 管好用户 | 小节 6 让渡用户权限