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