Linux sudo命令

Linux sudo命令教程

Linux 中的 sudo 命令用于以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。

sudo 命令的执行者必须要在 /etc/sudoers 中有出现。

Linux sudo命令详解

定义

以系统管理员身份执行命令。

语法

sudo [options] cmd

参数

参数 描述
options sudo 命令使用的参数。
cmd 要执行的命令。

sudo命令常用参数

参数 描述
-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 )。

Linux sudo命令常用实例

实例

实例 描述
sudo cmd 以 root 用户执行 cmd 命令。
sudo -u username cmd 以 username 用户执行 cmd 命令。
sudo -l 列出目前的权限。

sudo命令执行过程

  1. 当用户运行 sudo 命令时,系统会先通过 /etc/sudoers 文件,验证该用户是否有运行 sudo 的权限;
  2. 确定用户具有使用 sudo 命令的权限后,还要让用户输入自己的密码进行确认。出于对系统安全性的考虑,如果用户在默认时间内(默认是 5 分钟)不使用 sudo 命令,此后使用时需要再次输入密码;
  3. 密码输入成功后,才会执行 sudo 命令后接的命令。

显然,能否使用 sudo 命令,取决于对 /etc/sudoers 文件的配置(默认情况下,此文件中只配置有 root 用户)。

sudo配置文件/etc/sudoers

修改 /etc/sudoers,不建议直接使用 vim,而是使用 visudo。因为修改 /etc/sudoers 文件需遵循一定的语法规则,使用 visudo 的好处就在于,当修改完毕 /etc/sudoers 文件,离开修改页面时,系统会自行检验 /etc/sudoers 文件的语法。

因此,修改 /etc/sudoers 文件的命令如下:

visudo

执行完毕后,终端输出如下:

97_Linux sudo命令详解.png

通过 visudo 命令,我们就打开了 /etc/sudoers 文件,我们继续查询该文件,大概可以看到如下文件内容:

98_Linux sudo命令详解.png

这两行模板的含义分为是:

root ALL=(ALL) ALL #用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径) #%wheel ALL=(ALL) ALL #%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)

详细解释如下:

模块 含义
用户名或群组名 表示系统中的那个用户或群组,可以使用 sudo 这个命令。
被管理主机的地址 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。
可使用的身份 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。
授权命令 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。

以root用户执行命令

语法

sudo cmd

案例

我们使用 sudo 命令,执行查看 /etc/passwd 文件内容,具体命令如下:

sudo cat /etc/passwd

运行后,终端输出如下:

99_Linux sudo命令详解.png

我们看到,我们使用了 sudo 命令,以超级管理员身份执行了 cat 命令。

以指定用户执行命令

语法

sudo -u username cmd

案例

我们使用 sudo 命令,显式指定使用 root 用户执行查看 /etc/passwd 文件内容,具体命令如下:

sudo -u root cat /etc/passwd

运行后,终端输出如下:

100_Linux sudo命令详解.png

我们看到,我们使用了 sudo 命令,显式的指定了以 root 用户执行 cat 命令。

列出当前权限

语法

sudo -l

案例

我们使用 sudo 命令,列出当前权限,具体命令如下:

sudo -l

运行后,终端输出如下:

101_Linux sudo命令详解.png

我们看到,我们使用了 sudo 命令,查看了当前的执行权限。

Linux sudo命令总结

Linux 中的 sudo 命令用于以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。sudo 命令的执行者必须要在 /etc/sudoers 中有出现。