Linux sudo命令的使用,用户不在sudoers文件中的解决办法

⌚Time: 2022-12-26 22:59:52

👨‍💻Author: Jack Ge

sudo命令

sudo allows a permitted user to execute a command as the superuser or another user, as specified by the security policy. The real and effective uid and gid are set to match those of the target user, as specified in the password database, and the group vector is initialized based on the group database (unless the -P option was specified).

sudo命令能够使用户切换到其它用户身份运行命令。如用root用户的身份编辑文件a.txt


sudo -u root vi a.txt

使用户能够使用sudo命令

用户不在sudoers文件中,无法使用sudo命令

/etc/sudoers文件


授权用户/组 主机  =[(切换到哪些用户或组)] [是否需要输入密码验证] 命令1,命令2,...

字段1      字段2  =[(字段3)] [字段4] 字段5

 

注意:凡是[ ]中的内容, 都能省略; 命令和命令之间用,号分隔;

 

 

字段1:

不以%号开头的表示"将要授权的用户" root

以%号开头的表示"将要授权的组" %wheel

 

字段2:表示允许登录的主机

ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令

eg:jack mycomputer=/usr/sbin/reboot,/usr/sbin/shutdown

表示: 普通用户jack在主机(或主机组)mycomputer上, 可以通过sudo执行reboot和shutdown两个命令

 

字段3:

如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。

注意:如果没省略,必须使用( )双括号包含起来

 

字段4:

可能取值是NOPASSWD:。请注意NOPASSWD后面带有冒号:。表示执行sudo时可以不需要输入密码

eg:lucy ALL=(ALL) NOPASSWD: /bin/useradd

表示: 普通用户lucy可以在任何主机上, 通过sudo执行/bin/useradd命令, 并且不需要输入密码

 比如:hyc ALL=(ALL:ALL) NOPASSWD:ALL

字段5:授权给用户的操作

逗号分开一系列命令或者ALL表示允许所有操作

注意:命令必须使用绝对路径

命令的绝对路径可通过which指令查看到

[root@VM_0_10_centos ~]# which chmod

/bin/chmod

sudoers文件中建议


# Please consider adding local content in /etc/sudoers.d/ instead of

# directly modifying this file.

并且在最后包含了/etc/sudoers.d目录


#includedir /etc/sudoers.d

/etc/sudoers.d目录下的任何不以~结尾和不包含.的文件都将被解析成/etc/sudoers的内容。并且任何此文件夹下的文件权限都应该设置为0440

/etc/sudoers.d

切换到root用户


su root

/etc/sudoers.d目录下建立一个文件a


vi /etc/sudoers.d/a

配置用户a的sudoers内容


a ALL=(ALL:ALL) ALL

代表用户a能够在任何主机上提权到任何用户,并且执行任何命令,需要密码

其它的配置示例


a computer0=(root:root) ALL

表示用户a在computer0上能够提权到root用户,执行任何命令,需要密码


a ALL=(ALL:ALL) NOPASSWD:/bin/useradd,/bin/chown

表示用户a在任何主机上能够提权到任何用户,执行useradd命令时不需要密码,执行/bin/chown命令时需要密码

保存文件,修改文件权限为0440


chmod 0440 /etc/sudoers.d/a

之后切换到用户a执行sudo命令就可以了


su a

sudo -u root ls