Linux系统比任何同类系统都更加安全,Linux实现安全的方法之一是用户管理策略和用户权限,普通用户无权执行任何系统操作。
如果普通用户需要执行任何系统范围的更改,则需要使用“ su (切换用户)”或“ sudo ”(以超级用户权限执行命令)命令。
注意:本文接下来介绍的内容更适用于基于Ubuntu发行版,但也适用于大多数流行的Linux发行版。
“su”与“sudo”区别
“ su ”强制你与其它用户共享root密码,而“ sudo ”则可以在没有root密码的情况下执行系统命令。“sudo ”允许你使用自己的密码来执行系统命令,即在没有root密码的情况下委托系统责任。
什么是“sudo”?
‘ sudo ‘是一个root二进制setuid,它代表授权用户执行root命令,用户需要输入自己的密码才能执行后面跟有’ sudo ‘的系统命令。
谁可以执行“sudo”?
$ sudo /usr/sbin/visudo
“ /usr/sbin/visudo ”文件的屏幕截图如下所示:
默认情况下,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
上面的语法可以分为四个部分:
- User_name :这是“ sudo ”用户的名称。
- Machine_name:这是主机名,表示“ sudo ”命令在其中有效。当你有很多主机时,这个很有用。
- (Effective_user):允许执行命令的“有效用户”。此列允许你允许用户执行系统命令。
- 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账户的访问权限。