sudoers 文件

sudoers 文件是 Linux 系统中的一个配置文件,用于定义哪些用户或用户组能够以 root 用户的身份执行特定的命令或操作。这样可以在不将 root 密码分享给其他用户的情况下,允许他们执行一些需要 root 权限的操作,从而提高系统的安全性和管理效率.sudoers 文件通常位于 /etc/sudoers/etc/sudoers.d 目录下,只有root 用户才有权限修改该文件。

/etc/sudoers 文件中的每一行都是一个规则。规则的基本格式如下:

1
USER HOST=(RUNAS) COMMAND

  • USER 用户名或用户组(以 % 开头表示用户组)。
  • HOST 主机名,表示这个规则适用于哪些主机。
  • RUNAS 运行身份,表示用户可以以哪些用户或用户组的身份执行命令。
  • COMMAND 是命令,表示用户可以执行哪些命令。

root ALL=(ALL) ALL
表示允许 root 用户在所有主机上,以任何用户的身份,执行任何命令.

更多例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# /etc/sudoers

#允许在 sudo 用户组中的所有用户,从任何主机,以任何用户(包括 root)的身份,执行任何命令
#%sudo:表示 sudo 用户组。在 Linux 中,以 % 开头的表示用户组。
#ALL:第一个 ALL 表示这个规则适用于所有的主机。
#(ALL:ALL):这个部分表示用户可以以任何用户(第一个 ALL)和任何组(第二个 ALL)的身份执行命令。
#ALL:最后一个 ALL 表示用户可以执行所有的命令。
%sudo ALL = (ALL:ALL) ALL


# 允许用户组 wheel 执行所有命令
# %wheel 表示用户组 wheel,ALL 表示所有主机,(ALL) 表示所有用户,最后一个 ALL 表示所有命令
%wheel ALL=(ALL) ALL


# 允许用户 alice 以 root 身份执行 /usr/bin/vim 和 /usr/bin/less 命令
alice ALL=(root) /usr/bin/vim, /usr/bin/less


# 允许用户 bob 以 root 身份执行 /sbin/reboot 命令
bob ALL=(root) /sbin/reboot

# 允许用户 charlie 以 www-data 用户身份执行 /usr/bin/php 命令
charlie ALL=(www-data) /usr/bin/php

# 允许用户 dan 以 root 身份执行 /usr/bin/apt-get 命令,但需要输入密码
dan ALL=(root) /usr/bin/apt-get, PASSWD: /usr/bin/apt-get

添加一个需要 root 权限的脚本

  • 使用 root用户打开 /etc/sudoers

    1
    sudo visudo
  • 添加配置

    1
    username ALL=(ALL:ALL) NOPASSWD: /path/to/your/script
  • /etc/rc.local文件中添加你的脚本,使其在系统启动时自动执行

    1
    2
    #添加
    sudo /path/to/your/script

    在较新的 Linux 发行版中可能没有 /etc/rc.local 文件, 系统已经将其服务化了, 从 rc0rc6 有7个启动级别, 数字越大优先级越低

  • rc0: 停机(不能使用)

  • rc1: 单用户模式

  • rc2: 多用户模式,但是没有NFS

  • rc3: 完全多用户模式

  • rc4: 没有使用,系统预留

  • rc5: 图形界面模式

  • rc6: 重启模式(不能使用)

从命名来看,这些脚本分为两类: KXX, SXX
其中 K 代表 Kill,S 代表 Start