【Linux】让渡用户权限(/etc/sudoers)

摘要

本文将讨论如何在 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

扫描二维码关注公众号,回复: 14398271 查看本文章

参考

中国大学 MOOC | Linux 系统管理 | 主题 06 管好用户 | 小节 6 让渡用户权限

猜你喜欢

转载自blog.csdn.net/qq_42951560/article/details/125193738