SUDO命令

通过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   适合所有日志推送。