使用 sudo 替代直接以 root 用户执行命令

root 是什么

"root" 指的是在类 Unix 系统中(如Linux)的超级用户帐户。它是一个具有系统管理员权限的特权帐户,拥有系统上的最高访问权限。这个 root 超级用户帐户的用户标识符(UID)为零,不管帐户的名称是什么。

root 用户具有对整个系统的完全权限(root 权限)。它可以执行诸如修改系统的核心部分、升级系统、更改系统配置以及启动、停止和重新启动所有运行中的系统服务等操作。

当以 root 用户登录时,终端命令提示符符号从 $ 变为 #。

什么是 sudo

sudo(superuser do)命令允许用户以 root 用户或其他用户的身份执行命令。它提供了一种有效的方式,使特定用户能够获得使用特定系统命令或以 root 用户身份运行脚本的适当权限。

尽管与 su 命令有些相似,但 sudo 需要已登录用户的密码进行身份验证,而不是像 su 需要目标用户的密码。sudo 也不像 su 那样启动一个 root 权限的 shell,而是以提升的权限运行程序或命令。

使用 sudo,系统管理员可以执行以下操作:

  1. 授予用户或用户组以提升后的权限或以 root 权限运行某些命令的能力。
  2. 查看使用 sudo 的每个用户的用户ID的日志。
  3. 控制用户在系统上可以使用哪些命令。

sudo 会在 /var/log/auth.log 文件中记录执行的所有命令和参数,以便在发生问题时进行分析。

sudo 与使用 root 用户的区别

最小权限原则是一种信息和计算机安全概念,它认为应该授予程序和用户执行任务所需的最少或最低权限。

当以 root 用户登录时,终端中输入的每个命令都以系统上最高的权限运行,这违反了最小权限原则。一个简单的命令,如 rm,可能会在无意之间删除核心根目录或文件而不提示用户。例如,如果尝试删除类似 /etc 的根目录:

$ rm -rf /etc

当以普通用户身份登录时,您将被拒绝权限。但当以 root 用户登录时,不会显示任何提示,整个文件夹将被删除,这可能会破坏系统,因为运行系统所需的特殊配置文件存储在 /etc 目录中。您还可能错误格式化磁盘,系统也不会提示您。

这个缺陷还涉及以 root 权限运行代码或应用程序;应用程序中的一个小错误可能会擦除一些系统文件,因为该应用程序是在最高权限下运行的。

sudo 提供了细粒度的访问控制。它只授予需要它的特定程序提升的权限。您可以知道哪个程序以提升的权限运行,而不是使用 root shell(以 root 权限运行每个命令)。sudo 还可以配置为以其他用户的身份运行命令,指定哪些用户和用户组可以使用 sudo 运行命令,或者通过编辑 sudoers 文件设置以根权限运行程序的超时时间。

因此,不建议使用 root shell 运行命令,因为您破坏系统的机会要高得多。如果需要更高或根权限来运行命令,请使用 sudo,以确保只有该命令以根权限运行。欲了解更多信息,请查阅 sudo 手册页。

在 CentOS、Fedora 上创建 sudo 用户

以下步骤适用于:AlmaLinux、CentOS、Fedora、Rocky Linux 和 VzLinux。

1. 使用 adduser 命令创建一个新的用户帐户。

# adduser example_user

2. 使用 passwd 为新用户设置一个强密码。

# passwd example_user
Changing password for user example_user.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

3. 使用 usermod 将新用户添加到 wheel 组。

# usermod -aG wheel example_user

4. 使用 visudo 命令检查 sudoers 文件。

# visudo

5. 查找 wheel 组。如果该行被禁用,请删除注释符。当您准备保存文件时,它应该如下所示。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

6. 保存并退出 vi。按 ESC 键,然后输入 :WQ,最后按 ENTER 键。

注意:永远不要直接编辑 /etc/sudoers 文件,始终使用 visudovisudo 实用程序会在将您的编辑内容提交到文件之前执行语法检查,因为格式错误的 sudoers 文件可能会损坏您的系统。如果出现错误,您将在退出 visudo 时看到以下消息。

visudo: >>> /etc/sudoers: syntax error near line 64 <<<
What now?
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)

7. 切换到新用户。

# su - example_user

8. 使用 whoami 验证您是否是新用户,然后使用 sudo whoami 测试 sudo 访问,应该返回 root

$ whoami
example_user

$ sudo whoami
[sudo] password for example_user:
root

在 Debian、Ubuntu 上创建 sudo 用户

1. 安装 sudo。某些安装可能未预装 sudo。如果您的系统没有安装 sudo,请使用 apt 进行安装。

# apt install sudo

使用 adduser 命令创建一个新的用户帐户。为新用户设置一个强密码。您可以输入用户信息的值,或者按 ENTER 键将这些字段留空。

# adduser example_user
Adding user `example_user' ...
Adding new group `example_user' (1001) ...
Adding new user `example_user' (1001) with group `example_user' ...
Creating home directory `/home/example_user' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for example_user
Enter the new value, or press ENTER for the default
        Full Name []: Example User
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] y

3. 将新用户添加到 sudo 用户组。

# adduser example_user sudo

4. 通过切换到新用户进行测试。

# su - example_user

5. 使用 whoami 验证您是否为新用户,然后测试 sudo 访问,使用 sudo whoami,应该返回 root

$ whoami
example_user
$ sudo whoami
[sudo] password for example_user:
root

来源:https://www.vultr.com/docs/how-to-use-sudo-on-a-vultr-cloud-server/

# #


《 “使用 sudo 替代直接以 root 用户执行命令” 》 有 0 条评论

  1. 皇家元林说道:

    这个确实是,之前我就因为不小心rm -Rf /* 导致系统崩了。
    不过直接用root方便些。用sftp的非root账户上传文件貌似上传不上去,也不懂哪些设置

  2. […] 一个具有 sudo 特权的非 root 用户(参考:使用 sudo 替代直接以 root 用户执行命令)。 […]

  3. pepper说道:

    用sudo有时候传文件不方便,要先传到home用户名目录下,然后用sudo mv/cp 复制文件过去

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注