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

Linux系统比其任何对等体都要安全得多, 在Linux中实施安全的一种方式是用户管理策略和用户权限,普通用户无权执行任何系统操作。如果普通用户需要执行任何系统范围的更改,需要使用 susudo 命令。

file

su vs sudo

su 会让你将你的root密码分享给其他用户,而 sudo则可以在不需要root密码的情况下执行系统命令。sudo 让你使用自己的密码来执行系统命令,即,无需root密码就可以委派系统责任。

什么是 sudo

sudo 是一个 setuid 二进制程序,代表授权用户执行root命令,用户需要输入自己的密码才能执行跟随 sudo 的系统命令。

谁可以执行 sudo

可以运行 /usr/sbin/visudo 来添加或者删除可以执行 sudo 的用户列表。

$ sudo /usr/sbin/visudo

file

su-vs-sudo

默认情况下,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
```text

#### sudo的参数

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

配置的 sudo 行的语法是:

User_name Machine_name=(Effective_user) command

上述语法可以分为四部分:
  • User_name: 这是 `sudo` 用户的名称。
  • Machine_name: 这是主机名,在该主机上 `sudo` 命令有效。当你有很多主机机器时很有用。
  • (Effective_user): 允许执行命令的 `有效用户`。这一列让你允许用户执行系统命令。
  • Command: 用户可能运行的命令或一组命令。

使用场景

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实用程序,一个长长的命令或一列命令可以被引用为一个小而简单的关键字。

一些可以在 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的配置很简单。一些Linux发行版默认启用了 sudo,而现在大多数发行版需要你作为安全措施启用它。

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

adduser bob sudo
15个实用的FFmpeg命令:音视频转换和处理指南
SSHPass 命令详解

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

7 + 53 =

ajax-loader