收集云服务器优惠信息
记录云服务器使用心得

su和sudo命令区别以及Linux配置sudo文件详解说明

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

如果普通用户需要执行任何系统范围的更改,则需要使用“ su (切换用户)”或“ sudo ”(以超级用户权限执行命令)命令。

注意:本文接下来介绍的内容更适用于基于Ubuntu发行版,但也适用于大多数流行的Linux发行版。

su和sudo 区别

“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配置

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

root ALL=(ALL) ALL

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

授予sudo访问权限

在许多情况下,Linux系统管理员(特别是该领域的新手)会使用字符串“ 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. Command:用户可以运行的命令或一组命令。

sudo应用示例

以下举出一些情况及其相应的“ sudo ”行,仅供参考。

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

对于上述情况,“ sudo ”行可以写为:

mark beta.database_server.com=(ALL) ALL

2、假设有一个用户“ tom ”,该用户应该以非root用户的身份在同一数据库服务器上执行系统命令,如上所述。

对于这种情况,“ sudo ”行可以写为:

mark beta.database_server.com=(tom) ALL

3、假设有一个sudo用户“ cat ”,在同一数据库服务器上只能运行命令“ dog ”。

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

mark beta.database_server.com=(cat) dog

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

如果用户需要运行的命令数量低于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

5、如何在不输入密码的情况下执行“ sudo ”命令?

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

adam ALL=(ALL) NOPASSWD: PROCS

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

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

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

adduser bob sudo

总结

su和sudo是在Unix和类Unix操作系统中常用的命令行工具。其实,在Linux系统中,关于安全性和最小权限原则,一般推荐使用sudo而不是直接使用su切换到root用户。sudo允许管理员在需要时授予用户特定的权限,而不必暴露整个root账户的访问权限。

赞(0)
网站声明:本文内容由趣云笔记原创,部分资源收集于网络,如有侵权请联系企鹅:2472781824删除。
文章名称:《su和sudo命令区别以及Linux配置sudo文件详解说明》
文章链接:https://www.ecscoupon.com/3971.html
本站资源仅供个人学习交流,未经允许不得转载,更不允许用于商业用途。如需转载,请注明来源,感谢理解!