特殊權限set_uid:
用ls -l檢視 passwd指令檔案的路徑可以看到這個檔案和之前所看到的檔案有些不同,有紅色的标記,而且有個s權限:
<a href="https://s1.51cto.com/wyfs02/M00/A7/16/wKioL1ngbr2BX5z9AAGf48SbhZI912.png" target="_blank"></a>
這個s就是set_uid的權限,這個權限可以讓普通使用者修改自己的密碼,這個權限的原理是:當普通使用者執行passwd指令的一瞬間給它賦予root的身份權限,相當于臨時使用了root權限,是以才能夠修改得了密碼檔案,這就是set_uid的權限的作用。
注意:能夠有set_uid權限的檔案,這個檔案一定得是二進制的可執行檔案。
普通使用者使用ls指令想要檢視root目錄是權限不夠的,是以想要普通使用者也能使用ls指令檢視root目錄或者檢視需要root權限的檔案、目錄的時候,我們可以給ls指令授予set_uid權限:
<a href="https://s1.51cto.com/wyfs02/M01/08/60/wKiom1ngcXOAyYQNAAFCjN5zMMo698.png" target="_blank"></a>
給ls指令授予set_uid權限:
<a href="https://s1.51cto.com/wyfs02/M01/A7/16/wKioL1ngbr7yZWkaAAGoSVQtdxE079.png" target="_blank"></a>
這時候用普通使用者就可以檢視root目錄了:
<a href="https://s1.51cto.com/wyfs02/M01/08/60/wKiom1ngcXWjeXzSAAQnWQsYN-Q055.png" target="_blank"></a>
去掉set_uid權限:
<a href="https://s4.51cto.com/wyfs02/M02/A7/16/wKioL1ngbr-iNrbtAAI2FNiFFLs723.png" target="_blank"></a>
另一種設定set_uid權限的方法:
<a href="https://s4.51cto.com/wyfs02/M02/08/60/wKiom1ngcXfSEXdjAAId_CxJq-Q879.png" target="_blank"></a>
想要将s變成小寫加個x權限即可:
<a href="https://s5.51cto.com/wyfs02/M00/A7/16/wKioL1ngbsCD-TKTAAG0-naw794282.png" target="_blank"></a>
目錄也是可以設定set_uid權限的,但是也因為目錄不是指令檔案,沒有實際的執行意義,是以設定set_uid權限也是沒有意義的。
特殊權限set_gid:
set_gid和 set_uid挺像的,隻不過這個set_gid權限是作用在所屬組上面的,給ls指令設定一個set_gid權限:
<a href="https://s5.51cto.com/wyfs02/M01/A7/16/wKioL1ngbsLy0fFrAAJ94UaJhx4166.png" target="_blank"></a>
是以set_gid權限的作用是臨時給普通使用者擁有此檔案所屬組的身份權限,目錄也是可以設定這個權限的:
<a href="https://s4.51cto.com/wyfs02/M02/08/60/wKiom1ngcXiwDdGEAAG8X_-Lauk570.png" target="_blank"></a>
上面我們把Test1目錄設定了set_gid權限,這時候把Test1目錄的所屬組改為user1後,在此目錄下所建立的子目錄或檔案的所屬組都會和父目錄保持一緻,也就是說它們的所屬組都會是user1:
<a href="https://s5.51cto.com/wyfs02/M00/08/60/wKiom1ngcXnjiWwzAAFULbveqV4435.png" target="_blank"></a>
<a href="https://s1.51cto.com/wyfs02/M02/A7/16/wKioL1ngbsOxFvApAAJ-CELQeCc741.png" target="_blank"></a>
特殊權限stick_bit:
tmp目錄有stick_bit權限,這個權限的表示字元是t:
<a href="https://s1.51cto.com/wyfs02/M00/08/60/wKiom1ngcXrDRZkoAAE56JX6QZs227.png" target="_blank"></a>
這個stick_bit權限是用于防止自己的檔案被其他使用者删除的,設定了權限後除了這檔案的所有者和所屬組之外的使用者是不能删除的:
<a href="https://s1.51cto.com/wyfs02/M00/A7/16/wKioL1ngbsTx56waAAEoXnyAIRE161.png" target="_blank"></a>
軟連結檔案:
軟連結檔案類似于windows的快捷方式:
<a href="https://s4.51cto.com/wyfs02/M01/08/60/wKiom1ngcXuDXCD3AAIIhK7Qagc151.png" target="_blank"></a>
軟連結檔案相當于是存儲了一個路徑,是以這個軟連結檔案的大小就取決于路徑的長度。
在lib64目錄下軟連結檔案比較多:
<a href="https://s2.51cto.com/wyfs02/M01/A7/16/wKioL1ngbsmSp0p4AApihqTo-2Q061.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/A7/16/wKioL1ngbs-wDo1gAA0xN4z4r5U688.png" target="_blank"></a>
軟連結檔案的作用主要是節省存儲空間,因為當需要複制一個檔案的時候隻需要複制那個檔案的軟連結檔案即可,如果複制檔案本身的話占用空間會大得多。
制作軟連結:
ln -s指令可以制作軟連結:
<a href="https://s2.51cto.com/wyfs02/M02/08/60/wKiom1ngcYegf9FmAANZvR6mjNk056.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/08/60/wKiom1ngcYnxmw_TAARQD1zdhlU445.png" target="_blank"></a>
目錄也可以做一個軟連結:
<a href="https://s5.51cto.com/wyfs02/M00/08/60/wKiom1ngcYzyNIYAAATtfodbL8Q865.png" target="_blank"></a>
制作相對路徑的軟連結:
相對路徑的軟連結有弊端,如果把這個目錄拷貝到别的計算機或者這個目錄的名稱發生改變的話,這個相對路徑的軟連結就會失效,是以制作軟連結盡量使用絕對路徑。
例如我将123.txt移動到Test1目錄下:
<a href="https://s3.51cto.com/wyfs02/M00/A7/16/wKioL1ngbtjR5Cn8AAShAoYvqlI942.png" target="_blank"></a>
如果是使用的絕對路徑就不會有這種問題:
<a href="https://s5.51cto.com/wyfs02/M01/A7/16/wKioL1ngbtnBCrlBAAOc1ohpzNU585.png" target="_blank"></a>
是以盡量使用絕對路徑。
軟連結還可以解決磁盤存儲空間不夠的問題,例如tmp目錄的快存儲滿了,但是這個目錄下有一個日志檔案需要一直被寫入資料,這個時候就可以将這個日志檔案先移動到一個磁盤空間大的目錄下,然後将這個日志檔案做一個軟連結,接着将這個軟連結檔案放在tmp目錄下,這樣的話寫入的資料是寫入到原檔案的,而不會寫入到軟連結檔案,是以遇到這問題的時候可以用這種方式解決。
硬連結檔案:
ln指令可以制作硬連結,硬連結有點類似于複制了原檔案但又不完全是,因為這個複制不會占用磁盤空間,因為原檔案和硬連結檔案的inode号是一樣的,使用的是同一個inode号。
是以原檔案和硬連結檔案實際上是同一個檔案,當原檔案的内容改動時,硬連結的檔案也會跟着改動,同樣的硬連結的檔案内容改動時,原檔案的内容也會跟着改動。硬連結隻支援對檔案進行制作,不能對目錄進行制作:
<a href="https://s4.51cto.com/wyfs02/M02/08/60/wKiom1ngca2xlJJoAAFYlLBFY-U152.png" target="_blank"></a>
<a href="https://s4.51cto.com/wyfs02/M00/08/60/wKiom1ngca-yFFF1AAXMON1sDes968.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M00/A7/16/wKioL1ngbvnRUs_qAAIh5nEtDAU442.png" target="_blank"></a>
硬連結的特性:兩個檔案互相為硬連結,并且資訊一模一樣,使用的inode号也是同一個,硬連結的原檔案即便被删除了也不會影響到硬連結檔案,因為原檔案的inode還在被硬連結檔案指向着。
這個inode号就像一個被多個包裝盒包裝着的氣體,這些包裝盒就是原檔案和硬連結檔案,不管你有多少個包裝盒,隻要最後一個包裝盒沒有被撕掉,那麼這個氣體就不會消失,如果最後一個包裝盒都被撕掉了這個氣體自然就會流走了。是以不管删除的是原檔案還是硬連結檔案,隻要還剩最後一個檔案指向着那個inode号,那麼這個檔案就還存在,如果最後一個指向那個inode号的檔案都被删除了,那麼這個檔案就是被徹底删除了。
硬連結檔案不會占用磁盤空間,因為它和原檔案指向的是同一個inode,而且硬連結不允許跨目錄分區,因為每個目錄分區都有自己的inode體系:
<a href="https://s4.51cto.com/wyfs02/M02/A7/17/wKioL1ngbvrTuyz5AAEeGuqr2UY641.png" target="_blank"></a>
本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/1972113,如需轉載請自行聯系原作者