欢迎,来自IP地址为:216.73.216.27 的朋友
Linux 系统相对于其他操作系统来说,安全性是比较高的。这种高安全性部分原因在于其用户及权限管理机制,这些机制有效的控制哪些用户可以在系统中做哪些制定的任务。默认情况下,普通用户是不能执行系统级操作的,这样就有效的保障了系统安全。
如果一个用户需要执行影响整个系统的操作,那么它就需要使用”su”命令或”sudo”命令来获得临时管理员权限。
su 命令和 sudo 命令介绍
以下对于 su 和 sudo 命令的介绍,虽然是基于 Ubuntu 类发行版,但对于绝大多数 Linux 发行版都适用:
- su(substitute user):这条命令可以让用户切换为其他用户,通常是切换成 root 用户。想要正常使用该命令,需要提供 root 用户密码,这意味着如果与其它用户共享了该密码,就会对系统的安全性产生风险
- sudo(superuser do):这条命令可以让普通用户以管理员权限执行某些属于系统级的命令,而不需要提供 root 用户密码,只需输入自己的用户密码即可,这样就具有更高的系统安全性
例如:
# Using su to switch to root su - Password: [root password here] # Using sudo to update packages sudo apt update [sudo] password for user: [user password here]
可以看到,相对于 su 命令, sudo 命令具有更高的安全性和灵活性。
sudo 命令的作用
sudo 是一个特殊应用程序(setuid binary),它可以让通过认证的用户以 root 用户或其他用户来执行特定命令。它相对于共享 root 用户密码来说,sudo 命令具有更高的安全性。
使用 sudo 命令,只需要输入用户自己的密码,而不需要 root 用户密码,这就可以确保运行的每条命令的责任都与对应的帐户相关联。
以下的示例中,Apache Web 服务器使用 root 权限来重新启动,需要强调的是,用户并不输入 root 用户密码,只需要输入自己密码。
哪些用户可以使用 sudo 命令
可以使用 sudo 命令的用户列表保存在”/etc/sudoers”文件中,这个文件可以使用命令 visudo 来进行编辑。使用这条命令而不是普通的 vi 编辑器来编辑的好处是可以最大程度上避免语法错误导致的系统崩溃。
$ sudo visudo
文件中典型的条目如下所示,表示 root 用户可以执行全部命令,在全部主机上执行,对于所有用户都有效:
root ALL=(ALL:ALL) ALL
授权普通用户 sudo 权限
向多个用户授予不受限制的 sudo 访问权限可能会带来风险,因为如果每个用户都能以 root 身份运行任何命令,那么一个简单的错误或一个被盗用的帐户都可能破坏系统或泄露敏感数据。
示例(通常情况下请不要这样做):
adamin ALL=(ALL:ALL) ALL daehub ALL=(ALL:ALL) ALL
在这里,admin 和 daehub 用户可以在任何机器上以 root 身份运行任何命令,这实际上赋予了他们与 root 用户类似的完全管理权限。
实际应用时,只需授予每个用户所需的特定权限,如下所述。
sudo 语法讲解
正确的 sudo 配置非常灵活,用户可以运行的命令数量可以精确配置。
配置好的 sudo 命令行语法如下:
User_name Machine_name=(Effective_user) command
此语法可分解为四个部分:
- User_name:sudo 用户的名称
- Machine_name:sudo 命令有效的主机名,当同时使用有多个主机时非常有用
- Effective_user:运行命令的有效用户(例如 root 或其他帐户)
- command:允许此用户执行的一个或多个命令
此结构允许管理员精确控制每个用户的操作,而不是授予完全的 root 访问权限。
sudo 配置示例
1. 授权用户访问特定主机
例如用户 daehub 是数据库管理员,现在需要授权该用户对数据库主机 db.daehub.com 具有完全控制权限,则示例配置如下:
daehub db.daehub.com=(ALL) ALL
2. 以非 root 用户运行特定命令
想让一个用户 daehub,让他以非 root 用户的身份在上例中的数据库服务器上执行系统命令,则可以使用如下配置:
daehub db.daehub.com=(daehub) ALL
3. 限制用户只能执行特定命令
例如用户 daehub,只能执行 cat 命令,配置为:
daehub db.daehub.com=(daehub) cat
4.允许用户运行多条命令
如果用户需要执行多条命令,但命令又不是很多时(通常少于10条),可以直接将命令放在配置条目中:
daehub db.daehub.com=(daehub) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3
如果列表较长,建议使用别名方式:
User_Alias ADMINS=tom,jerry,adam User_Alias WEBMASTERS=henry,mark WEBMASTERS WEBSERVERS=(www) APACHE Cmnd_Alias PROC=/bin/kill,/bin/killall,/usr/bin/top
还可以通过在组名前添加前缀”%”来将命令分配给整个组:
%apacheadmin WEBSERVERS=(www) APACHE
5. 使用 sudo 而不需要输入密码
用户在不需要输入密码的情况下运行特定命令:
adam ALL=(ALL) NOPASSWD: PROCS
在这里,用户 adam 可以执行 PROCS 下别名的所有命令,而无需输入密码。
总之,与 su 相比,sudo 提供了一个强大、安全且灵活的环境。此外,sudo 配置也非常简单。一些 Linux 发行版默认启用了 sudo,而如今大多数发行版都采用单独启用它的方式作为一项安全措施。
要将用户(daehub)添加到 sudo,只需以 root 身份运行以下命令:
adduser daehub sudo