如何在Linux中将用户添加到Sudoers
sudo访问允许用户以root用户或者任何其他用户身份执行所有允许的命令。
将sudo访问权限授予sudoers文件中的特定用户后,该用户可以通过使用前缀sudo执行命令来以root用户身份执行命令。
该用户具有完全的系统访问权限,应仅用于管理任务。
对于我们可以对系统执行的操作基本上没有任何限制。
什么是sudoers文件以及sudo命令如何工作?
“/etc/sudoers”文件控制谁可以在什么计算机上以什么用户身份运行什么命令,还可以控制特殊的事情,例如我们是否需要为特定命令输入密码。
当系统上有新用户时,我们需要确定该用户是否应该能够使用sudo执行管理任务。
如果新用户将是系统上的主要用户,则通常需要启用sudo特权,以便可以进行日常配置和维护。
也就是说,如果向用户sam提供sudo访问,则他可以如下列出受保护的文件夹“/root”下的文件。
$sudo ls /root
它将要求输入密码(用户sam的密码而不是root密码)。
通过身份验证后,将设置一个时间戳,我们可以在短时间内(默认为5分钟)无密码地执行sudo命令,此后将重置该时间戳。
在/etc/sudoers文件中添加用于sudo访问的用户
为了使用户能够使用sudo命令,我们需要使用visudo命令来编辑'/etc/sudoers'文件。
我们永远不要使用普通的文本编辑器编辑此文件,而应始终使用visudo命令。
如果尚未为任何用户分配其他特权,则需要以root用户身份登录才能访问此命令
# visudo
这将锁定sudoers文件以防止同时修改,并且在发生任何语法错误的情况下不会将更改保存在文件中。
我们将进入一个文本编辑器会话,其中包含预定义了sudo特权的文件。
我们必须将用户添加到该文件中,以授予我们所需的访问权限。
在Centos上,找到“允许root在任何地方运行任何命令”行
在Debian系统上,找到带有“用户权限说明”的行
提供sudo访问的语法如下。
username host_list = (users) command
- username:这对应于需要向其提供sudo访问的用户
- host_list:这定义允许用户进行sudo访问的主机
- 用户:这将用户定义为可以执行命令的“用户名”
- command:这定义允许用户以root /另一个用户身份执行的命令。
我们可以看一下sudoers文件的一些示例配置,以对此有一个清晰的认识。
根据我们要在系统上允许的内容(Debian或者Centos),只需遵守上面屏幕截图中显示的各行的语法即可。
在以下情况下,我们将仅考虑Centos系统
a)允许用户使用sudo
如果要允许特定用户以任何用户身份在任何主机中运行任何命令,请在下面插入行。
我们的用户示例是sam
sam ALL=(ALL) ALL
b)允许特定组中的用户运行任何命令
其中组管理员中的所有用户都被允许以任何主机中的任何用户身份运行任何命令。
%admins ALL=(ALL) ALL
c)允许运行命令而不进行身份验证
其中用户sam可以在本地主机上运行命令'/bin/kill','/bin/ls'和'/usr/bin/lprm'而不进行身份验证。
sam localhost = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm
d)允许以特定用户身份运行特定命令
其中允许sam作为Hyman运行'/bin/ls',并且仅在任何主机上以root身份运行'/bin/kill'和'/usr/bin/lprm'。
sam ALL = (Hyman) /bin/ls, (root) /bin/kill, /usr/bin/lprm
其中允许sam以root身份在任何主机上运行/usr/bin文件夹下的任何命令。
请注意,路径名中使用的通配符将不匹配正斜杠(/)。
那是sam不允许在'/usr/bin/subfolder/*'下运行二进制文件
sam ALL = /usr/bin/*
其中允许sam以root身份在/usr/bin文件夹下以root身份运行任何命令,而不是在任何主机上运行/usr/bin/passwd
sam ALL = /usr/bin/* !/usr/bin/passwd
sudo命令用法
使用sudoers文件提供sudo访问后,我们可以以root用户或者使用sudo命令以其他用户身份执行允许的命令。
我们可以看一下sudo命令的一些示例用法。
a)使用某些服务
当我们想操作Web服务器,网络服务或者数据库服务器之类的服务时,我们需要具有特权。
例如,如果要重新启动Web服务器,则应使用以下命令
$sudo systemctl restart httpd.service
如果要重新启动防火墙,则过程相同
$sudo systemctl restart firewalld
b)以其他用户身份执行命令
使用sudo命令,可以像执行系统其他用户一样执行命令。
sudo -u Hyman vi /home/Hyman/mail.php
其中“-u”选项将允许用户以Hyman的身份执行命令。
c)在sudo中执行先前输入的命令
我们可以执行命令,但命令失败,因为我们忘记在命令前加上'sudo'。
可以使用bash函数重新执行最后一个命令,该函数再加上sudo可以直接以root身份运行该命令
sudo !!
双感叹号将重复最后一条命令。
我们在sudo之前添加了它,以快速将非特权命令更改为特权命令。
# ls -ld / ls: /: Permission denied
# sudo !! sudo ls -ld / dr-xr-xr-x. 20 root root 4096 Jan 23 04:19 /
d)替换当前shell上的用户
创建用户时,sudo命令允许我们直接在Shell上切换到另一个用户。
它允许我们输入我们想要更改为的用户
[root@centos-01 ~]# su - paul [paul@centos-01 root]$