su 和 sudo 之间的区别以及如何在 Linux 中配置 sudo
Linux 系统比任何其他同类系统都安全得多。在 Linux 中实现安全性的方法之一是用户管理策略和用户权限,普通用户无权执行任何系统操作。
如果普通用户需要执行任何系统范围的更改,他需要使用“ su ”或“ sudo ”命令。
注意- 本文更适用于基于Ubuntu 的发行版,但也适用于大多数流行的Linux发行版。
‘su’ 与 ‘sudo’
' su ' 强制您与其他用户共享您的root 密码,而' sudo ' 则可以在没有root密码的情况下执行系统命令。'sudo ' 允许您使用自己的密码来执行系统命令,即,在没有root密码的情况下委托系统责任。
什么是‘sudo’?
' 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
上述语法可以分为四个部分:
- User_name :这是“ sudo ”用户的名称。
- Machine_name:这是主机名,其中“ sudo ”命令有效。当您有许多主机时很有用。
- (有效用户):允许执行命令的“有效用户”。此列允许您允许用户执行系统命令。
- 命令:用户可以运行的命令或一组命令。
建议阅读: 在 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 实用程序中,可以将很长的命令或命令列表称为简短易懂的关键字。
一些别名示例,可用于代替“ 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
如何在不输入密码的情况下执行“ sudo ”命令?
我们可以使用“ NOPASSWD ”标志执行“ sudo ”命令而无需输入密码。
adam ALL=(ALL) NOPASSWD: PROCS
这里用户 ' adam ' 可以执行“ PROCS ”下的所有命令,而无需输入密码。
建议阅读: 当你输入错误密码时,让 Sudo 侮辱你
与“ su ”相比, “ sudo ”为您提供了一个强大且安全的环境,具有极大的灵活性。此外,“ sudo ”配置也很简单。一些 Linux 发行版默认启用“ sudo ”,而当今大多数发行版都需要您将其作为安全措施启用。
要将用户(bob)添加到 sudo,只需以 root 身份运行以下命令。
adduser bob sudo
现在就这些了。我会再来这里发表另一篇有趣的文章。在此之前,请继续关注并关注示例。别忘了在我们的评论部分向我们提供您宝贵的反馈。