set_uid權限是針對二進制可執行文件,使文件在執行階段具備文件全部者的權限。node
用途說明:ui
例如passwd命令,能夠看到可執行文件passwd的權限爲rwsr-xr-x,其中的s就是set uid權限,其餘非root用戶的權限都是r-x能夠執行能夠讀,沒有寫權限,可是普通用戶是能夠本身改密碼的#passwd root/colin,改密碼就寫了passwd這個文件了,這是爲何呢?緣由就是passwd文件有set uid權限,可讓普通用戶在執行passwd這個文件的時候有文件全部者root用戶的權限,而用戶root對passwd文件的權限是rwx,因此普通用戶在執行passwd的時候就對passwd有了rwx權限,能夠寫passwd了。spa
#su - colin命令將身份切換到用戶colin,而後用ls查看/root/目錄的內容發現權限不夠,由於/root/目錄普通用戶權限是---,而ls命令普通用戶權限是r-x沒有set uid權限;it
切換會root用戶,用#chmod u+s /bin/ls命令給/bin/ls命令添加上set uid權限;test
切換回普通用戶,再使用ls命令查看/root/就有權限查看了。基礎
#chmodd u-s filename (去除set uid權限)file
切換回root用戶,去掉set uid權限;權限
#chmod u-s /bin/ls二進制
用#chmod u=rws /bin/ls改文件權限後發現權限變成了rwS,有個大寫的S而不是小寫的s,這是由於u+s是在原來x可執行權限的基礎上加上的set uid,而u=rws是直接把rwx權限改成了rws沒有了x可執行權限。密碼
這時候root用戶仍是能夠執行,由於set uid權限自己就是設置的可執行二進制文件,自己就帶有可執行屬性
普通用戶可執行,由於普通用戶自己權限是r-x,本就有可執行權限,只不過在執行瞬間擁有了root用戶權限;
set gid能夠用在目錄也能夠用在文件;
用在文件上時:set gid相似於set uid是普通用戶執行的時候臨時擁有所屬組group的權限。
用在目錄上時:目錄被設置這個權限後,任何用戶在這個目錄的下建立的文件或目錄,都具備和該目錄所屬組相同的組;
用在文件上時:set gid相似於set uid是普通用戶執行的時候臨時擁有所屬組group的權限
用在目錄上時:設置在目錄上的時候,任何用戶在次目錄下建立的文件或目錄都具備和該目錄所屬組想用的組;
首先把/test/目錄添加set gid,而後把他的所屬組改成colin
而後在目錄下以root用戶身份建立文件和子目錄,發現用戶組都是colin
去掉set gid後再建立的文件和目錄的所屬組就再也不是colin,變成了用戶原本屬於的用戶組;
stick_bit:被理解爲防刪除位。
文件可否被用戶刪除,主要取決於該文件所在目錄是否對該用戶有寫權限。若是沒有寫權限,這個目錄下的文件該用戶就不能刪除,同時也不能添加新的文件。若是但願用戶只能添加文件可是不能刪除目錄下的其餘文件(用戶本身建立的文件本身是能刪除的),就能夠設置stick_bit。設置完後,用戶對目錄有寫權限可是不能刪除其餘用戶的文件。
只有文件的建立者和root能夠刪除。
注意:刪除一個文件看的是文件所在目錄的操做權限,不是文件自己的權限。
查看/tme/目錄自己的屬性發現末尾有個t權限,這就是stick_bit
用colin用戶在/tmp/目錄下建立目錄aming/建立文件aming/am1.txt
切換到colin2用戶,發現能夠改am1.txt可是不能刪除。這就是防止刪除。
軟鏈接或符號鏈接(symbolic link),當讀取這個鏈接文件的時候,會把讀取行爲轉發到文件軟鏈接的文件上。
舉例:有源文件被鏈接文件a,而後建立一個軟鏈接文件b(b -> a,b軟鏈接到a)。
讀取b,讀取動做就轉發到a,就會讀取a。
刪除a,b不會被刪除,可是再讀取b,就沒法打開,由於被鏈接文件a不存在了。
刪除b,a不會收到任何影響。
兩個文件的節點號是同樣的,可是軟鏈接文件佔用的空間只有7Byte,而源文件就很大了。
#ln [-s] [來原文件(被鏈接文件,佔空間大的)] [目的文件(軟鏈接文件,佔空間小的)]
創件軟鏈接文件/root/111/test1.log,鏈接到源文件/tmp/test.log,這裏由於跨目錄了,因此是決絕路徑軟鏈接。
不跨目錄的狀況下就能夠建立相對路徑軟鏈接了。
移走/tmp/test.log後,/root/111/下的test1.log會變紅失效,而且原文件/tmp/test.log在閃爍說明不存在。
把/tmp/aming/test.log移動回/tmp/test.log後,/root/111/下的test1.log就又能找到路徑恢復了。
硬鏈接不支持對目錄作硬鏈接,只能對文件作硬鏈接。
#ln [源文件] [目的文件]
雖然這裏寫的是源文件和目標文件,可是兩個文件是相互爲硬鏈接文件,刪除任何一個都沒影響。
由於硬鏈接的inode號都相同,因此多個硬鏈接並不佔用多個磁盤空間,而是隻佔用一份的磁盤空間。
硬鏈接不能夠給目錄作硬鏈接。
硬鏈接只能在當前分區作硬鏈接,不能跨分區作硬鏈接。
軟鏈接,1_soft.txt不但文件很小,並且時間是當前建立時間,inode節點號不一樣,有鏈接符號;
硬鏈接,1_hard.txt文件大小和源文件同樣,時間也和源文件樣,inode節點號也同樣,也沒有鏈接符號。
當向硬鏈接文件中的任何一個寫入後,兩個硬鏈接文件會同時都改變。
硬鏈接不能夠給目錄作硬鏈接。
硬鏈接只能在當前分區作硬鏈接,不能跨分區作硬鏈接。
顯示磁盤分區狀況。
下面這個硬鏈接雖然不是在相同目錄下,可是都在/分區(根分區)中;
若是咱們把/boot分區下/boot/路徑中的文件作硬鏈接到/分區(根分區)下的/tmp/中就會提示無效的跨設備鏈接。