网站搜索

su 和 sudo 的区别以及如何在 Linux 中配置 sudo


Linux 系统比任何同类系统都更加安全。 Linux实现安全的方法之一是用户管理策略和用户权限,普通用户无权执行任何系统操作。

如果普通用户需要执行任何系统范围的更改,他需要使用“su”或“sudo”命令。

注意 – 本文更适用于基于 Ubuntu 的发行版,但也适用于大多数流行的 Linux分布。

‘su’ 与 ‘sudo’

su”强制您将您的root 密码分享给其他用户,而“sudo”则可以执行没有root密码的系统命令。 ‘sudo‘允许您使用自己的密码执行系统命令,即委托系统责任,而无需root密码。

什么是“须藤”?

'sudo'是一个root二进制文件setuid,它代表授权用户执行root命令,用户需要输入自己的密码才能执行系统命令后跟“sudo”。

谁可以执行“sudo”?

我们可以运行“/usr/sbin/visudo”来添加/删除可以执行“sudo”的用户列表。

sudo /usr/sbin/visudo

/usr/sbin/visudo”文件的屏幕截图如下所示:

默认情况下,sudo 列表类似于以下字符串:

root ALL=(ALL) ALL

注意:您必须是root才能编辑/usr/sbin/visudo文件。

授予 sudo 访问权限

在许多情况下,系统管理员(特别是该领域的新手)会查找字符串“root ALL=(ALL) ALL”作为模板,并向其他人授予不受限制的访问权限,这些访问权限可能是可能非常有害。

将“/usr/sbin/visudo” 文件编辑为类似下面的模式可能确实非常危险,除非您完全相信所有列出的用户。

root ALL=(ALL) ALL
adam ALL=(ALL) ALL
tom ALL=(ALL) ALL
mark ALL=(ALL) ALL

sudo 的参数

正确配置的“sudo”非常灵活,可以精确配置需要运行的命令数量。

配置的“sudo”行的语法是:

User_name Machine_name=(Effective_user) command

上面的语法可以分为四个部分:

  1. User_name:这是“sudo”用户的名称。
  2. Machine_name:这是主机名,其中“sudo”命令有效。当您有很多主机时很有用。
  3. (Effective_user):允许执行命令的“有效用户”。此列允许您允许用户执行系统命令。
  4. 命令:用户可以运行的命令或一组命令。

建议阅读: 在 Linux 中设置“sudo”的 10 个有用的 Sudoers 配置

一些情况及其相应的“sudo”行:

Q1. 您有一个用户mark,它是数据库管理员。您应该只向他提供数据库服务器 (beta.database_server.com) 上的所有访问权限,而不是任何主机上的访问权限。

对于上述情况,‘sudo’行可以写成:

mark beta.database_server.com=(ALL) ALL

Q2. 您有一个用户“tom”,该用户应该以除同一数据库服务器上的根目录,如上所述。

对于上述情况,‘sudo’行可以写成:

mark beta.database_server.com=(tom) ALL

Q3. 您有一个 sudo 用户“cat”,它应该运行命令“”仅狗。

为了实现上述情况,我们可以将“sudo”写为:

mark beta.database_server.com=(cat) dog

Q4. 如果需要向用户授予多个命令怎么办?

如果用户需要运行的命令数量低于10,我们可以将所有命令并排放置,命令之间留有空格,如下所示:

mark beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3 ...

如果此命令列表随范围变化,实际上不可能手动键入每个命令,我们需要使用别名。别名!是的,Linux 实用程序中的长命令或命令列表可以被称为小而简单的关键字。

一些别名别名示例,可用于代替“sudo”配置文件中的条目。

User_Alias ADMINS=tom,jerry,adam
user_Alias WEBMASTER=henry,mark
WEBMASTERS WEBSERVERS=(www) APACHE
Cmnd_Alias PROC=/bin/kill,/bin/killall, /usr/bin/top

可以指定属于该组的系统组来代替用户,只需添加后缀“%”,如下所示:

%apacheadmin WEBSERVERS=(www) APACHE

Q5. 在不输入密码的情况下执行“sudo”命令怎么样?

我们可以使用“NOPASSWD”标志执行“sudo”命令,而无需输入密码。

adam ALL=(ALL) NOPASSWD: PROCS

这里用户‘adam’可以执行“PROCS”下的所有别名命令,而无需输入密码。

建议阅读:当您输入错误密码时让 Sudo 侮辱您

与“su”相比,“sudo”为您提供了一个强大且安全的环境,并且具有很大的灵活性。而且“sudo”配置很简单。一些 Linux 发行版默认启用“sudo”,而当今的大多数发行版都需要您启用它作为安全措施

要将用户 (bob) 添加到 sudo,只需以 root 身份运行以下命令。

adduser bob sudo

目前为止就这样了。我会再次在这里发表另一篇有趣的文章。在此之前请继续关注并连接到 Howtoing。不要忘记在我们的评论部分向我们提供您的宝贵反馈。