鳥哥筆記-專題一:Linux文件的權限rwx、特殊權限sst、隱藏權限ia


編輯

鳥哥筆記-專題一:Linux文件的權限rwx、特殊權限sst、隱藏權限ia

==========================================================================================

目錄:

一、Linux文件和目錄的權限

二、Linux文件和目錄的特殊權限

三、Linux文件和目錄的隱藏權限

==========================================================================================

正文:

一、Linux文件和目錄的權限
1、可讀可行可執行(r,w,x),目錄文件和鏈接(d,-,l)
Linux文件權限的內容我們可以知道一個文件有若干個屬性, 包括讀寫執行(r, w,x)等基本權限,及是否為目錄 (d) 與文件 (-) 或者是鏈接文件 (l) 等等的屬性!
形如:
drwxrwxrwx 777
r—權重4
w—權重2
x—權重1

7=4+2+1,即為有rwx權限。


2、要修改屬性的方法(chmod,chown,chgrp)

修改權限
chmod 770 1.txt
chmod u+w 1.txt
修改擁有者、組
chown lisi.myweb 1.txt
只修改所屬組可以用
chgrp myweb 1.txt

小結:

chmod:改變文件的權限,SUID,SGID,SBIT等等的特性。
chown:改變文件擁有者。
chgrp:改變文件所屬群組。

3、默認權限(umask)
umask 就是指定 “目前使用者在創建文件或目錄時候的權限默認值”, 那么如何得知或設置 umask 呢?
(1)得知默認權限umask的值:
[root@study ~]# umask
0022 # 與一般權限有關的是后面三個數字!
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

如果以上面的例子來說明的話,因為 umask 為 022 ,所以 user 並沒有被拿掉任何權限,不過 group 與 others 的權限被拿掉了 2 (也就是 w 這個權限),那么當使用者:

創建文件時:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
創建目錄時:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

root用戶的umask默認值為022,普通用戶的umask默認值為002。

(2)修改umask的值:
當我們需要新建文件給同群組的使用者共同編輯時,那么 umask 的群組就不能拿掉 2 這個 w 的權限! 所以啰, umask 就得要是 002 之類的才可以!這樣新建的文件才能夠是 -rw-rw-r-- 的權限模樣喔! 那么如何設置 umask 呢?簡單的很,直接在 umask 后面輸入 002就好了!
[root@study ~]# umask 002
[root@study ~]# touch test3
[root@study ~]# mkdir test4
[root@study ~]# ll -d test[34]           # 中括號 [ ] 代表中間有個指定的字符,而不是任意字符的意思
-rw-rw-r--. 1 root root 0 6月 16 01:12 test3
drwxrwxr-x. 2 root root 6 6月 16 01:12 test4

 

二、Linux文件和目錄的特殊權限
文件特殊權限: SUID, SGID, SBIT
特殊權限( s,s,t )

小結SUID、SGID、SBIT
1、SUID-4s的作用是B運行二進制文件時,獲得其擁有者A的權限。舉例/usr/bin/passwd的權限狀態:“-rwsr-xr-x root root ”,其他用戶B運行該二進制程序時,具有擁有者A root的權限rwx。
2、SGID-2s的作用是2種
(1)對二進制文件,A運行時,A獲得其群組G的權限。舉例/usr/bin/locate的權限狀態:“-rwx--s--x 1 root slocate”,對/var/lib/mlocate/mlocate.db:“-rw-r----- 1 root slocate”有slocate組的r--權限
(2)對文件夾,用於專案開發,不同用戶A、B拉入同一myproject組,在同一個project文件夾下“drwxrwx--- 2 root project”,A可以開發B新建的文件。
3、SBIT-1t的作用是防止A用戶刪除B用戶的文件。例如:/test1權限為“-rwxr-xr-t 1 root root”只有擁有者和root才可以刪除。

 

1、Set UID (s表示,僅對二進制文件有用)
(1)SUID針對二進制文件:chmod 4551 xxx
/usr/bin/passwd 這個文件的權限狀態:“-rwsr-xr-x”,此時就被稱為Set UID,簡稱為 SUID的特殊權限。

