linux sudo經常用,小編帶你來了解它的安全性

linux sudo經常用,小編帶你來了解它的安全性

linux 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;
-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

還有其他多種操作可以直接提升到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 ~]#

問題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,執行如下

這樣的方法還有還有很多,比如:strace、ftp、nmap、tcpdump、except、nano,這些命令都是可以實現sudo + 命令 提權成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#


三,問題解決

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

 
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##

## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
ttgo2 ALL=(ALL) ALL
sec17 ALL=(ALL) ALL[/b]

說明一下 “sec17 ALL=(ALL) ALL” 配置含義,截圖如下:

linux sudo經常用,小編帶你來了解它的安全性

如果是權限是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
linux sudo經常用,小編帶你來了解它的安全性

保存並退出,我們現在使用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的時候,需要添加命令的全路徑,多個命令直接使用“,”逗號隔開。

夜色已深,已經困的快睜不開雙眼了,希望能對大家有所幫助


分享到:


相關文章: