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

Linux系统比任何其他操作系统都更安全。 在Linux中实施安全性的一种方式是用户管理政策和用户权限,普通用户未获授权执行任何系统操作。

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

Linux: su v/s sudo

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

‘su’与‘sudo’

su’强制您与其他用户共享root密码,而‘sudo’使得无需root密码即可执行系统命令成为可能。‘sudo’允许您使用自己的密码来执行系统命令,即授予系统责任而无需root密码。

什么是‘sudo’?

sudo’是一个根二进制setuid,代表授权用户执行根命令,用户需要输入自己的密码来执行系统命令,然后跟着‘sudo’。

谁可以执行‘sudo’?

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

$ sudo /usr/sbin/visudo

A screen shot of ‘/usr/sbin/visudo‘ file, looks something like this:

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的参数

A properly configured ‘sudo‘ is very flexible and number of commands that needs to be run may be precisely configured.

已配置的‘sudo‘行的语法如下:

User_name Machine_name=(Effective_user) command

上述语法可以分为四个部分:

  1. 用户名称:这是‘sudo‘用户的名称。
  2. 主机名称:这是‘sudo‘命令有效的主机名。当您有很多主机时,这很有用。
  3. (有效用户):允许执行命令的‘有效用户’。这一列让您允许用户执行系统命令。
  4. 命令:用户可以运行的命令或一组命令。

建议阅读: Linux中设置‘sudo’的10个有用的Sudoers配置

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

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

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

mark beta.database_server.com=(ALL) ALL

Q2.您有一个用户‘tom‘,他应该在相同的数据库服务器上以非root用户执行系统命令,如上所述。

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

mark beta.database_server.com=(tom) ALL

Q3.您有一个sudo用户‘cat‘,他应该只运行‘dog‘命令。

要实现上述情况,我们可以这样写‘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实用程序,可以将一个长命令或一系列命令简化为一个简短且易记的关键词。

A few alias Examples, which can be used in place of entry in ‘sudo‘ configuration file.

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

问题5。如何执行一个不需要输入密码的“sudo”命令?

我们可以通过使用“NOPASSWD”标志,在不输入密码的情况下执行“sudo”命令。

adam ALL=(ALL) NOPASSWD: PROCS

在这里,用户“adam”可以在不输入密码的情况下执行所有“PROCS”下的命令别名

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

sudo”为您提供了一个强大且安全的环境,相比之下,与“su”相比,具有更多的灵活性。此外,“sudo”的配置很容易。一些Linux发行版默认启用了“sudo”,而今天的大多数发行版需要您将其作为安全措施启用。

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

adduser bob sudo

这就是目前的全部内容。我会再次带来另一篇有趣的文章。在那之前,请继续关注和联系 Tecmint。请不要忘记在我们的评论区提供宝贵的反馈。

Source:
https://www.tecmint.com/su-vs-sudo-and-how-to-configure-sudo-in-linux/