SUID權限僅對二進制程序(binary program)有效;
執行者對於該程序需要具有x的可執行權限;
本權限僅在執行該程序的過程中有效(run-time);
執行者將具有該程序擁有者(owner)的權限。

(2)SUID應用場景:
Linux系統中,所有帳號的密碼都記錄在/etc/shadow這個文件里面,這個文件的權限為:“---------- 1 root root”,意思是這個文件僅有root可讀且僅有root可以強制寫入而已。
明明/etc/shadow就不能讓dmtsai這個一般帳戶去存取的,為什么dmtsai還能夠修改這個文件內的密碼呢?這就是SUID的功能啦!

1.dmtsai對於/usr/bin/passwd 這個程序來說是具有x權限的,表示dmtsai能執行passwd;
2.passwd的擁有者是root這個帳號;
3.dmtsai執行passwd的過程中,會“暫時”獲得root的權限;
4./etc/shadow就可以被dmtsai所執行的passwd所修改。

 

 

 另外,SUID 僅可用在binary program 上, 不能夠用在 shell script 上面!這是因為 shell script 只是將很多的 binary 可執行文件叫進來執行而已!所以 SUID 的權限部分,還是得要看shell script 調用進來的程序的設置, 而不是 shell script 本身。當然,SUID 對於目錄也是無效的~這點要特別留意。

 

2、Set GID(第二個s表示,對二進制文件、目錄有用)
(一)對二進制文件
(1)SGID如果是對二進制文件來說,SGID有如下的功能:
  1、SGID對二進制程序有用;
  2、程序執行者對於該程序來說,需具備x的權限;
  3、執行者在執行的過程中將會獲得該程序群組的支持!

(2)SGID應用場景:(針對二進制文件:chmod 2711 xxx)如:/usr/bin/locate
  [root@VM_0_17_centos ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
  -rwx--s--x 1 root slocate 40K Apr 11 2018 /usr/bin/locate
  -rw-r----- 1 root slocate 6.8M Mar 23 03:30 /var/lib/mlocate/mlocate.db

(二)對目錄
(1)如果是對文件夾來說,SGID有如下功能:
  1、使用者若對於此目錄具有r與x的權限時,該使用者能夠進入此目錄;
  2、使用者在此目錄下的有效群組(effective group)將會變成該目錄的群組;
  用途:若使用者在此目錄下具有w的權限(可以新建文件),則使用者所創建的新文件,該新文件的群組與此目錄的群組相同。
對於專案開發來說是非常重要的!因為這涉及群組權限的問題。

(2)SGID應用場景:(針對目錄:chmod 2770 xxx)
假設系統中有兩個帳號,分別是alex與arod,這兩個人除了自己群組之外還共同支持一個名為project的群組。假設這兩個用戶需要共同擁有/srv/ahome/ 目錄的開發權,且該目錄不許其他人進入查閱。請問該目錄的權限設置應為何?
  目標:了解到為何專案開發時,目錄最好需要設置SGID的權限!
  前提:多個帳號支持同一群組,且共同擁有目錄的使用權!
  需求:需要使用root的身份來進行chmod,chgrp等幫用戶設置好他們的開發環境才行!這也是管理員的重要任務之一!
1)要先制作出這兩個帳號的相關數據:
  [root@study ~]# groupadd project # 增加新的群組
  [root@study ~]# useradd -G project alex # 創建alex帳號,且支持project
  [root@study ~]# useradd -G project arod # 創建arod帳號,且支持project
  [root@study ~]# id alex # 查閱alex 帳號的屬性
  uid=1001(alex) gid=1002(alex) groups=1002(alex),1001(project) # 確實有支持!
  [root@study ~]# id arod
  uid=1002(arod) gid=1003(arod) groups=1003(arod),1001(project) # 確實有支持!
2)然后開始來解決我們所需要的環境:
①首先創建所需要開發的專案目錄
  [root@study ~]# mkdir /srv/ahome
  [root@study ~]# ll -d /srv/ahome
  drwxr-xr-x. 2 root root 6 Jun 17 00:22 /srv/ahome
②從上面的輸出結果可發現alex與arod都不能在該目錄內創建文件,因此需要進行權限與屬性的修改。 由於其他人均不可進入此目錄,因此該目錄的群組應為project,權限應為770才合理。
  [root@study ~]# chgrp project /srv/ahome
  [root@study ~]# chmod 770 /srv/ahome
  [root@study ~]# ll -d /srv/ahome
  drwxrwx---. 2 root project 6 Jun 17 00:22 /srv/ahome
  # 從上面的權限結果來看,由於 alex/arod 均支持 project,因此似乎沒問題了!
  但是,alex在/srv/ahome目錄下創建的文件的群組是alex,arod並能查看和編輯!
③加入 SGID的權限在里面
  [root@study ~]# chmod 2770 /srv/ahome
  [root@study ~]# ll -d /srv/ahome
  drwxrws---. 2 root project 17 Jun 17 00:23 /srv/ahome
  現在再使用alex去創建一個文件,並且查閱文件權限。發現工作組編程了project。到此,專案開發權限設置大功告成。
  此目錄的權限最好是“2770”,所屬文件擁有者屬於root即可,至於群組必須要為兩人共同支持的project 這個群組才行!

3、Sticky Bit(t表示,僅對目錄有用)
這個 Sticky Bit, SBIT 目前只針對目錄有效,對於文件已經沒有效果了。SBIT 對於目錄的作用是:
當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時;
當使用者在該目錄下創建文件或目錄時,僅有自己與 root 才有權力刪除該文件

換句話說:當甲這個使用者於 A 目錄是具有群組或其他人的身份,並且擁有該目錄 w 的權限, 這表示“甲使用者對該目錄內任何人創建的目錄或文件均可進行 "刪除/更名/搬移" 等動作。” 不過,如果將 A 目錄加上了 SBIT 的權限項目時, 則甲只能夠針對自己創建的文件或目錄進行刪除/更名/移動等動作,而無法刪除他人的文件。

舉例來說,我們的 /tmp 本身的權限是“drwxrwxrwt”, 在這樣的權限內容下,任何人都可以在/tmp 內新增、修改文件,但僅有該文件/目錄創建者與 root 能夠刪除自己的目錄或文件。這個特性也是挺重要的啊!你可以這樣做個簡單的測試:
1. 以 root 登陸系統,並且進入 /tmp 當中;
2. touch test,並且更改 test 權限成為 777 ;
3. 以一般使用者登陸,並進入 /tmp;
4. 嘗試刪除 test 這個文件!

 

4、SUID/SGID/SBIT 權限設置
前面介紹過 SUID 與 SGID 的功能,那么如何設置文件使成為具有 SUID 與 SGID 的權限呢?這就需要第五章的數字更改權限的方法了! 現在你應該已經知道數字體態更改權限的方式為“三個數字”的組合, 那么如果在這三個數字之前再加上一個數字的話,最前面的那個數字就代表這幾個權限了!
4 為 SUID
2 為 SGID
1 為 SBIT

假設要將一個文件權限改為“-rwsr-xr-x”時,由於 s 在使用者權限中,所以是 SUID ,因此,在原先的 755 之前還要加上 4 ,也就是:“ chmod 4755 filename ”來設置!此外,還有大 S與大 T 的產生喔!參考下面的范例啦!

[root@study ~]# cd /tmp
[root@study tmp]# touch test # 創建一個測試用空檔
[root@study tmp]# chmod 4755 test; ls -l test # 加入具有 SUID 的權限
-rwsr-xr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 6755 test; ls -l test # 加入具有 SUID/SGID 的權限
-rwsr-sr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 1755 test; ls -l test # 加入 SBIT 的功能!
-rwxr-xr-t 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 7666 test; ls -l test # 具有空的 SUID/SGID 權限
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

最后一個例子就要特別小心啦!怎么會出現大寫的 S 與 T 呢?不都是小寫的嗎? 因為 s 與 t都是取代 x 這個權限的,但是你有沒有發現阿,我們是下達 7666 喔!也就是說, user,group 以及 others 都沒有 x 這個可執行的標志( 因為 666 嘛 ),所以,這個 S, T 代表的就是“空的”啦!怎么說? SUID 是表示“該文件在執行的時候,具有文件擁有者的權限”,但是文件 擁有者都無法執行了,哪里來的權限給其他人使用?當然就是空的啦! ^_^

