淺議Linux中的SetUID許可權

來源:互聯網
上載者:User
淺議Linux中的SetUID許可權 (2011-01-14 13:16)

1什麼是SetUID

     我們知道,在linux的命令列下執行“ps”命令時,就會列出當前系統中的所有進程,在其中可以看到每個進程都和使用者的真實id關聯,實際上,Linux中的每個進程還跟一個稱為有效使用者id(set User id)緊密關聯。前者用於表示該進程由那個使用者控制,後者用於為建立立的檔案分配所有權,檢查檔案訪問許可等操作,同時有效使用者為該檔案的所有者。linux系統核心允許一個進程以調用一個SetUID程式(或顯示執行SetUID系統調用)的方式,來改變其自身的有效使用者id。

2如何配置SetUID許可權

     在linux中,不管是Root使用者還是普通使用者,都可以使用“Password”命令來更改自身的密碼。但是,Linux中的密碼通常是儲存在“/etc/paswd”和“/etc/shadow”檔案中,這兩個檔案對系統安全至關重要,因此只有Root使用者才能對其執行讀寫操作。以管理員的身份登陸系統,在Linxu提示符下執行“ls
/etc/passwd /etc/shadow”命令,在返回資訊中可以看到普通使用者對上述這兩個檔案並沒有寫入權限,因此從檔案屬性的角度看,普通使用者在更改自身密碼時,是無法將密碼資訊寫入到上述檔案中的,哪麼使用者是怎樣成功的更改密碼的呢?實際上,問題的關鍵不在於密碼檔案本身,而在於密碼更改命令“passwd”。在提示符下執行命令“ls /usr/bin/passwd”,在返回資訊中的檔案所有者執行許可權位上顯示“S”字樣,表示“passwd”命令具有SetUID許可權,其所有者為Root,這樣普通使用者在執行“passwd”命令時,實際上以有效使用者root的身份來執行的,並具有了相應的許可權,從而將新的密碼寫入到“/etc/passwd”和“/etc/shadow”檔案中,當命令執行完畢,該使用者的身份立即消失。如何設定SetUID許可權呢?使用“chmod”命令即可為指定檔案設定SetUID許可權,例如“chmod
4xxx   filename”命令,取消SetUID許可權的命令為“chmod xxx   filename”。類似的,執行“chmod 2xxx filename”命令可以設定SetUID許可權,使用“chmod xxx filename”命令即可取消SetGID許可權,如果執行“chmod
6xxx filename”命令,即可同時為指定檔案設定SetUID和SetGID,執行命令“chmod 0xxx filename”,即可同時取消指定檔案的SetUID和SetGID許可權。例如以Root使用者登陸系統,執行“chmod 0511 /usr/bin/passwd”命令,就可以取消“passwd”命令的SetUID許可權,這樣普通使用者就無法修改自己的密碼了。

3SetUID許可權的安全性

     使用SetUID可以靈活的調整所有檔案所有者許可權,但是也為系統的安全性帶來了隱患。如果Root使用者為指定的程式檔案配置過大的SetUID許可權,那麼就會為駭客或者非法使用者開啟了侵入系統的大門。例如在Linux中可以使用“vi”命令來編輯檔案,但是,對於普通使用者而言,當其試圖使用命令“vi /etc/shadow”來修改密碼檔案時,系統就會彈出“/etc/shadow
: Permission Denied”的警告提示,從而禁止其對密碼檔案的非法修改。但是,如果在Root使用者環境中執行“which vi”命令,就可以看到“vi”命令實際上是“vim”命令的別名,其真實路徑為“/usr/bin/vim”,這樣執行命令"chmod
6755 /usr/bin/vim",就可以將“vi”命令的所有者更改為Root,這樣在普通的使用者環境中,就可以使用“vi”命令來編輯任何檔案(例如“/etc/shadow”),這樣,即使是普通使用者也可以將密碼檔案清空,從而實現無密碼登陸Linux,給系統的安全帶來的威脅不言而喻。因此,對可能給系統安全帶來危害的程式來說,應該盡量不要隨意為其配置SetUID許可權。

4 如何禁用SetUID許可權

      對於存放在敏感性資料的分區而言,有時可能希望禁用SetUID使用權限設定功能。例如對"/home" 分區禁用SetUID許可權,可以找到修改其設定檔“/etc/fstab”, 執行命令“vi /rtc/fstab”,可以看到“LABEL=/home
