1. 程式人生 > >26期20180607 set_uid stick_bit 軟硬連接

26期20180607 set_uid stick_bit 軟硬連接

軟鏈接硬鏈接特殊權限

6月7日任務

2.18 特殊權限set_uid
2.19 特殊權限set_gid
2.20 特殊權限stick_bit
2.21 軟鏈接文件
2.22 硬連接文件




2.18 特殊權限 set_uid 普通用戶臨時擁有所有者的身份 u.在系統中已經有設置,可以參看passwd命令。


技術分享圖片

  1. 紅色

  2. 前面rws s就是set_uid 權限


技術分享圖片

即使是root在密碼文件裏也是沒有任何權限,但是root是超級管理員所以可以有。但是普通用戶如何改自己的密碼呢?這樣就需要一個權限,set_uid可以讓普通用戶在執行passwd時候就會臨時擁有root的身份,這樣就可以臨時去改密碼。前提是二進制文件比如ls cat

可以讓普通用戶在執行帶紅色權限的那些命令的瞬間被賦予該命令的所有者的權限。


如何給一個文件授權set_uid權限?

比如一個用戶沒有查看root文件夾的權限,也就是ls命令權限不夠

技術分享圖片

這個時候就需要臨時給他加一個可以查看root的權限

chmod u+s /usr/bin/ls

技術分享圖片

改完ls的權限之後,就可以看root目錄了


想去掉這個權限也很簡單

chmod u-s /usr/bin/ls


也可以通過這種模式來寫

chmod u = rws 但是這種因為沒有x權限所以顯示的是S 加上x權限 chmod u+x 即可以正常顯示 s

技術分享圖片


目錄能不能加set_uid權限呢?

可以,但是意義不大



特殊權限 set_gid 普通用戶臨時獲得所有組的權限

作用在組權限位上,相對於set_uid區別是uid是作用於用戶。做個實驗,把g 加上s 看看顏色變成了什麽,同時s在組裏

技術分享圖片

因為本身這個目錄給本組的權限就是可以讀可以進入 所以一旦給g賦予了s的權限,其他用戶就臨時獲得了同組的權限

技術分享圖片

試著把s權限去掉,就馬上看不到了

技術分享圖片

技術分享圖片


正常情況下,root創建的目錄以及文件所屬組都是root 但是當使用g+s的時候 set_gid 在目錄下面創建子文件,子目錄的時候,所屬組會跟著父級目錄保持一致

技術分享圖片


set_gid 不僅可以作用文件也可以作用目錄,當作用在文件上的時候跟set_uid的作用是一樣的,可以讓普通用戶臨時擁有所屬組的身份。

作用在目錄上的時候,創建子目錄和子文件的所屬組和該目錄的所屬組保持一致。




特殊權限 stick_bit 防止別人刪除自己的文件 root除外

技術分享圖片

註意它的權限是rwt 防刪除位

tmp是一個哪個用戶都可以去訪問的目錄,但是誰的文件誰做主。權限是靠父級目錄決定的

要刪除一個文件,你不一定要有這個文件的寫權限,但你一定要有這個文件的上級目錄的寫權限。也就是說,你即使沒有一個文件的寫權限,但你有這個文件的上級目錄的寫權限,你也可以把這個文件給刪除,而如果沒有一個目錄的寫權限,也就不能在這個目錄下創建文件。

舉個例子:

bill用戶創建的文件,其他用戶可以訪問修改但是無法刪除



軟鏈接文件


技術分享圖片

所謂軟鏈接就是存儲路徑。路徑越長,文件越大。軟鏈接可以節省空間,省去了拷貝。


技術分享圖片


如何做軟鏈接?


ln -s 源文件 軟鏈接文件

技術分享圖片


不僅僅是可以軟鏈接文件, 也可以軟鏈接目錄。


盡量使用據對路徑,下面的紅色說明不存在,原因就是使用了相對路徑。使用了絕對路徑之後就沒有問題了。

技術分享圖片



實際工作場景的例子:


df -h 查看磁盤分區

技術分享圖片

假設其中的一個磁盤的內存即將使用完畢,同時還有進程在不停的寫入數據,可能會導致磁盤滿導致問題。

解決辦法:

把寫的文件放到另外的有足夠空間的分區下面。但是前提是不能弄這個文件的路徑。

假設 boot下有一個文件bill.log已經很大了但是還在寫,怎麽操作?

1, 首先把/boot/bill.log拷貝到另一個目錄 cp /boot/bill.log /bill.log

2. 刪掉原來的log文件 rm /boot/bill.log

3. 做軟鏈接 ln -s /bill.log /boot/bill.log

就是說將軟鏈接替換了文件,文件放到其他位置,用軟鏈接繼續工作,但是內容都到了其他位置。





硬鏈接文件

inode ls -i 顯示inode號碼

技術分享圖片

這一列表示了多少個文件使用了相同的inode號


技術分享圖片


硬鏈接:

創建了一個文件,另一個文件和它的inode號一樣,這倆個相互為硬鏈接。

軟鏈接不能刪除,一旦刪除就會出現無法鏈接的情況。但是硬鏈接不受影響。因為互為硬鏈接而且互相都是實打實的存在,刪除一個後,同一個inode號的文件少了一個而已。或者這樣理解,inode才是真正存數據的地方,其他的指向inode都是皮。刪掉一個硬鏈接也只是少了個皮,指向該inode的文件少了一個而已。

硬鏈接再多也不會多站空間,因為inode本身占據空間。所以多少個硬鏈接都沒有影響存儲空間。

不能對目錄做硬鏈接。硬鏈接只能對文件做,但是不能跨分區。


26期20180607 set_uid stick_bit 軟硬連接