1. 程式人生 > >九、特殊權限set_uid、set_gid、stick_bit;軟鏈接文件;硬鏈接文件

九、特殊權限set_uid、set_gid、stick_bit;軟鏈接文件;硬鏈接文件

chm 經驗 服務 u+ 放置 root權限 set 意義 直寫

九、特殊權限set_uid、set_gid、stick_bit;軟鏈接文件;硬鏈接文件

(一)特殊權限set_uid(針對文件)

set_uid:該權限針對二進制可執行文件,使文件在執行階段具有文件所有者的權限。比如,passwd這個命令就具有該權限。當普通用戶執行passwd命令時,可以臨時獲得root權限,從而更改密碼。通俗的來說,就是普通用戶在編輯這個文件的時候才會獲得root用戶的改文件的權力。

設置這個命令的前提是這個文件需要是二進制文件,且須為可執行文件。

二進制文件:如ls命令,passwd命令這些命令的文件就是二進制文件。

更改密碼的文件:/etc/shadow

# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd

紅色背景文件,s權限,代表set_uid權限。

如何給文件授權s權限:u代表uid

# chmod u+s /usr/bin/ls

# ls -l /usr/bin/ls

-rwsr-xr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

此時的s為小寫。

去掉這個權限:

# chmod u-s /usr/bin/ls

將命令改u-s即可。

另外一種寫法:

# chmod u=rws /usr/bin/ls

# ls -l /usr/bin/ls

-rwSr-xr-x. 1 root root 117656 11月 6 2016

/usr/bin/ls

此時的s權限為大寫S,這是因為沒有root沒有了x權限,再命令:

# chmod u+x /usr/bin/ls

即可。大寫的S變為小寫的s。

目錄也可以加s權限,但是目錄不是可執行的文件,因此加s權限無意義。

(二)特殊權限set_gid(可作用文件,也可作用目錄)

set_gid:該權限可以作用在文件上(二進制可執行文件),也可以作用在目錄上。當作用在文件上時,其功能和set uid一樣,會使文件在執行階段具有文件所屬組的權限。目錄被設置這個權限後,任何用戶在此目錄下創建的文件都具有和該目錄所屬組相同的組。

如何設置這個權限,命令:

# chmod g+s /usr/bin/ls

# ls -l /usr/bin/ls

-rwxr-sr-x. 1 root root 117656 11月 6 2016 /usr/bin/ls

×××背景文件,s權限在組權限的位置段。

# mkdir 123

# chmod g+s 123

# chown :user1 123

# touch 123/678

# ls -l 123/

總用量 0

-rw-r--r--. 1 root user1 0 1月 31 20:28 678

此處,123目錄下新建的678文件所屬組自動改為了user1。

(三)特殊權限stick_bit(sticky bit)

stick_bit:可理解為防刪除位。文件是否可以被某用戶刪除,主要取決於該文件所在的目錄是否對該用戶具有寫權限。若沒有寫權限,則這個目錄下的所有文件都不能刪除,同時也不能添加新文件。若希望用戶能添加文件但不能刪除目錄下其他用戶的文件,則可以對父目錄增加該權限。設置該權限後,用戶對目錄具有了寫權限,但不能刪除其他用戶的文件。防止別人刪除自己的文件,root用戶除外。

當有特殊權限時,第一位數字可以是0、1(--t)、2(-s-)、3(-st)、4(s--)、5(s-t)、6(ss-)、或7(sst)。

# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd

# ls -ld /tmp/

drwxrwxrwt. 14 root root 4096 1月 31 20:45 /tmp/

回顧passwd,它是s--,所以是4;而/tmp/是--t,所以是1 。

passwd用數字表示為4755;/tmp/用數字表示為1777。

格式和set_uid和set_gid同理;chmod o+t dirname。

(四)軟鏈接文件(類似於Windows的快捷方式)

軟鏈接文件:與硬鏈接不同,軟鏈接是建立一個獨立的文件,當讀取這個鏈接文件時,它會把讀取的行為轉發到該文件所鏈接的文件上。可以節省空間,既可以鏈接文件,也可以鏈接目錄。做軟鏈接盡量使用絕對路徑。可以軟鏈接文件,也可以目錄,也可以跨分區。

制作軟鏈接的命令:

# ln -s [源文件] [軟鏈接文件]

ln命令格式:ln [-n] [源文件] [目的文件]

常用選項是-s。若不加-s就是建立硬鏈接,加上-s就是建立軟鏈接。

經驗:若有一個服務A會一直寫數據到B文件中,快把這個B文件的分區寫滿了,可以把B文件復制一份到根分區裏,這裏復制後的文件稱為B1,然後再刪除B文件,再建立一個軟鏈接,將B1軟鏈接到B來。

(五)硬鏈接文件

硬鏈接文件:當系統要讀取一個文件時,會先讀iNode信息,再根據iNode中的信息到塊區域將數據取出來。硬鏈接是直接再建立一個iNode鏈接到文件放置的塊區域,即進行硬鏈接時該文件內容沒有任何變化,只是增加了一個指向這個文件的iNode,並不會額外占用磁盤空間。

格式同軟鏈接格式一樣。

兩個限制:(僅支持文件)

1)不能跨文件系統,因為不同的文件系統有不同的iNode table;

2)不能鏈接目錄。


九、特殊權限set_uid、set_gid、stick_bit;軟鏈接文件;硬鏈接文件