/home ext3 defaults 1 2”等資料,我們只需在上述“default”關鍵字的後面添加“nosuid” 關鍵字即可,例如使用“vi”命令將其修改為“LANBEL=/home /home ext3 default , nosuid 1 2”,之後執行命令“mountoremount
/home”,這樣即使對“/home”分區上的任何可執行檔配置了SetUID許可權,也是無效的。這樣就在很大程度上保護了系統的安全。

from :http://hi.baidu.com/futily/blog/item/afa7ad8707b27b2cc75cc35a.html

您有Dos和Windows經驗,就大概知道系統存在若干類型的檔案,如系統檔案、唯讀檔案、隱含檔案等。在Linux/Unix下,檔案類型遠比Dos/Windows系統多樣和複雜。本文以RedHat
Linux為例,旨在使讀者對Linux下的檔案類型有更多的瞭解。文中的多數內容,對其他發行版的Linux以及Aix、Solaris、Freebsd等作業系統也同樣正確。Linux下可以用ls –l 命令來判斷檔案類型,如上
圖所示。可以依據第一列中的10個字元來判斷。  ? -rw-r—r—指明了1.txt檔案是一個普通檔案,1.txt和myprog04檔案都是普通檔案。以”-“開頭的都是普通檔案,而以”d”開頭的是目錄檔案。

  ? brw-rw---- 指明了/dev/sda1是一個塊裝置(Block Device)檔案。以”b”開頭的檔案都是塊裝置檔案。?

  ? crw-rw----指明了/dev/lp0是一個字元裝置(Chartacter Device)檔案,以”c”開頭的檔案都是字元裝置檔案。

  ? srwxrwxrwx 指明了/var/lib/mysql/mysql.sock是一個socket檔案。以””開頭的檔案都是socket檔案。

  ? prwxr—r--指明了了mypipe 是一個管道檔案。管道檔案的一個屬性是”p”。

  ? lrwxrwxrwx 指明了softlinkof1.txt 是一個軟連結檔案(或稱符號連結檔案),該檔案指向了1.txt。以”l”開頭的檔案是軟連結檔案。

  ? -rw-r—r—開頭的hard_link_of_1.txt看上去是個普通檔案,但它實際上是一個永久連結檔案。

  ? -rwsr-xr-x指明了myprog01是一個setUid的可執行檔,這是根據第四個字元”s”判斷的。

  ? -rwxr-sr-x指明了myprog03是一個setGid的可執行檔,這是根據第七個字元中的”s”判斷的。

  ? -rwsr-sr-x指明了myprog02是一個setUid加setGid的可執行檔,這是根據第四個和第七個字元中的”s”判斷的。

  ? drwxrwxrwt 中的第一個”d”字指明了tmp檔案是一個目錄,最後一個字元”t”指明了該目錄被設定了粘著位。一、裝置檔案

  Linux下的/dev 目錄中有大量的裝置檔案。主要是塊裝置檔案和字元裝置檔案。  塊裝置檔案

  在過去,在添加新磁碟後,往往需要手動增加塊裝置檔案。現在通常我們不需要手動增加塊裝置檔案,運行一下service kudzu start ,系統就會自動為您配置相應的裝置。塊裝置的主要特點是可以隨機讀寫,而最常見的塊裝置就是磁碟,如/dev/hda1
、/dev/sda2、/dev/fd0等。  字元裝置檔案

  同塊裝置一樣,我們一般都可以用service kudzu start命令來自動增加、刪除或修改字元裝置。最常見的字元裝置是印表機和終端,他們可以接受字元流。  /dev/null是一個非常有用的字元裝置檔案,送入這個裝置的所有東西都被忽略。如果將任何程式的輸出結果重新導向到/dev/null,則看不到任何輸出資訊。甚至於,您可以將某一使用者的shell指向/dev/null 以禁止其登陸。  管道裝置檔案

  管道裝置檔案有時候也被叫做FIFO檔案(FIFO是先進先出的意思),從字面上理解,管道裝置檔案就是從一頭流入,從另一頭流出。通常我們會在其中做一些工作,以達到我們“吃的是草,擠出來的是奶”的目的,管道檔案也有其妙用。  以前,Unix系統對檔案的最大用量用2GB的限制,雖然現在新版本的Linux、Solaris、FreeBSD等不再有此限制,但處理大檔案的需求仍然存在,假設您想用鏡像(dd命令)的方式來備份一個容量為20GB分區的分區,就會產生一個20GB的檔案,根據您磁碟實際的使用狀況,這個檔案在壓縮後可能只有數MB到數GB,我們可以建立一個管道檔案來自動實現這個壓縮過程。  [root@linux236
root]# mknod mypipe p

  [root@linux236 root]# ls -l mypipe

  prw-r--r-- 1 root root 0 Aug 5 23:27 mypipe

  [root@linux236 root]#  在這裡,我們建立了一個叫mypipe的管道檔案,用ls -l 命令可以看到它的屬性是prw-r--r--,用下面的組合命令實現鏡像和壓縮:  [root@linux236 root]# compress < mypipe >; sda6.img.Z &

  [root@linux236 root]# dd if=/dev/sda6 of=mypipe

  [root@linux236 root]# ls sda6.img.Z

  sda6.img.Z  第一個命令使得從mypipe管道中流出的檔案被壓縮為sda.img.Z檔案,注意這個命令的結尾必須使用"&"符號。第二個命令將/dev/sda6分區中的資料道入管道檔案mypipe,換句話說,/dev/sda6分區中的資料進入管道,而壓縮檔sda6.img.Z檔案從管道中流出。  在匯出Oracle、DB2等大型資料庫時等經常會產生很大的檔案,熟練的資料庫管理員往往會選擇通過管道進行壓縮的方式,對於Oracle資料庫,我們可以使用下邊的組合命令:這樣,就會將Oracle匯出的內容直接壓縮成為expdat.dmp.Z檔案。  compress
