IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁操作系統(tǒng)LINUX → Linux Setuid和Setgid

Linux Setuid和Setgid

時間: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)閱讀

文章評論
發(fā)表評論

熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程使用screen管理你的遠程會話使用screen管理你的遠程會話GNU/Linux安裝vmwareGNU/Linux安裝vmware如何登錄linux vps圖形界面 Linux遠程桌面連如何登錄linux vps圖形界面 Linux遠程桌面連

相關(guān)下載

人氣排行 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讀寫負載