時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
1、setuid和setgid的解說
setuid 和setgid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令。比 如我們用普通用戶運行passwd命令來更改自己的口令,實際上最終更改的是/etc/passwd文件我們知道/etc/passwd文件是用戶管理的 配置文件,只有root權限的用戶才能更改
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd
作為普通用戶如果修改自己的口令通過修改/etc/passwd肯定是不可完成的任務,但是不是可以通過一個命令來修改呢答案是肯定的,作為普通用 戶可以通過passwd 來修改自己的口令這歸功于passwd命令的權限我們來看一下;
[root@localhost ~]# ls -l /usr/bin/passwd
-r-s--x--x 1 root root 21944 02-12 16:15 /usr/bin/passwd
因為/usr/bin/passwd 文件已經設置了setuid 權限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達到修改自己口令的權限
我們在Linux 系統(tǒng)中的超級權限的控制中 有提到過我們知道Linux的用戶管理是極為嚴格的,不同的用戶擁有不同的權限,為了完成只有root用戶才能完成的工作,我們必須為普通用戶提升權 限,最常用的方法就是su或sudo雖然setuid 和setgid也是讓普通用戶超越自身擁有的普通權限達到root權限的方法,但我不推薦大家使用,因為它能為系統(tǒng)帶來安全隱患!!
注意:setuid和setgid會面臨風險,所以盡可能的少用,了解了解既可~~~
2、setuid和setgid的實例應用
我們想讓一個普通用戶beinan擁有root用戶擁有超級rm刪除權限,我們除了用su或sudo 臨時切換到 root身份操作以外,還能怎么做呢???
[root@localhost ~]#cd /home 注:進入/home目錄
[root@localhost home]# touch beinantest.txt 注:創(chuàng)建一個測試文件;
[root@localhost home]# ls -l beinantest.txt 注:查看文件屬性;
-rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt 注:文件的屬性;
[root@localhost home]# su beinan 注:切換到普通用戶 beinan
[beinan@localhost home]$ rm -rf beinantest.txt 注:以普通用戶身份來刪除beinantest.txt文件;
rm: 無法刪除 beinantest.txt: 權限不夠
那我們怎么才能讓beinan 這個普通用戶也擁有root超級的rm 刪除功力呢?
[root@localhost ~]# ls -l /bin/rm
-rwxr-xr-x 1 root root 93876 02-11 14:43 /bin/rm
[root@localhost ~]# chmod 4755 /bin/rm 注:設置rm的權限為4755 , 就把setuid 位設置好了
[root@localhost ~]# ls -l /bin/rm
-rwsr-xr-x 1 root root 43980 02-11 14:43 /bin/rm
[root@localhost ~]# cd /home/
[root@localhost home]# su beinan 注:切換到beinan用戶身份;
[root@localhost home]$ ls -l beinantest.txt 注:查看文件屬性;
-rw-r--r-- 1 root root 0 04-24 18:03 beinantest.txt 注:文件的屬性;
[beinan@localhost home]$ rm -rf beinantest.txt 注:刪除beinantest.txt文件;
我們只是設置了rm的setuid位,讓普通用戶在rm指令上有超級root的刪除超級權力
通過這個例子,我們應該能明白setuid和setgid位的應用了,如同前面所說,讓普通用戶超越本身的能力,讓普通用戶能執(zhí)行只有root才能 執(zhí)行的命令在這一點,我們要和su和sudo 區(qū)分開來請參見su和sudo的文檔:Linux 系統(tǒng)中的超級權限的控制
3、setuid和setgid的設置方法
第一種方法:八進制方法:
setuid位是的設置用八進制的4000,setgid占用的是八進制的2000 ;比如我們前面所說的 chmod 4755 /bin/rm 就是設置的setuid位;
至于setuid的設置方法,只是在我們通過chmod設置文件或目錄權限位的八進制方法的前面多加一個數(shù)字,也就是4比如:
[root@localhost ~]# chmod 4755 /bin/rm 注:設置rm的權限為4755 , 就把setuid 位設置好了
作為setgid 位占用的是八進制的2000位,我們下面舉個例子;
[root@localhost ~]# cd /home/
[root@localhost home]# mkdir slackdir
[root@localhost home]# ls -ld slackdir/
drwxr-xr-x 2 root root 4096 04-24 18:25 slackdir/
[root@localhost home]# chmod 2755 slackdir/
[root@localhost home]# ls -ld slackdir/
drwxr-sr-x 2 root root 4096 04-24 18:25 slackdir/
我們看到 slackdir這個目錄,經過改變權限后的,目錄所歸屬用戶組的那三個權限位是 r-s 如果我們見到的是小寫的s,表明文件所歸屬的用戶組位有執(zhí)行權限x因為我們用了2755 ,意思是說文件屬主擁有可讀可寫可執(zhí)行權限,所歸屬的用戶組擁有可讀可執(zhí)行權限,并且設置了setuid,所以這時本來文件所歸屬的用戶組擁有r-x,現(xiàn) 在加了setgid位,就把其中的x換成了s如果文件所歸屬的用戶組沒有執(zhí)行權限,這個權限應該是S同理setuid位的中的大寫的S和小寫的s,也 是這個原理見下面的例子;
[root@localhost home]# chmod 2740 slackdir/
[root@localhost home]# ls -ld slackdir/
drwxr-S--- 2 root root 4096 04-24 18:25 slackdir/
這個例子是因為目錄slackdir所歸屬的組沒有執(zhí)行權限,這時本來在執(zhí)行權限位上顯示-,由于有了setuid,所以顯示為S
如果我們?yōu)橐粋€文件的權限擁有 屬主可讀可寫可執(zhí)行所歸的組擁有可讀可執(zhí)行,其它用戶可讀可執(zhí)行,并且同時設置setuid和setgid位,我們應該怎么運行命令呢?
[root@localhost ~]# touch gooddoc.txt
[root@localhost ~]# ls -l gooddoc.txt
-rw-r--r-- 1 root root 0 04-24 18:47 gooddoc.txt
[root@localhost ~]# chmod 6755 gooddoc.txt
[root@localhost ~]# ls -l gooddoc.txt
-rwsr-sr-x 1 root root 0 04-24 18:47 gooddoc.txt
所以,同時設置setuid和setgid,就是把setuid和setgid兩個八進位的值相加 (4000 2000=6000),然后加上文件或目錄的權限位的三位數(shù)值(上面的例子是755),然后通過chmod 運行就行了所以上面例子中用了6755
第二種方法:通過助記語法;
還是延用chmod的助記語法,通過u s 或u-s 來增減setuid位,同理,我們可以通過g s 或g-s 來setgid位;
[root@localhost ~]# touch mydoc.txt 注:創(chuàng)建一個文件;
[root@localhost ~]# ls -l mydoc.txt
-rw-r--r-- 1 root root 0 04-24 19:00 mydoc.txt
[root@localhost ~]# chmod u s mydoc.txt
[root@localhost ~]# ls -l mydoc.txt
-rwSr--r-- 1 root root 0 04-24 19:00 mydoc.txt
我們也可以用file命令來查看setuid和setgid位,當然也能用file來查看文件的類型;
比如:
[root@localhost ~]# file /usr/bin/passwd
關鍵詞標簽:Linux,Setuid,Setgid
相關閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內存型號 linux tc實現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載