sudo 可以让你以其他用户的身份执行命令,然而并非所有用户都能执行 sudo  仅有 /etc/sudoers 内的用户才能使用 sudo  。 


而 sudo 的配置文件 /etc/sudoers 仅有 root用户 和 root用户组能查看该文件。


可以直接用vim编辑来修改配置,但不建议使用,因为vim不会检查语法错误, 而/etc/sudoers 是有语法的,如果设置错误可能会造成系统级别的问题,推荐用 visudo 命令来修改。




sudo 的选项

 -l          列出当前用户可以使用的所有的 sudo 命令

 -k          让认证信息失效



/var/log/secure  记录所有 sudo 相关操作的所有日志



如何使用sudo:


用普通用户 tom 执行查询 /etc/shadow 由于 tom 不是 root 没权限查询

wKiom1ZdxGahjhD3AABC3DcJpH4458.png



尝试通过 sudo 命令来查询 由于 tom 不是 /etc/sudoers 内的用户所以无法通过 sudo 来执行该命令

wKiom1ZdxGahgG3uAAB3LaTr0dI582.png



切回 root 用户 用 visudo 命令 去修改 /etc/sudoers 

找到  root    ALL=(ALL)     ALL    这行 并在这行下新添加或修改已有的配置

wKioL1ZdxM2jL6ivAAAfeNXL2wg730.png


4个参数的意义

第一个  代表用户           who 

第二个  登陆者的来源主机名(这个账号是由哪个主机连接到本主机)          which_host

第三个  可切换的身份            runas

第四个  可执行的命令 (命令用绝对路径来写)           command

ALL 代表任何 主机 身份 命令

语法格式: who     which_host=(runas)      command


注意:工作上不应该这么设置 普通用户拥有完全的 root 权限简直是恐怖




sudo 支持别名机制  (注意:别名的名字全部且只能使用大写字母)

如:


用户别名:可以包含用户的用户名,组名还可以包含其他已经定义好的用户别名(!可以取反 !tom 表示除 tom 用户以外)。


wKioL1ZhCOig1NutAAB***kI5Xw339.png




主机别名:可以包含主机名,IP地址,网络地址或者其他定义好的主机别名。


wKiom1ZhCBehetd9AABam3FIIUE293.png




ruans 别名:用户名,组名,其它定义好的ruans别名


wKiom1ZhC1CCz7q4AAAXJJclAyQ836.png






命令别名:命令要用绝对路径,此目录下的所有命令,或者其他定义好的命令别名


wKioL1ZhCIODsUCDAADT75hlB70852.png






配置好 visudo 后再通过 sudo 命令执行查询 其中输入密码是输入当前用户的密码(也就是 tom 用户的密码)

wKiom1ZdxGjTYsx8AACRjpvXpvg351.png



也可以在命令前 添加 NOPASSWD: 修改配置  就可以不用输入密码了

wKioL1Zd11jTrYuyAAAj1eAoJtM970.png

wKiom1Zd1vOhbMY8AABlxHXInRQ425.png



sudo 的时间间隔

如果使用同一账号在短时间内重复操作 sudo 来运行命令,在第二次执行 sudo 时不需要输入自己的密码,两次使用 sudo 的间隔时间在5分钟内才可以,如超过则需重新输入密码。