而除了數字法之外,你也可以通過符號法來處理喔!其中 SUID 為 u+s ,而 SGID 為 g+s ,SBIT 則是 o+t 啰!來看看如下的范例:

# 設置權限成為 -rws--x--x 的模樣:
[root@study tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Jun 16 02:53 test
# 承上,加上 SGID 與 SBIT 在上述的文件權限中!
[root@study tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Jun 16 02:53 test

 

三、Linux文件和目錄的隱藏權限
1、隱藏權限(i,a)
除了基本r, w, x權限外,在Linux傳統的Ext2/Ext3/Ext4文件系統下,我們還可以設置其他的系統隱藏屬性, 這部份可使用 chattr 來設置,而以 lsattr 來查看,最重要的屬性就是可以設置其不可修改的特性!讓連文件的擁有者都不能進行修改! 這個屬性可是相當重要的,尤其是在安全機制上面 (security)!比較可惜的是,在 CentOS 7.x 當中利用 xfs 作為默認文件系統, 但是 xfs 就沒有支持所有的 chattr 的參數了!僅有部份參數還有支持而已!

2、lsattr (顯示文件隱藏屬性)
[root@study tmp]# lsattr attrtest
--S-ia---------- attrtest
使用 chattr 設置后,可以利用 lsattr 來查閱隱藏的屬性。

3、chattr (設置文件隱藏屬性)

chattr +a 1.txt # 設置隱藏屬性a后,可增加數據,但root也無法刪除該文件。
chattr -a 1.txt # 取消隱藏屬性a。

i屬性:均不可改增刪(包括root也不能)。
a屬性:可增,不可改刪(包括root也不能)。
個人認為最重要的當屬 +i 與 +a 這個屬性了。+i 可以讓一個文件無法被更動,對於需要強烈的系統安全的人來說, 真是相當的重要的!里頭還有相當多的屬性是需要 root 才能設置的呢!

4、隱藏屬性設置的通用語法格式

[root@study ~]# chattr [+-=][ASacdistu] 文件或目錄名稱
選項與參數:
+ :增加某一個特殊參數,其他原本存在參數則不動。
- :移除某一個特殊參數,其他原本存在參數則不動。
= :設置一定,且僅有后面接的參數
A :當設置了 A 這個屬性時,若你有存取此文件(或目錄)時,他的存取時間 atime 將不會被修改,可避免 I/O 較慢的機器過度的存取磁盤。(目前建議使用文件系統掛載參數處理這個項目)
S :一般文件是非同步寫入磁盤的(原理請參考[前一章sync](../Text/index.html#sync)的說明),如果加上 S 這個屬性時,當你進行任何文件的修改,該更動會“同步”寫入磁盤中。
a :當設置 a 之后,這個文件將只能增加數據,而不能刪除也不能修改數據,只有root 才能設置這屬性
c :這個屬性設置之后,將會自動的將此文件“壓縮”,在讀取的時候將會自動解壓縮,但是在儲存的時候,將會先進行壓縮后再儲存(看來對於大文件似乎蠻有用的!)
d :當 dump 程序被執行的時候,設置 d 屬性將可使該文件(或目錄)不會被 dump 備份
i :這個 i 可就很厲害了!他可以讓一個文件“不能被刪除、改名、設置鏈接也無法寫入或新增數據!”對於系統安全性有相當大的助益!只有 root 能設置此屬性
s :當文件設置了 s 屬性時,如果這個文件被刪除,他將會被完全的移除出這個硬盤空間,所以如果誤刪了,完全無法救回來了喔!
u :與 s 相反的,當使用 u 來設置文件時,如果該文件被刪除了,則數據內容其實還存在磁盤中,可以使用來救援該文件喔!
注意1:屬性設置常見的是 a 與 i 的設置值,而且很多設置值必須要身為 root 才能設置
注意2:xfs 文件系統僅支持 AadiS 而已

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM