Linux 中的 sudo 命令用于以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。
sudo 命令的执行者必须要在 /etc/sudoers 中有出现。
以系统管理员身份执行命令。
sudo [options] cmd
参数 | 描述 |
---|---|
options | sudo 命令使用的参数。 |
cmd | 要执行的命令。 |
参数 | 描述 |
---|---|
-l | 显示出自己(执行 sudo 的使用者)的权限。 |
-v | 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码。 |
-k | 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟)。 |
-b | 将要执行的指令放在背景执行。 |
-p prompt | 可以更改问密码的提示语,其中 %u 会代换为使用者的帐号名称, %h 会显示主机名称。 |
-u username/#uid | 不加此参数,代表要以 root 的身份执行指令,而加了此参数,可以以 username 的身份执行指令(#uid 为该 username 的使用者号码)。 |
-s | 执行环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell。 |
-H | 将环境变数中的 HOME (家目录)指定为要变更身份的使用者家目录(如不加 -u 参数就是系统管理者 root )。 |
实例 | 描述 |
---|---|
sudo cmd | 以 root 用户执行 cmd 命令。 |
sudo -u username cmd | 以 username 用户执行 cmd 命令。 |
sudo -l | 列出目前的权限。 |
显然,能否使用 sudo 命令,取决于对 /etc/sudoers 文件的配置(默认情况下,此文件中只配置有 root 用户)。
修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法。
因此,修改 /etc/sudoers 文件的命令如下:
visudo
执行完毕后,终端输出如下:
通过 visudo 命令,我们就打开了 /etc/sudoers 文件,我们继续查询该文件,大概可以看到如下文件内容:
这两行模板的含义分为是:
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
详细解释如下:
模块 | 含义 |
---|---|
用户名或群组名 | 表示系统中的那个用户或群组,可以使用 sudo 这个命令。 |
被管理主机的地址 | 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。 |
可使用的身份 | 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。 |
授权命令 | 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。 |
sudo cmd
我们使用 sudo 命令,执行查看 /etc/passwd 文件内容,具体命令如下:
sudo cat /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sudo 命令,以超级管理员身份执行了 cat 命令。
sudo -u username cmd
我们使用 sudo 命令,显式指定使用 root 用户执行查看 /etc/passwd 文件内容,具体命令如下:
sudo -u root cat /etc/passwd
运行后,终端输出如下:
我们看到,我们使用了 sudo 命令,显式的指定了以 root 用户执行 cat 命令。
sudo -l
我们使用 sudo 命令,列出当前权限,具体命令如下:
sudo -l
运行后,终端输出如下:
我们看到,我们使用了 sudo 命令,查看了当前的执行权限。
Linux 中的 sudo 命令用于以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。sudo 命令的执行者必须要在 /etc/sudoers 中有出现。