sudo
能通过精细化的授权配置(/etc/sudoers 文件)和密码验证,帮助管理员更安全、灵活地控制用户权限。一般都会设立一个超级管理员权限组,将有管理员用户加入到超级管理员用户组,就可以通过 sudo
临时获取超级管理员权限执行命令。
查看超级管理员组
不同的 Linux 发行版的管理权限的组名不同:
- Debian/Ubuntu 系列:
通常有一个名为sudo
的组,用于授权用户获得管理员权限。 - Red Hat/CentOS/Fedora 系列:
这些系统中一般使用wheel
组来授予 sudo 权限,而不是sudo
组。 - 其他发行版或自定义系统:
有的可能使用admin
等其他组名,或者管理员权限配置方式不同。
可以通过下列命令查看当前系统中是否有 sudo
、wheel
或 admin
等相关组:
1cat /etc/group | grep -E "sudo|wheel|admin"
Manjaro 就是使用 wheel
组来授予 sudo 权限。
配置文件 /etc/sudoers
通过命令 visudo
可以对配置 sudo
的文件 /etc/sudoers
进行编辑,来配置 sudo 的相关行为。
/etc/sudoers
文件只有只读权限,虽然可以通过 root 权限强行写入,但是不会检查语法,不保证每次修改的内容符合语法,有可能会引发系统异常。因此,通常使用 visudo
来修改。
但 visudo
默认的编辑器是 vi
,不习惯使用的话,可以通过 export EDITOR=vim
将 visudo
编辑器临时换成 vim
。
manjaro 中 /etc/sudoers
文件一般如下
1...2##3## User privilege specification4##5root ALL=(ALL:ALL) ALL6
7## Uncomment to allow members of group wheel to execute any command8# %wheel ALL=(ALL:ALL) ALL9
10## Same thing without a password11# %wheel ALL=(ALL:ALL) NOPASSWD: ALL12
13## Uncomment to allow members of group sudo to execute any command14# %sudo ALL=(ALL:ALL) ALL15
7 collapsed lines
16## Uncomment to allow any user to run sudo if they know the password17## of the user they are running the command as (root by default).18# Defaults targetpw # Ask for the password of the target user19# ALL ALL=(ALL:ALL) ALL # WARNING: only use this together with 'Defaults targetpw'20
21## Read drop-in files from /etc/sudoers.d22@includedir /etc/sudoers.d
越往后的配置,优先级越高,也就是越往后的配置,会覆盖掉前面与之冲突的配置。下面介绍两个配置的含义。
root ALL=(ALL:ALL) ALL
-
作用对象: 只作用于用户
root
。 -
解释:
-
第一个
ALL
:root
用户可以从任意主机执行sudo
。 -
ALL=(ALL:ALL)
:- 第一个
ALL
: 指定可以切换到的目标用户(这里表示任意用户)。 - 第二个
ALL
(冒号后的部分): 指定可以切换到的目标组(这里表示任意组)。
- 第一个
-
最后的
ALL
:指示允许执行的命令(这里表示任意命令)。
-
-
总结:
root
用户不需要提权,因为它本身就是超级用户,所以这个配置通常是冗余的,仅用作兼容性说明,明确root
用户没有任何限制。
%wheel ALL=(ALL:ALL) ALL
-
作用对象: 作用于用户组
wheel
。-
%
表示后面跟的是一个用户组,而不是单个用户。 - 用户组
wheel
通常是系统管理员用来标记具备提权能力的用户。
-
-
解释:
-
第一个
ALL
:wheel
组内的用户可以从任意主机执行sudo
。 -
ALL=(ALL:ALL)
:- 第一个
ALL
: 组内用户可以切换到任意用户。 - 第二个
ALL
(冒号后的部分): 组内用户可以切换到任意组。
- 第一个
-
最后的
ALL
:组内用户可以执行任意命令。
-
-
总结: 加入
wheel
组的用户可以使用sudo
提权来执行任何命令。
不使用密码提权
取消掉 # %wheel ALL=(ALL:ALL) NOPASSWD: ALL
前面的注释即可。
1%wheel ALL=(ALL:ALL) NOPASSWD: ALL
表示 wheel
用户组中的任意用户都可以使用 sudo 提权到 root,且不需要密码。
覆盖配置文件
一般在 ubuntu、debian 系统中,取消注释就可以免密提权,因为这类系统中 /etc/sudoers.d
文件夹下,没有额外的配置文件,那么 /etc/sudoers
文件的最后一行 @includedir /etc/sudoers.d
即便将 /etc/sudoers.d
包含进去,也不会生效。但 manjaro 下默认有一个配置文件 /etc/sudoers.d/10-installer
,其中的内容为:
1$ sudo cat /etc/sudoers.d/10-installer2%wheel ALL=(ALL) ALL
根据前面提到的 /etc/sudoers
中的规则,越往后的配置优先级越高,manjaro 发行版中,即便在 /etc/sudoers
中取消了注释 %wheel ALL=(ALL:ALL) NOPASSWD: ALL
,也会被 /etc/sudoers.d/10-installer
中的配置覆盖。
所以,可以将 /etc/sudoers
最后一行 @includedir /etc/sudoers.d
注释掉;也可以在/etc/sudoers.d/10-installer
中添加一条,将我们需要免密提权的用户添加进文件中,如下:
1%wheel ALL=(ALL) ALL2ling ALL=(ALL) NOPASSWD: ALL