sudo” 是Unix/Linux平台上的一个非常有用的工具,允许为非根用户赋予一些合理的“权利”,让他们执行一些只有根用户或特许用户才能完成的任务,从而减户的登陆次数和管理时间同时也提高了系统安全性。
一、介绍:
sudo的配置文档是/etc/sudoers ,我们能够用他的专用编辑工具visudo对其进行编辑 ,此工具的好处是在添加规则有误时,保存退出会提示给我们错误信息;
附注:如果没有visudo命令 需要 yum install -y sudo
配置完毕后,如果想知道哪些命令是您当前用户能够执行或禁止的,可通过切换至该用户身份,然后通过sudo -l 查看;
sudo的目的:为非根用户授予根用户的权限;
配置文件:/etc/sudoers
visudo命令编辑修改/etc/sudoers配置文件
二、配置文件简介:
/etc/sudoers 文件有其书写格式,其中有别名类型以及“放权格式”,下面我们来一一介绍。
别名类型包括如下四种:
Host_Alias 定义主机名别名;
User_Alias 用户别名,别名成员能够是用户,用户组(前面要加%号)
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许转换至的用户;
Cmnd_Alias 定义命令别名;
需要注意的是:
1.在每一种Alias后面定义的别名 NAME 可以是包含大写字母、下划线连同数字,但必须以一个大写字母开头
2.配置文件中的 Default env_reset 表示重置(就是去除)用户定义的环境变量,也就是说,当你用sudo执行一个命令的时候,你当前用户设置的所有环境变量都是无效的。
放权格式:
授权用户/组 主机名=(允许转换至的用户) NOPASSWD:命令动作
红色标注的三个要素缺一不可,但在动作之前也能够指定转换到特定用户下,在这里指定转换的用户要用( )号括起来,
假如无需密码直接运行命令的,应该加NOPASSWD:参数,不需要时方可省略,下面介绍中会有NOPASSWD的使用示例。
三、实战配置
1、一般用户赋权设置:
[root@localhost ~]# visudo
……前面省略
75 ## Allow root to run any commands anywhere
76 root ALL=(ALL) ALL
77 test ALL=(root) /usr/sbin/useradd #表示允许test用户从任何主机登录,以root的身份执行/usr/sbin/useradd命令。
……后面省略
说明:
第一个字段:root为能使用sudo命令的用户;第二个字段:第一个ALL为允许使用sudo的主机,第二个括号里的ALL为使用sudo后以什么身份(目的用户身份)来执行命令;第三个字:ALL为以sudo命令允许执行的命令;
2、sudo配置深入:
1)多个用户的设置(非同一群组用户):
•对于不同需求的用户:可以按照上面的方法依次增加多行,每行对应一个用户。
•对于相同需求的多个用户, 定义用户别名:User_Alias UUU=user1,user2……
[root@localhost ~]# visudo
……前面省略
20 # User_Alias ADMINS = jsmith, mikem //这个就是一个实例行
21 User_Alisa sudouser = user1,user2,%test #定义用户别名sudouser,下有成员user1,user2,和test用户组下的成员,用户组前面必须加%号
……后面省略
75 ## Allow root to run any commands anywhere
76 root ALL=(ALL) ALL
77 sudouser ALL=(root) /usr/sbin/useradd #命令行书写格式,用户列用别名
……后面省略
•对于多个命令的设置, 定义命令别名:Cmnd_Alias CCC=command1,command2……
[root@localhost ~]# visudo
……前面省略
26 ## Networking
27 #Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool //这个就是一个实例行
28 Cmnd_Alias DEPLOY = /usr/bin/cp, /usr/bin/mv
29 Cmnd_Alias SUDODEPLOY = /usr/bin/supervisorctl, /bin/sed,/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root #表示不能通过passwd 来更改root密码;
……后面省略
75 ## Allow root to run any commands anywhere
76 root ALL=(ALL) ALL
77 test ALL=(root) DEPLOY #命令行书写格式,命令列用别名
78 deploy ALL = (root) NOPASSWD: SUDODEPLOY,DEPLOY #如果我想不输入用户的密码就能转换到root并运行SUDODEPLOY和DEPLOY下的命令
……后面省略
•对于多主机的设置和多登陆角色的设置:定义主机别名:Host_Alias HHH=host1,host2…… 修改后对应的命令行主机列位置也是用别名定义runas别名:Runas_Alias OP=root #定义Runas用户,也就是目标用户的别名为OP,下有成员root
User_Alias SYSADER = qiangsh
Runas_Alias OP = root
Cmnd_Alias SYDCMD = /sbin/parted, /sbin/fdisk #定义命令别名SYDCMD,下有成员parted和fdisk
DISKADER ALL= (OP) SYDCMD
说明:
表示授权DISKADER 下的任何成员,能以OP的身份,来运行 SYDCMD ,无需密码;
更为明确的说 qiangsh 用户能以root身份运行parted和fdisk命令,其等价规则是:
qiangsh ALL=(root) /sbin/parted,/sbin/fdisk
#如果我想不输入用户的密码就能转换到root并运行 SYDCMD 下的命令,那应该把把NOPASSWD:加在哪里为好?参考下面例子;
SYSADER ALL= NOPASSWD: SYDCMD
2)多个用户的设置(同一群组用户):
[root@localhost ~]# visudo
……前面省略
81
82## Allows people in group wheel to run all commands
83# %wheel ALL=(ALL) ALL //用户列%+群组名
……后面省略