Linux sudo 命令

Linux 为了安全的运行软件,都会在安装软件时创建个单独的分组给软件。软件只能操作自己有权限的文件资源,只有 root 账户有全部权限。在正式服务器中,一般不会给用户直接使用 root 账号进行操作。但安装软件需要用到 root 账号权限,这时就要用到 sudo 命令了,本文将会介绍它的配置和使用。

sudo 配置

/etc/sudoers
1
2
3
4
#...
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
#...
授权用户/%组 主机 =[(切换到任意用户[:任意用户组])] [是否需要输入密码验证] 命令1,命令2,…
root ALL =(ALL) ALL
%wheel ALL =(ALL:ALL) ALL
vagrant ALL =(ALL) NOPASSWD: ALL

Note:

表头中用 [] 包起来表示可选内容,其他的必须设置。 ALL 表示全部。

第 5 项中的命令要以使用 * 进行匹配,也可以用 ! 去除匹配命令的指定命令,如下:

1
timi ALL /usr/sbin/*,!/usr/sbin/reboot

timi 用户可以用命令匹配的用户执行 /usr/sbin 目录下的全部命令,reboot 命令除外。

配置用户时通过放在 /etc/sudoers.d/ 文件夹中。如配置 gitea 用户和 dev 组:

/etc/sudoers.d/gitea
1
gitea ALL=(vagrant:wheel) NOPASSWD: /usr/sbin/reboot,/usr/sbin/shutdown

上面表示 gitea 用户使用 sudo 执行 /usr/sbin/reboot,/usr/sbin/shutdown 命令时会用 wheel 组的 vagrant 用户权限执行,不需要输入密码。

/etc/sudoers.d/%dev
1
%dev ALL ALL

上面表示 dev 组用户使用 sudo 执行所有命令时会用命令对应用户执行,但需要输入密码。

常用命令

非 root 用户显示出自己(执行 sudo 的使用者)的权限:

无权限显示
1
2
3
[root@localhost git]$ sudo -l
[sudo] password for git:
对不起,用户 git 不能在 localhost 上运行 sudo。
有权限显示
1
2
3
4
5
6
7
8
9
10
[root@localhost git]$ sudo -l
匹配此主机上 git 的默认条目:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2
QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 git 可以在该主机上运行以下命令:
(ALL) NOPASSWD: ALL
(ALL) NOPASSWD: ALL