目录
64. shell命令--visudo
功能说明
visudo 是 Linux 系统中用于安全地编辑 sudoers 文件的命令。sudoers 文件是 sudo 的主要配置文件,它决定了哪些用户和组可以以什么方式执行哪些命令。由于 sudoers 文件的错误配置可能导致系统安全漏洞或拒绝服务(DoS)攻击,因此直接编辑此文件是不推荐的。相反,应该使用 visudo 命令来编辑它,因为它提供了几个安全特性。
visudo 命令专门用来编辑 /etc/sudoers 这个文件的。授权配置在 /etc/sudoers 这个文件中,默认这个文件是只读权限,它有个专门的工具叫 visudo,这个命令能不仅能编辑这个配置文件,还能对输入内容做语法检测,如果语法有误,会提示错误位置,并且不会保存到配置文件中,它还能指出语法错误。其实 visudo 命令相当于:vim /etc/sudoers。
语法格式
SYNOPSIS
visudo [-chqsV] [-f sudoers] [-x output_file]
选项说明
-c:启用check-only模式,手动执行语法检查
-q:启用安静模式,此模式下不显示错误信息
-s:启用严格检查sudoers文件
实践操作
0. 环境准备
# 创建三个用户并设置密码为123456
seq 3|sed -r 's#(.*)#useradd MineGi-\1;echo '123456'|passwd --stdin MineGi-\1#g'|bash
tail -3 /etc/passwd
1. 执行 visudo 对普通用户授权
\cp -rp /etc/sudoers{,.bak} #操作前备份
ls /etc/sudoers{,.bak}
visudo #进入配置文件,按100 G键,再按o键,在下面添加下面内容,然后保存退出
MineGi-1 ALL=(ALL) NOPASSWD: ALL
MineGi-2 ALL=(ALL) NOPASSWD: /usr/bin/useradd,/usr/bin/userdel
2. 每次执行visudo并修改内容后,保险起见,需要语法检查
visudo -c #提示/etc/sudoers: parsed OK,表示无异常
3. 使用快速操作命令增加 sudo 授权
echo "MineGi-3 ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers
tail -1 /etc/sudoers
visudo -c
# 剩下验证步骤,等讲到sudo命令进行验证
授权格式
who where=(whom) commands
用户 主机=(以谁的身份) commands
#用户配置可以是:
username
#uid
%groupname
%#gid
user_alias
#主机配置:
ip
hostname
Netaddr
host_alias
#commands配置
command #命令要绝对路径指定
cmnd #命令别名,灵活使用能提高效率
-----------------------------------
在sudo配置中,可能对多个用户配置多个相同命令,这时候可以使用别名来配置。
#定义别名的方法:
ALIAS_TYPE NAME=item1, item2, item3, ... NAME:别名名称,必须使用全大写字符;
ALIAS_TYPE:
User_Alias 用户别名,别名成员能够是用户,用户组(前面要加%号)
Host_Alias 定义主机名别名
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许转换至的用户
Cmnd_Alias 定义命令别名
需要注意的是:
1.在每一种Alias后面定义的别名 NAME 可以是包含大写字母、下划线连同数字,但必须以一个大写字母开头
2.配置文件中的 Default env_reset 表示重置(就是去除)用户定义的环境变量,也就是说,当你用sudo执行一个命令的时候,你当前用户设置的所有环境变量都是无效的。
例如:
User_Alias NETADMIN=tom, jerry
Cmnd_Alias NETCMND=ip, ifconfig, route
NETADMIN localhost=(root) NETCMND
格式简单介绍
待授权的用户或组 | 机器=(授权角色) | 可以执行的命令 |
user | MACHINE= | COMMANDS |
usertest1 | ALL=(ALL) | ALL |