時間:2015/6/28來源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評論(0)
1、setuid和setgid的解說
setuid 和setgid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令。比 如我們用普通用戶運行passwd命令來更改自己的口令,實際上最終更改的是/etc/passwd文件我們知道/etc/passwd文件是用戶管理的 配置文件,只有root權(quán)限的用戶才能更改
[root@localhost ~]# ls -l /etc/passwd
-rw-r--r-- 1 root root 2379 04-21 13:18 /etc/passwd
作為普通用戶如果修改自己的口令通過修改/etc/passwd肯定是不可完成的任務(wù),但是不是可以通過一個命令來修改呢答案是肯定的,作為普通用 戶可以通過passwd 來修改自己的口令這歸功于passwd命令的權(quán)限我們來看一下;
[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 文件已經(jīng)設(shè)置了setuid 權(quán)限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達到修改自己口令的權(quán)限
我們在Linux 系統(tǒng)中的超級權(quán)限的控制中 有提到過我們知道Linux的用戶管理是極為嚴格的,不同的用戶擁有不同的權(quán)限,為了完成只有root用戶才能完成的工作,我們必須為普通用戶提升權(quán) 限,最常用的方法就是su或sudo雖然setuid 和setgid也是讓普通用戶超越自身擁有的普通權(quán)限達到root權(quán)限的方法,但我不推薦大家使用,因為它能為系統(tǒng)帶來安全隱患。
注意:setuid和setgid會面臨風(fēng)險,所以盡可能的少用,了解了解既可~~~
2、setuid和setgid的實例應(yīng)用
我們想讓一個普通用戶beinan擁有root用戶擁有超級rm刪除權(quán)限,我們除了用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: 權(quán)限不夠
那我們怎么才能讓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 注:設(shè)置rm的權(quán)限為4755 , 就把setuid 位設(shè)置好了
[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文件;
我們只是設(shè)置了rm的setuid位,讓普通用戶在rm指令上有超級root的刪除超級權(quán)力
通過這個例子,我們應(yīng)該能明白setuid和setgid位的應(yīng)用了,如同前面所說,讓普通用戶超越本身的能力,讓普通用戶能執(zhí)行只有root才能 執(zhí)行的命令在這一點,我們要和su和sudo 區(qū)分開來請參見su和sudo的文檔:Linux 系統(tǒng)中的超級權(quán)限的控制
3、setuid和setgid的設(shè)置方法
第一種方法:八進制方法:
setuid位是的設(shè)置用八進制的4000,setgid占用的是八進制的2000 ;比如我們前面所說的 chmod 4755 /bin/rm 就是設(shè)置的setuid位;
至于setuid的設(shè)置方法,只是在我們通過chmod設(shè)置文件或目錄權(quán)限位的八進制方法的前面多加一個數(shù)字,也就是4比如:
[root@localhost ~]# chmod 4755 /bin/rm 注:設(shè)置rm的權(quán)限為4755 , 就把setuid 位設(shè)置好了
作為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這個目錄,經(jīng)過改變權(quán)限后的,目錄所歸屬用戶組的那三個權(quán)限位是 r-s 如果我們見到的是小寫的s,表明文件所歸屬的用戶組位有執(zhí)行權(quán)限x因為我們用了2755 ,意思是說文件屬主擁有可讀可寫可執(zhí)行權(quán)限,所歸屬的用戶組擁有可讀可執(zhí)行權(quán)限,并且設(shè)置了setuid,所以這時本來文件所歸屬的用戶組擁有r-x,現(xiàn) 在加了setgid位,就把其中的x換成了s如果文件所歸屬的用戶組沒有執(zhí)行權(quán)限,這個權(quán)限應(yīng)該是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í)行權(quán)限,這時本來在執(zhí)行權(quán)限位上顯示-,由于有了setuid,所以顯示為S
如果我們?yōu)橐粋文件的權(quán)限擁有 屬主可讀可寫可執(zhí)行所歸的組擁有可讀可執(zhí)行,其它用戶可讀可執(zhí)行,并且同時設(shè)置setuid和setgid位,我們應(yīng)該怎么運行命令呢?
[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
所以,同時設(shè)置setuid和setgid,就是把setuid和setgid兩個八進位的值相加 (4000 2000=6000),然后加上文件或目錄的權(quán)限位的三位數(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位,當(dāng)然也能用file來查看文件的類型;
比如:
[root@localhost ~]# file /usr/bin/passwd
關(guān)鍵詞標(biāo)簽:Linux,Setuid,Setgid
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠程會話GNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠程桌面連
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址linux tc實現(xiàn)ip流量限制dmidecode命令查看內(nèi)存型號linux下解壓rar文件安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程Ubuntu linux 關(guān)機、重啟、注銷 命令lcx.exe、nc.exe、sc.exe入侵中的使用方法查看linux服務(wù)器硬盤IO讀寫負載