< mypipe >; expdat.dmp.Z &

  exp userid=system file=mypipe owner=scott


  第二章 連結檔案  連結檔案有點類似於Windows 的所謂捷徑,但並不完全一樣。連結有兩種方式,軟連結和永久連結。  軟連結檔案

  軟連結又叫符號連結,這個檔案包含了另一個檔案的路徑名。可以是任意檔案或目錄,可以連結不同檔案系統的檔案。連結檔案甚至可以連結不存在的檔案,這就產生一般稱之為"斷鏈"的問題(或曰“現象",連結檔案甚至可以迴圈連結自己。類似於程式設計語言中的遞迴。  [yaoyao@linux236
yaoyao]$ ls -l

  total 0

  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:39 1.txt ->; 3.txt

  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:38 2.txt ->; 1.txt

  lrwxrwxrwx 1 yaoyao yaoyao  5 Aug 6 17:39 3.txt ->; 2.txt  上面的三個檔案形成了一個遞迴,實質上沒有任何作用。系統管理員應該避免系統出現斷鏈或迴圈連結。  用ln -s 命令可以產生一個軟串連,如下:  [root@linux236 test]# ln -s source_file softlink_file  在對符號檔案進行讀或寫操作的時候,系統會自動把該操作轉換為對源檔案的操作,但刪除連結檔案時,系統僅僅刪除連結檔案,而不刪除源檔案本身。  永久連結檔案

  info ln 命令告訴您,永久連結是已存在檔案的另一個名字(A "hard link" is another name for an existing file),這多少有些令人困惑。硬串連的命令是  ln -d existfile newfile  永久連結檔案有兩個限制  1、不允許給目錄建立永久連結;

  2、只有在同一檔案系統中的檔案之間才能建立連結。  對永久連結檔案進行讀寫和刪除操作時候,結果和軟連結相同。但如果我們刪除永久連結檔案的源檔案,永久連結檔案仍然存在,而且保留了願有的內容。這時,系統就“忘記”了它曾經是永久連結檔案。而把他當成一個普通檔案。三、setUid、setGid檔案和帶粘著位的目錄檔案  在Linux/Unix下,有一種可執行檔被setUid,這使得任意使用者在執行該檔案時,都綁定了檔案擁有者的許可權。就好像檔案帶了一把尚方寶劍一樣,setUid檔案通常用來提升使用者的許可權.最有代表性的su命令.普通使用者可以可以執行該命令,使自己升級為root。setUid命令的用法是:  chmod
