通过sudow命令,我们可以把某些超级用户权限分类有针对性(精细)授权给指定的普通用户,并且普通用户不需要知道root密码就可以使用得到的授权(管理员真正允许的root权限)。因此,毫不夸张的说,sudo命令相对于su命令来说,在系统用户的分权管理方面进步很多,使得集权管理在理论上得到了保证,从而使系统的安全性方面加强了很多。
执行visudo命令,可打开sudo的配置文件进行库。
visudo 相当于直接编辑 vi /etc/sudoers。这个命令更安全
/etc/sudoers 添加需要提升root权限的普通用户名及对应权限 格式如下:
root ALL=(ALL) ALL
tang ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel 添加所能用的命令
ALL=(ALL) 机器=(授权角色)
也可赋于用户组权限 :
%用户组名 机器 =(授权角色) /usr/sbin/useradd 这样只在这个用户组内成员都可以用此命令
tang ALL=(ALL) NOPASSWD:ALL 使tang拥有完全的系统管理权限,并提权执行命令时不提示输入密码
也可以通过如下命令快速配置,可批量管理:
\cp /etc/sudoers /etc/sudoers.bakcup
echo "tang ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
可使用visudo -c 来检查刚才追加输入的内容有没有语法错误
这样就可以使用 sudo command 来实现提权操作
例:让tang用户在本地主机上以admin的身份执行kill命令
tang localhost=(admin) /bin/kill
如果多个用户可以使用组功能,%代表这个是组,NOPASSWD是免输入密码
%wheel ALL=(ALL) NOPASSWD: ALL #取消注释
usermod -a -G wheel tang #添加用户jspear到组wheel,使用id查看用户所属组
说明:
通过sudo授权管理后,所有用户执行授权的特殊权限格式为“sudo 命令”。
如果需要切换到root执行相关操作,可以通过 “sudo su -”命令,此命令提示的密码为当前用户密码。
执行 sudo -l 命令可以查看当前用户被授予的sudo权限集合。
对于Linux系统bash内置的命令,一般无法使用sudo授权,如cd命令。即which 查不到但可以用内置命令。
有时普通用户执行系统管理相关命令会遭遇到环境变量问题:
是因为root的 PATH变量中的 /usr/local/sbin:/sbin:/usr/sbin
需要再添加新用户使用sudo只需要继续执行usermod,不用修改visudo文件
#centos7默认已经开放%wheel这一行,之前的centos版本没有启用
添加到wheel组的用户都能够利用root身份进行任何操作,可以自定义限制用户执行的指令
[root@localhost ~]# visudo
tang ALL=(root) /usr/bin/passwd <=命令需要使用绝对路径
这样其实是有个很大漏洞的,可以直接sudo passwd修改root密码,需要再做下限制
[tang@localhost ~]$ sudo passwd
Changing password for user root.
New password:
[root@localhost ~]# visudo
tang ALL=(root) NOPASSWD:ALL,!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/bin/su
ALL允许所有命令,!代表不执行,上面意思是允许执行所有,passwd后加任意字符可以执行,但passwd与passwd root这两个命令除外,如此jspear用户就无法改变root密码了,并且禁止sudo su
如果我有多个用户需要加入上面管理员行列,除了一个人添加有没有简单方法呢,哈哈,有的,使用别名
另外可以是【命令别名、账号别名、主机别名】
[root@localhost ~]# visudo
User_Alias ADMIN = tang,admin,user1,user2
Cmnd_Alias ADMINCOM = !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root,!/usr/sbin/useradd,!/usr/sbin/userdel,!/usr/sbin/visudo,!/bin/su
ADMIN ALL=(root) NOPASSWD:ALL,ADMINCOM
注意:User_Alias、Cmnd_Alias、Host_Alias这些是系统规定的,必须这样的形式写法
当需要添加用户或者添加限制只需要修改User_Alias、Cmnd_Alias这两行即可
sudo的时间间隔问题:默认两次执行sudo的间隔在5分钟内,五分钟内执行sudo是不需要再次输入密码的
sudo搭配su直接转换为root
[root@localhost ~]# visudo
User_Alias ADMIN = tang,admin,user1,user2
ADMIN ALL=(root) /bin/su -
[tang@localhost ~]$ sudo su - #使用Admin用户sudo su -输入admin密码可以直接进入root权限
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for admin:
[root@localhost ~]#
sudo用法可以查看鸟哥写的博客:http://linux.vbird.org/linux_basic/0410accountmanager.php#sudo
提示:centos 7由于默认将%wheel ALL=(ALL) ALL开启,需要将这行注释,否则NOPASSWD不会生效
别名:
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Command Aliases
## These are groups of related commands...
## 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
## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe
配置sudo命令用户行为日志审计
- sudo配合rsyslog服务,进行日志审计。
yum install sudo syslog -y
配置/etc/sudoers
echo "Defaults logfile = /var/log/sudo.log" >> /etc/sudoers
visudo -c
日志集中管理:
- rsysnc+inotify或定时任务+rsync,推到日志管理服务器上;
- rsyslog服务来处理:
echo "x.x.x.x logserver">>/etc/hosts
echo "*.info @logserver">>/etc/syslog.conf 适合所有日志推送。