介绍

在Linux系统中,sudoers文件决定着sudo指令的执行。可以解决"对于某个用户或者用户组需要在某个主机上执行某个或者某些命令的问题".
sudoers文件的具体目录为:/etc/sudoers
sudoers文件只能被用户读取,按道理没有写权限。(但是可以强制写入)
修改sudoers文件建议使用命令:visudo,修改文件后自动检查语法。

基本

实例sudoers文件内容如下(发行版本:Debian):

#
# This file MUST be edited uith the 'visudo ' command as root.
#
#Please consider adding local content in /etc/sudoers.d/ instead of directly modifying this file.
#
# See the man page for details on how to write a udoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

#Host alias specification

#User alias specification

#cmnd alias specification

#User privilege specification
root ALL=(ALL:ALL) ALL
CMPS ALL=(ALL) ALL
#Allow members of group sudo to execute any command

#%sudo ALL=(ALL)ALL
# See sudoers(5) for more information on "#include" directives:

#includedir ietcisudoers.d

无需了解其他的,只需知道第20行的意义:
用户名 主机=(用户) 命令
CMPS ALL=(ALL) ALL
指的是用户cmps可以在任何台主机上切换到任何用户身份执行任何命令(默认需要输入cmps账户密码)。
如果想执行sudo不输入密码,可以在括号外面加上"NOPASSWD:",例如:
CMPS ALL=(ALL) NOPASSWD: ALL

详细配置一

除了以上配置方法之外,还可以有更多的组合方法。
比如在普通用户拥有sudo权限时候不想让其使用账户相关的命令,可以采用以下配置方法:

user ALL=(ALL) !/bin/chattr,!/bin/passwd,!/usr/sbin/visudo,!/usr/sbin/useradd,!/usr/sbin/userdel

对的,在命令前面加上!就可以禁止执行这个命令了,多条内容用 , 分割即可。
在这里需要用到一个命令,来查询一个命令的绝对路径:which 命令.
或许需要一个用户在指定的计算机上才能sudo,并且不能够执行重启:

user 172.15.224.6=(ALL) !/usr/sbin/reboot
详细配置二

按照以上方法如果配置多个账户,并且遇到复杂的场景的话,就会使得sudoers文件内部语句过多,非常杂乱。
因此可以配置别用(Alias),别名的方法配置sudoers文件。
User_Alias Host_Alias Runas_Alias Cmnd_Alias
分别是用户别名,主机别名,身份别名,命令别名的配置命令,具体配置方法如下:
User_Alias 别名1=用户名1,用户名2
Host_Alias 别名2=主机名1,主机名2
Runas_Alias 别名3=身份名1,身份名2
Cmnd_Alias 别名4=命令1,命令2
再配置完语句后,User ALL=(ALL) ALL,用别名替换即可。
用户名别名 主机别名=(身份别名) 命令别名


分享知识使我感到充实而快乐!