4755 your_program  setGid 檔案和setUid檔案非常類似,它使得這使得任意使用者在執行該檔案時,都綁定了檔案所有組的許可權.單獨setGid的檔案非常少用,通常都是即setUid又setGid。不過和您猜想的可能有點不同。setUid+setGid通常並不是用來提升許可權的,而是為了綁定某個特殊使用者及其組的特殊許可權,例如qmail 的外圍軟體vpopmail,就使用了一個setUid+setGid的程式vchkpw來校正使用者名稱和密碼。這個道理和Apache常常以nobody使用者運行一樣。其目的是為了更加安全。  setGid
命令的用法為

  chmod 2755 your_program  通常使用命令

  chmod 6755 yourprogram  來使得某可執行程式同時setUid和setGid  全能的root使用者當然可以任意setUid和setGid。但尚方寶劍不能用來假傳聖旨,普通使用者只能給屬於自己的檔案配置setUid或setGid。由於setUid或setGid檔案會使普通使用者提升許可權,謹慎的系統管理員通常會留意系統中有setUid或setGid檔案的變化。減少安全隱患。  在Linux下,/tmp是一個存放臨時檔案的目錄,要求是對所有使用者可寫。但每個使用者都只能刪除自己擁有的檔案。這種情況下,就可以把目錄加一個粘著位。  [root@yaoyao
/]# ls -l |grep tmp

  drwsrwsrwt 9 root root 4096 8月7 10:50 tmp  注意第是個字元"t",它代表了這個目錄被設定了粘著位。  我們自行建立一個abc的目錄,使之具有和/tmp相同的特點  chmod 777 abc

  chmod +t abc  上述的個兩個命令組合等同於下邊的一個命令:  chmod 1777 abc  用ls –l 看abc 目錄的屬性如下:  [root@yaoyao test]# ls -l  總用量 4  drwsrwsrwt 2 root root 4096 8月 7 11:32 abc  和/tmp目錄相同的需求往往在ftp伺服器的upload
目錄中也存在。可以用相同的方式處理。四、socket 檔案  socket檔案類似於管道,但它是在網路上面工作的。您到電腦就是靠它來做網路處理的。您可能聽說過“Winsock”,那是 Windows
的套介面。我們在這裡不深入談有關套介面,因為如果您不寫程式,您不會用到它,但如果您看到您系統裡有個檔案類型是s,您知道它是什麼就行了。  比如說mysql 啟動並執行時候通常會產生一個socket檔案。  [root@yaoyao tmp]# ls -l /tmp/mysql.sock  srwxrwxrwx 1 mysql mysql 08月 7 10:03 mysql.sock  /tmp目錄下還有一些socket檔案,多半是運行Xwindows的時候產生的。  五、疑難雜症--刪除不掉的檔案  “為什麼有些檔案以討厭的減號("-"開頭做檔案名稱,無論如何都刪除不掉,這到底為什麼?",您可能聽過您臨桌的新手這樣的叫喊過,希望同樣的事情不會發生在您的身上,這個非常容易解決,您只要用帶路徑的方法就可以把他們刪除了,假定一個檔案名稱為"-abc",您可以用:  rm
./-abc 或者

  rm /home/yaoyao/-abc  命令將其輕鬆刪除,另外您也可以用相同的方式用vi或者其他工具對他們進行修改。  另一些檔案看上去可能一切正常,但當您嘗試刪除的時候,居然也會報錯,就象下邊一樣:  [root@linux236 root]# ls -l 1.txt

  -rw-r--r-- 1 root root 0 Aug 5 23:00 1.txt

  [root@linux236 root]# rm -rf 1.txt

  rm: cannot unlink `1.txt': Operation not permitted您是全能root使用者,居然系統告訴您操作不允許,是Linux瘋了嗎?當然不是,如果您會用lsattr命令,問題就有了答案。  [root@linux236 root]# lsattr

  ---i---------- ./1.txt

  -------------- ./weiqi.ldif

  -------------- ./qi.schema  秘密終於暴露了,在lsattr命令下,這個1.txt檔案帶有一個"i"的屬性,所以才不可以刪除。您現在可以用下邊的一系列命令:  [root@linux236 root]# lsattr 1.txt

  ---i---------- 1.txt

  [root@linux236 root]# chattr -i 1.txt

  [root@linux236 root]# rm -rf 1.txt

  [root@linux236 root]#  成功了,這個屬性專門用來保護重要的檔案不被刪除,通常的情況下,懂得用這幾個命令的通常系統管理員有能力判斷這個檔案是否可以被刪除。 如果您想給一個檔案多加點保護,可以使用下邊的命令:  chattr +i filename  命令,這樣一來,想要刪除這個檔案就要多一個步驟。同時,這樣的檔案也是不可以編輯和修改的。只有root使用者才能使用chattr命令。此命令可以在Linux ext2或ext3系統上使用。  類似於Dos和Windows檔案系統,不能隨意刪除的檔案多半都有其道理,即使您知道如何刪除,都應該三思而後行。  總結

  Linux/Unix系統管理是個複雜的工作,掌握和理解Linux/Unix檔案類型是必備的基礎之一。學習Linux/U

轉自:http://blog.chinaunix.net/space.php?uid=24231058&do=blog&id=157199

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.