使用 sudo 以超级用户身份运行命令
- 内容
了解
sudo的基本概念,以及如何以普通用户的身份使用它。- 原因
某些命令需要管理员特权。要以管理员权限运行某个命令,可以使用
sudo命令。- 工作量
读完本文最多需要 20 分钟。如果您有具体的问题,可以直接跳转到相应章节。
- 目标
了解
sudo的基本概念,并可以针对某些应用场景使用sudo运行命令。- 要求
root或sudo特权。仅当您是系统管理员时,才拥有这些特权。有关详细信息,请参见第 1 节 “sudo基本概念”。需要安装 sudo 软件包。SUSE Linux Enterprise Server for SAP Applications 上默认会提供该软件包。
1 sudo 基本概念 #
了解 sudo 的基本概念及其在 SUSE Linux Enterprise Server for SAP Applications 系统上的工作原理。
sudo 是一个 Linux 命令,用于暂时以另一用户的身份执行程序。它是 substitute user and do 的缩写,借用另一用户(例如 root 用户)的特权。这样,sudo 便可以帮助您完成系统管理任务,且无需以 root 身份登录。
1.1 Linux 系统上的 sudo 概述 #
作为 Linux 上的普通用户,您拥有的权限已被缩减,但足以完成大多数任务。root 用户是 Linux 超级用户,其身份相当于管理员。
sudo 允许指定的(非 root)用户或一组用户运行特权任务,例如以 root 或另一用户的身份调用系统函数。通过配置文件,系统管理员可以控制哪些用户有权针对哪些任务运行 sudo 命令。
1.2 SUSE Linux Enterprise Server for SAP Applications 系统上的 sudo #
出于安全考虑,所有 SUSE Linux Enterprise Server for SAP Applications 系统都将普通用户与 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]
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开头的同一命令:>sudocp 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 testdrwxr-xr-x 1 root root 0 Apr 20 12:48 test- 使用
sudo和zypper管理软件包 要以管理员身份运行软件包管理命令,请在该命令的前面加上
sudo:>sudozypper [--GLOBAL-OPTIONS] <COMMAND> [--COMMAND-OPTIONS] [ARGUMENTS]例如,要从官方软件包储存库安装 Docker CE 容器化平台,请使用
sudo运行以下命令:>sudozypper addrepo https://download.docker.com/linux/suse/docker-ce>sudozypper refresh>sudozypper search docker-ce>sudozypper install docker-ce对于不会修改系统的
zypper命令,您无需在其前面加上sudo;此外,无需提供对信息的访问特权。例如,无需使用sudo即可列出系统上已安装软件包的储存库:>zypper lr- 使用
sudo和systemctl管理系统服务 在使用
systemd管理服务的系统中,您可以将systemctl命令与sudo结合使用。例如,要重启 NetworkManager 服务,请运行:>sudosystemctl restart NetworkManager对于不会修改系统的
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命令来修改用户帐户,请使用:>sudousermod [OPTION] USERNAME例如,要将口令失效后永久禁用用户帐户
tux的天数设置为30,请运行:>sudousermod --inactive 30 tux- 使用
sudo和chown修改文件和目录所有权 要将文件和目录所有权从当前拥有者更改为新拥有者,请使用:
>sudochown [OPTION] [OWNER:[GROUP]] FILE例如,要向
tux授予/home/test/tux-files目录中各文件和子目录的所有权,请运行:>sudochown 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 COMMANDsudo -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–2025 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 及其关联公司、作者和译者对于可能出现的错误或由此造成的后果皆不承担责任。