使用 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
,系统管理员可以执行以下操作:
- 授予用户或用户组以提升后的权限或以 root 权限运行某些命令的能力。
- 查看使用
sudo
的每个用户的用户ID的日志。 - 控制用户在系统上可以使用哪些命令。
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
文件,始终使用 visudo
。visudo
实用程序会在将您的编辑内容提交到文件之前执行语法检查,因为格式错误的 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/
这个确实是,之前我就因为不小心rm -Rf /* 导致系统崩了。
不过直接用root方便些。用sftp的非root账户上传文件貌似上传不上去,也不懂哪些设置
应该是只能传到自己的家目录中吧,比如 /home/username 。
哦哦 你这么说有可能是这样
[…] 一个具有 sudo 特权的非 root 用户(参考:使用 sudo 替代直接以 root 用户执行命令)。 […]
用sudo有时候传文件不方便,要先传到home用户名目录下,然后用sudo mv/cp 复制文件过去
安全跟便利肯定是有一些矛盾的。