讨论一下sudo的安全性问题

最近看过一篇文章关于sudo的安全性的讨论,正好自己最近工作也与Linux有关,自己总结了一下,给大家一起分享,现在企业在Linux的使用中,越来越关注安全问题,运维中使用普通用户进行管理,遇到需要root账号执行时候,使用sudo 命令来提升自己执行权限,这样做是为了把账号权限降低,避免安全。
 
一、 sudo 是什么
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
选项参数
-b:在后台执行指令;
-h:显示帮助;
-H:将HOME环境变量设为新身份的HOME环境变量;
-k:结束密码的有效期限,也就是下次再执行sudo时便需要输入密码;。
-l:列出目前用户可执行与无法执行的指令;
-p:改变询问密码的提示符号;
-s<shell>:执行指定的shell;
-u<用户>:以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份;
-v:延长密码有效期限5分钟;
-V :显示版本信息。
举例: 使用sudo执行 cat /etc/shadow
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[ttgo2@bogon ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied

[ttgo2@bogon ~]$ sudo cat /etc/shadow
[sudo] password for ttgo2:
root:$1$txEWMiG.$4kBR6Cfsl1fyeiT540BIC.:17351:0:99999:7:::
bin:*:15980:0:99999:7:::
daemon:*:15980:0:99999:7:::
adm:*:15980:0:99999:7:::
lp:*:15980:0:99999:7:::
sync:*:15980:0:99999:7:::
shutdown:*:15980:0:99999:7:::

二、 抛出问题
使用普通用户执行 sudo su - root 是不是直接使用root 账号了? 我们来看一下执行结果。
问题1:直接执行sudo su - root
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$ sudo su - root
[root@bogon ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon ~]#

 
还有其他多种操作可以直接提升到root用户,方法如下:
 
问题2:执行sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$ sudo tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash
tar: testfile: Cannot stat: No such file or directory
[root@bogon tmp]#
[root@bogon tmp]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@bogon tmp]#
[root@bogon tmp]#

问题3:nmap 可以通过执行脚本来获取root的shell,执行如下
[ttgo2@bogon tmp]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ echo "os.execute('/bin/sh')">/tmp/shell.nse
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$
[ttgo2@bogon tmp]$ sudo nmap --script=/tmp/shell.nse

Starting Nmap 5.51 ( http://nmap.org ) at 2018-09-08 08:00 PDT
sh-4.1#
sh-4.1#
sh-4.1#
sh-4.1#

这样的方法还有还有很多,比如:strace、ftp、nmap、tcpdump、except、nano,这些命令都是可以实现sudo + 命令 提权成root shell。问题是出在什么地方,我们下面来看一下
 
三,问题解决
3.1 问题根源:普通用户使用sudo 配置(对权限没有控制)
在Centos 6.X Linux系统中,默认多普通用户是不允许使用sudo命令的,如果使用就会提示如下信息:
[sec17@bogon tmp]$ cat /etc/shadow
cat: /etc/shadow: Permission denied
[sec17@bogon tmp]$ sudo cat /etc/shadow

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 sec17:
[b]sec17 is not in the sudoers file. This incident will be reported.
[/b][sec17@bogon tmp]$

很多系统管理直接对  vim /etc/sudoers 进行的编辑,增加权限,或者使用visudo
  87 
88 ## Next comes the main part: which users can run what software on
89 ## which machines (the sudoers file can be shared between multiple
90 ## systems).
91 ## Syntax:
92 ##
93 ## user MACHINE=COMMANDS
94 ##
95 ## The COMMANDS section may have other options added to it.
96 ##
97 ## Allow root to run any commands anywhere
[b]98 root ALL=(ALL) ALL
99 ttgo2 ALL=(ALL) ALL
100 sec17 ALL=(ALL) ALL[/b]

说明一下   “sec17   ALL=(ALL)       ALL” 配置含义,截图如下:

wKioL1MYJ0CRJZGSAAD9-EL6Zs4959.jpg

 
如果是权限是ALL的话,那么就可以执行任何命令了。因此存在非常大的安全问题,甚至可以通过sudo passwd 修改root密码,如何解决呢?我们往下继续。
 
3.2 如何解决
 
我们执行普通用户的操作命令,这个要特别熟悉该普通用的业务和操作命令和规范,那么现在解决一下 普通用户 执行passwd 修改root的方法,执行 visudo 命令,添加一个命令如下:
ttgo2  ALL=(root)     !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

QQ截图20180908232316.png

 
保存并退出,我们现在使用ttgo2 普通行号进行测试。如下:
[ttgo2@bogon ~]$ id
uid=500(ttgo2) gid=500(ttgo2) groups=500(ttgo2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[ttgo2@bogon ~]$
[ttgo2@bogon ~]$ sudo passwd
[sudo] password for ttgo2:
[b]Sorry, user ttgo2 is not allowed to execute '/usr/bin/passwd' as root on bogon.
[/b][ttgo2@bogon ~]$


 
 
注意问题: 在配置visudo的时候,需要添加命令的全路径,多个命令直接使用“,”逗号隔开。
 
夜色已深,已经困的快睁不开双眼了,希望能对大家有所帮助
 
 
 

1 个评论

求问大佬,像tar,vim,more这些基础的命令也能提权,给用户权限的时候应该怎么给才能比较安全啊

要回复文章请先登录注册