以超级用户身份使用 sudo
运行命令
- 解释
了解
sudo
的基本概念,以及如何以普通用户的身份使用它。- 原因
某些命令需要管理员特权。要以管理员权限运行某个命令,可以使用
sudo
命令。- 工作量
读完本文最多需要 20 分钟。如果您有具体的问题,可以直接跳转到相应章节。
- 目标
了解
sudo
的基本概念,并可以针对某些应用场景使用sudo
运行命令。- 要求
root
或sudo
特权。仅当您是系统管理员时,才拥有这些特权。有关详细信息,请参见 第 1 节 “sudo
基本概念”。需要安装 sudo 软件包。此软件包默认已在 SLE Micro 上提供。
1 sudo
基本概念 #
了解 sudo
的基本概念及其在 SLE Micro 系统上的工作原理。
sudo
是一个 Linux 命令,用于暂时以另一用户的身份执行程序。它是 substitute user and do
的缩写,借用另一用户(例如 root
用户)的特权。这样,sudo
便可以帮助您完成系统管理任务,且无需以 root
身份登录。
1.1 Linux 系统上的 sudo
概述 #
作为 Linux 上的普通用户,您拥有的权限已被缩减,但足以完成大多数任务。root
用户是 Linux 超级用户,其身份相当于管理员。
sudo
允许指定的(非 root
)用户或一组用户运行特权任务,例如以 root
或另一用户的身份调用系统函数。通过配置文件,系统管理员可以控制哪些用户有权针对哪些任务运行 sudo
命令。
1.2 SLE Micro 系统上的 sudo
#
出于安全考虑,所有 SLE Micro 系统都将普通用户与 root
用户区分开来。作为普通用户,您无法写入到系统目录,也无法安装程序。任何有权访问 root
口令的用户都可以获取相关特权,然后可能意外或恶意地破坏系统。
例如,您以普通用户身份登录,并意外地浏览到某个恶意网站。攻击者无法偷偷地在您的系统上安装恶意软件,因为您是以普通用户身份登录的,这意味着您不拥有任何管理权限。
如前所述,出于安全原因,不建议一直以 root
用户身份登录。较为安全的做法是始终以普通用户身份登录,并运行以 sudo
开头的受限命令。
sudo
需要管理员权限
在您设置了自己的 root
口令的单用户计算机上,您拥有使用 sudo
命令管理系统以及自行配置 sudo
设置所需的权限。
有关如何配置 sudo
的详细信息,请参见 https://documentation.suse.com/smart/systems-management/html/sudo-configure-superuser-privileges/index.html。
在多用户环境中(例如在公司中),sudo
特权由系统管理员管理,并且可以限制 root
用户的权限。即使使用 sudo
执行命令,您也可能无法更改某些系统目录或文件。
1.3 sudo
的工作原理 #
运行以 sudo
开头的命令时,系统会要求您输入 root
帐户的口令。成功完成身份验证后,将以超级用户特权执行该命令。
根据 sudo
配置,提升的特权会保留特定的一段时间,直到您在同一终端会话中的操作结束为止。如此,在运行另一个 sudo
命令时,您无需再次提供口令。
要使用 sudo
运行命令,请使用以下语法:
>
sudo [command]
以下示例说明如何直接在终端中使用 sudo
命令打开 YaST 控制中心。要打开 YaST,需要管理员权限,因此 YaST 只能与 sudo
命令配合使用。
sudo
打开 YaST 控制中心 #>
yast
Absolute path to 'yast' is '/usr/sbin/yast', so running it may require superuser privileges (eg. root).1>
sudo
yast
[sudo] password for root:2
如果仅输入 | |
如果结合 成功完成身份验证后, 将打开。 |
提升的特权会保留特定的一段时间,因此您不必为下一个 sudo
命令再次提供口令。
2 运行以 sudo
开头的命令 #
作为普通的用户,您可以在命令前加上 sudo
来以 root
身份运行任何命令。系统会提示您提供 root
口令。如果成功完成身份验证,便会以 root
身份运行命令。
运行以 sudo
开头的命令时,系统会要求您输入 root
帐户的口令。成功完成身份验证后,将以超级用户特权执行该命令。
根据 sudo
配置,提升的特权会保留特定的一段时间,直到您在同一终端会话中的操作结束为止。如此,在运行另一个 sudo
命令时,您无需再次提供口令。
sudo
开头的命令 #
以下过程说明如何使用 sudo
命令将文件复制到只有 root
用户有权编辑的目录。
打开终端并使用以下命令创建测试文件:
>
touch test.txt
尝试使用以下命令将文件复制到
/usr/local/bin/
目录中:>
cp test.txt /usr/local/bin
终端返回,例如:
cp: cannot create regular file '/usr/local/bin/test.txt': Permission denied
如果未向
sudo
授予所需的特权,则也会出现此消息。现在,输入以
sudo
开头的同一命令:>
sudo
cp test.txt /usr/local/bin
系统会提示您输入
root
口令。请注意,在输入过程中既不会显示明文口令,也不会显示屏蔽字符形式的口令。[sudo] password for root:
成功完成身份验证后,测试文件将复制到
/usr/local/bin
。
您已运行第一个 sudo
命令。
3 常见 sudo
命令 #
在任一命令的前面加上 sudo
,可以使用提升的权限运行该命令。您还能以另一用户的身份运行命令,并使用该用户的环境变量。
本节提供通常需要管理特权的常见命令的示例。
- 使用
sudo
重复上一个命令 要以管理员身份重复上一个命令,请运行
sudo !!
并输入口令。例如,没有管理特权的用户无法在/etc/
目录下创建目录。要创建目录,请运行sudo !!
。>
mkdir /etc/test/
mkdir: cannot create directory ‘/etc/test/’: Permission denied>
sudo
!!
sudo mkdir /etc/test/ [sudo] password for root:>
ls -alrt /etc | grep test
drwxr-xr-x 1 root root 0 Apr 20 12:48 test- 使用
sudo
和zypper
管理软件包 要以管理员身份运行软件包管理命令,请在该命令的前面加上
sudo
:>
sudo
zypper [--GLOBAL-OPTIONS] <COMMAND> [--COMMAND-OPTIONS] [ARGUMENTS]
例如,要从官方软件包储存库安装 Docker CE 容器化平台,请使用
sudo
运行以下命令:>
sudo
zypper addrepo https://download.docker.com/linux/suse/docker-ce
>
sudo
zypper refresh
>
sudo
zypper search docker-ce
>
sudo
zypper install docker-ce
对于不会修改系统的
zypper
命令,您无需在其前面加上sudo
;此外,无需提供对信息的访问特权。例如,无需使用sudo
即可列出系统上已安装软件包的储存库:>
zypper lr
- 使用
sudo
和systemctl
管理系统服务 在使用
systemd
管理服务的系统中,您可以将systemctl
命令与sudo
结合使用。例如,要重启动 Apache Web Server 服务,请运行:>
sudo
systemctl restart apache2
对于不会修改系统的
systemctl
命令,您无需在其前面加上sudo
;此外,无需提供对信息的访问特权。例如,无需使用sudo
即可显示网络管理器的状态:>
systemctl status NetworkManager
● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/NetworkManager.service.d └─NetworkManager-ovs.conf Active: active (running) since DAY YYYY-MM-DD HH:MM:SS TIMEZONE; 1h 21min ago Docs: man:NetworkManager(8) [...]- 使用
sudo
和usermod
修改用户帐户 要运行
usermod
命令来修改用户帐户,请使用:>
sudo
usermod [OPTION] USERNAME
例如,要将口令失效后永久禁用用户帐户
tux
的天数设置为30
,请运行:>
sudo
usermod --inactive 30 tux
- 使用
sudo
和chown
修改文件和目录所有权 要将文件和目录所有权从当前拥有者更改为新拥有者,请使用:
>
sudo
chown [OPTION] [OWNER:[GROUP]] FILE
例如,要向
tux
授予/home/test/tux-files
目录中各文件和子目录的所有权,请运行:>
sudo
chown tux /home/test/tux-files/ --recursive
可以运行以下命令来测试所有权更改:
>
ls -alrt /home/test/tux-files/ --recursive
- 以另一用户的身份使用
sudo -s
运行命令 您无需使用
su
命令切换到另一用户,然后再运行命令,而是可以直接使用sudo -s
命令。sudo -s
命令运行的外壳继承当前用户的环境。sudo -s
命令还提供了一些特权控制措施。要以另一用户的身份运行命令,请使用:
>
sudo
-s -u USERNAME COMMAND
默认情况下,该命令从前一用户的目录运行,因为目标用户会继承前一用户的环境。
例如,要以目标用户
tux
的身份以递归方式列出/home/test/tux-files/
目录的文件和子目录,请运行:>
sudo
-s -u tux ls -alrt /home/test/tux-files/ --recursive
当您以另一用户的身份使用
sudo -s
方法运行某个命令时,该命令将记录到您的历史中。- 以另一用户的身份使用
sudo -i
在干净的环境中运行命令 使用
sudo -s
命令时,目标用户将继承前一用户的环境。您可以使用sudo -i
命令来防止出现这种情况,运行此命令后,目标用户将获得一个干净的环境,并可以在他们自己的$HOME
目录开始工作。要以另一用户的身份在干净的环境中运行命令,请使用:
>
sudo
-i -u USERNAME COMMAND
sudo -i
命令将外壳作为目标用户的交互式登录外壳运行。因此,我们开发了一些外壳启动脚本,例如.profile
和.bash_profile
文件。例如,要以
tux
身份列出/home/test/tux-files/
目录的文件和子目录,请运行以下命令:>
sudo
-i -u tux ls -alrt /home/test/tux-files/
当您以另一用户的身份使用
sudo -i
方法运行某个命令时,该命令将记录到您的历史中。
4 sudo
与 su
的区别 #
了解 sudo
和 su
命令的区别及其使用时机。
在 Linux 系统上,您可以在命令的前面加上 sudo
或 su
。这两种形式都允许您以 root
身份执行命令。
4.1 sudo
命令的特征 #
sudo
允许您以root
身份运行命令。根据配置,它不要求您输入root
口令,而只需输入用户的口令。这样,就不需要与所有其他(普通)用户共享敏感信息。使用
sudo
配置文件,系统管理员可以控制允许哪些用户使用sudo
并仅限将其用于特定的任务。sudo
将口令缓存特定的一段时间。在此期限之后,当您运行另一个sudo
命令时,系统会再次提示您输入口令。所有使用
sudo
执行的命令会单独记录。日志文件会跟踪日期和时间、运行命令的用户以及命令本身。
4.2 su
命令的特征 #
su
允许您以root
身份运行命令,但您必须知道root
口令。无法将它配置为仅限特定的用户访问或仅限用于特定的任务,以及提升知道
root
口令的任何用户的特权。将提升用于整个终端会话的特权。只要您不退出会话,系统就不会再次提示您输入口令。
使用
su
执行的命令不会单独记录,因为只能使用用户帐户记录所有操作。
5 法律声明 #
版权所有 © 2006–2024 SUSE LLC 和贡献者。保留所有权利。
根据 GNU 自由文档许可证 (GNU Free Documentation License) 版本 1.2 或(根据您的选择)版本 1.3 中的条款,在此授予您复制、分发和/或修改本文档的权限;本版权声明和许可证附带不可变部分。许可版本 1.2 的副本包含在题为“GNU Free Documentation License”的部分。
有关 SUSE 商标,请参见 https://www.suse.com/company/legal/。所有其他第三方商标分别为相应所有者的财产。商标符号(®、™ 等)代表 SUSE 及其关联公司的商标。星号 (*) 代表第三方商标。
本指南力求涵盖所有细节,但这不能确保本指南准确无误。SUSE LLC 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。