visudo 或者 /etc/sudoers 来管理普通用户的权限
sudo的工作过程如下:
1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3,若密码输入成功,则开始执行sudo后续的命令
4,若欲切换的身份与执行者的身份相同,也不需要输入密码
查看自己账号的sudo权限 sudo -l
一、单个用户授权:
在/etc/sudoers里添加 或者直接使用visudo命令来添加:
用户 用户角色(可以切换的用户) 代表不用输入密码可以执行的sudo命令
linyaohong ALL=(ALL) NOPASSWD:/usr/bin/php, /usr/bin/kill, /usr/bin/nohup, /usr/bin/killall
二、批量授权(按照不同部门或者不同角色)
用户或组 | 可以切换的用户角色 | 可以执行的命令 |
root | (ALL) | ALL (NOPASSWD: ALL) |
User_Alias ADMINS = jsmith, mikem, %sa | Runas_Alias OP = root, oldboy | Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig |
ADMINS | ALL=(OP) | NOPASSWD: NETWORKING |
说明:用户或者组 和 可以切换的用户角色之间 还可以定义主机别名(一般不用)
用户或组 | 主机 | 可以切换的用户角色 | 可以执行的命令 |
root | ALL= | (ALL) | ALL (NOPASSWD: ALL) |
User_Alias ADMINS = jsmith, mikem, %sa | Host_Alias FILESERVERS = fs1, fs2 | Runas_Alias OP = root, oldboy | Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig |
ADMINS | 没见过设置的 | ALL=(OP) | NOPASSWD: NETWORKING |
在/etc/sudoers里添加 或者直接使用visudo命令来添加:
1、定义主机别名(一般不用ALL即可) (忽略)
Host_Alias FILESERVERS = fs1, fs2
Host_Alias MAILSERVERS = smtp, smtp2
2 定义用户命名,可以是用户,用户组
User_Alias ADMINS = jsmith, mikem, %sa
3、角色别名(授权的身份以那些用户执行) 指:sudo准许切换到的用户身份
Runas_Alias OP = root, oldboy
4、定义命令别名(分的很详细,有网络,安装和管理软件、服务,存储,授权权限,进程管理,驱动)
#命令别名:定义一个别名,包含一堆命令,只需要使用别名,即可使用别名下所有的命令
#举例(来自/etc/sudoers):
## Networking
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
## Installation and management of software
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
.....更多系统举例可以参考/etc/sudoers文件里系统配置好的,默认下都是注释掉的
使用注意事项:
# 普通用户使用sudo -l 来查看自己能使用的命令
# 别名需要大写
# ALL 需要大写
# = 两边要有空格
# !/usr/bin/passwd !代表排除某个命令
# /usr/bin/passwd [A-Za-z]* 或者 /usr/bin/passwd root #控制输入、需要放到最后面*****
# 如:/usr/sbin/*,/sbin/*,!usr/sbin/visudo,!/sbin/fdisk #准许所有,而不让执行的命令
# 尽量不用非 ! 不好管控
# 一行内容超长 使用 \ 换行
# 如果远程连接到其他机器执行sudo 命令 ,需要使用 -t 参数
三、简单的记录日志:
1、普通sudo命令记录日志,在visudo最后一行加入即可:
Defaults logfile=/var/log/sudo.log 对日志要求比较高的可以使用ELK把日志收集到中心服务器。
2、还可以通过跳板机,堡垒机来记录用户的操作记录,并且可以自动分析,处理,展示(如开源软件:jumpserver)