Lyndra's Blog

sudo免密码

2024-12-06
系统维护 ServerManjaroUbuntu
6分钟
1113字
温馨提示:本文最后更新于 2025-03-11 ,部分信息可能因时间推移而不再适用,欢迎反馈。

sudo​ 能通过精细化的授权配置(/etc/sudoers 文件)和密码验证,帮助管理员更安全、灵活地控制用户权限。一般都会设立一个超级管理员权限组,将有管理员用户加入到超级管理员用户组,就可以通过 sudo​ 临时获取超级管理员权限执行命令。

查看超级管理员组

  不同的 Linux 发行版的管理权限的组名不同:

  1. Debian/Ubuntu 系列
    通常有一个名为 sudo​ 的组,用于授权用户获得管理员权限。
  2. Red Hat/CentOS/Fedora 系列
    这些系统中一般使用 wheel​ 组来授予 sudo 权限,而不是 sudo​ 组。
  3. 其他发行版或自定义系统
    有的可能使用 admin​ 等其他组名,或者管理员权限配置方式不同。

  可以通过下列命令查看当前系统中是否有 sudo​、wheel​ 或 admin​ 等相关组:

Terminal window
1
cat /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​ 文件一般如下

Terminal window
1
...
2
##
3
## User privilege specification
4
##
5
root ALL=(ALL:ALL) ALL
6
7
## Uncomment to allow members of group wheel to execute any command
8
# %wheel ALL=(ALL:ALL) ALL
9
10
## Same thing without a password
11
# %wheel ALL=(ALL:ALL) NOPASSWD: ALL
12
13
## Uncomment to allow members of group sudo to execute any command
14
# %sudo ALL=(ALL:ALL) ALL
15
7 collapsed lines
16
## Uncomment to allow any user to run sudo if they know the password
17
## of the user they are running the command as (root by default).
18
# Defaults targetpw # Ask for the password of the target user
19
# ALL ALL=(ALL:ALL) ALL # WARNING: only use this together with 'Defaults targetpw'
20
21
## Read drop-in files from /etc/sudoers.d
22
@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​ 前面的注释即可。

Terminal window
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​,其中的内容为:

Terminal window
1
$ sudo cat /etc/sudoers.d/10-installer
2
%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​ 中添加一条,将我们需要免密提权的用户添加进文件中,如下:

Terminal window
1
%wheel ALL=(ALL) ALL
2
ling ALL=(ALL) NOPASSWD: ALL

  ‍

本文标题:sudo免密码
文章作者:Lyndra
发布时间:2024-12-06
总访问量
总访客数人次
Copyright 2025
站点地图