【Linux安全系列教程】sudo授权机制

一、关于sudo授权

  • 作用
    • 为普通用户授权,允许普通用户执行特权命令
  • 配置文件/etc/sudoers
  • 建议visudo命令进行修改

二、针对单个用户授权

使用visudo命令

1.配置文件语法

user    MACHINE=COMMANDS

2.针对单个用户授权

需要系统中存在这个用户

martin  ALL=/usr/sbin/fdisk,/usr/bin/chmod
#用户  主机名=授权的命令

用户使用

$代表普通用户,#代表管理员用户

$ sudo chmod
$ sudo fdisk 硬盘名	#普通用户在使用授权命令的时候,要使用sudo授权

普通用户在进行sudo授权的时候,需要密码认证

[martin@localhost ~]$ sudo fdisk /dev/sda 

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 martin: 

查看日志

[root@localhost ~]# tail /var/log/secure 
Nov 10 15:25:24 localhost sudo:  martin : TTY=pts/0 ; PWD=/home/martin ; USER=root ; COMMAND=/sbin/fdisk /dev/sda
Nov 10 15:28:00 localhost sudo:  martin : command not allowed ; TTY=pts/0 ; PWD=/home/martin ; USER=root ; COMMAND=/bin/tail /var/log/secure
Nov 10 15:29:20 localhost sudo:  martin : command not allowed ; TTY=pts/1 ; PWD=/home/martin ; USER=root ; COMMAND=/bin/rm -rf /tmp/aa /tmp/vmware-root_6217-1681724356

2.取消密码认证

普通用户在sudo授权的时候,需要输入密码认证

robin   ALL=NOPASSWD:/usr/sbin/fdisk

3.禁用敏感命令

允许用户使用所有命令,除了rm命令

robin   ALL=NOPASSWD:ALL,!/usr/bin/rm

三、针对用户组授权

1.格式

%用户组    主机名=命令

2.允许技术组的用户使用所有命令,除了rm命令,并且关闭密码认证

%jishu    ALL=NOPASSWD:ALL,!/usr/bin/rm

3.Centos7默认的安全机制

建议注释掉wheel组,这个组是Centos7默认自带的,并且这个组默认所有命令都有权限

# %wheel        ALL=(ALL)       ALL

四、基于命令别名授权

1.格式

%用户名/组名  主机名=命令别名

2.默认的命令别名

系统默认在配置文件中,准备了一些样例
这些默认都是注释掉的
当我们想调用哪个命令别名,先删除注释

## 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, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable

3.命令别名的使用

例:我想让wsjj用户对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

再写具体的授权操作

wsjj    ALL=NOPASSWD:NETWORKING

或者技术组也拥有同样的权限

%jishu    ALL=NOPASSWD:NETWORKING

再或者,授权多条命令别名
在授权之前,别忘了删除相应的注释

%jishu    ALL=NOPASSWD:NETWORKING,SOFTWARE,SERVICES

4.也可以自己定义一个命令别名

Cmnd_Alias WANGLUO = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables,/usr/bin/netstat
wsjj    ALL=WANGLUO

五、sudo授权的使用

1.单条命令

$ sudo 命令 操作

2.临时获取root用户权限(不建议使用)

必须输入用户密码,无密码用户无法使用

$ sudo -i