文件系統權限管理

1240


權限就是對文件或目錄“加鎖”,有不同權限的人才能進去不同的入口……

一、正常權限

1.1權限的查看

1240


其中rw-r--r--.就是這個文件的權限了,而後邊的root root代表文件的屬主和數組。

我們先來看一下權限用什麼代表:

  • r:讀權限(read)
  • w:寫權限(write)
  • x執行(execute)

所屬:

  • u:屬主
  • g:屬組
  • o:其他人

rw-r--r--9個位,分爲三段,每段三個位,依次爲r,w,x權限,三段分別爲屬主,屬組,其他人三種類別的權限。
屬主具有讀寫權限,屬組有讀權限,其他人有讀權限,如果顯示爲-,則代表該類人沒有此權限。那麼root用戶對此文件有讀和寫的權限,但是沒有執行權限,什麼是執行權限呢,比如說我們的Windows中的exe文件,能雙擊執行的就爲可執行的,那麼linux中,x則代表可執行,一般爲腳本文件,或者是二進制文件(比如說ls命令)。
root組的用戶對這個文件有隻讀權限,也就是不能更改和執行了,。對於不是root用戶,和不屬於root組的用戶,則也是隻有隻讀權限。

那麼如何纔能有自己想有的權限呢,就要所屬用戶或者root用戶來設置了。

1.2權限設置相關命令

權限設置有兩種方法:
1.2.1模式法
對象+-=權限
對象:ugoa——a相當於ugo三種類別的人
權限:rwx

[[email protected] app]#chmod a-x dir/ #去掉dir所有對象的執行權限
[[email protected] app]#ll
drwxr-xr-x. 2 root root   6 May 29 19:48 di2
drw-r--r--. 2 root root   6 May 29 19:48 dir  #dir的全部對象的執行權限已經去掉
[[email protected] app]#chmod u+x dir/ #給屬主添加執行權限
drwxr-xr-x. 2 root root   6 May 29 19:48 di2
drwxr--r--. 2 root root   6 May 29 19:48 dir #已經有屬主執行權限了

還可以複製其他文件的權限

[root@centos7 ~]#chmod --reference=dir dir2   #參考dir的權限,爲dir2設置權限

1.2.2數字法
數字也可以代表權限,r使用4表示,w使用2表示,x使用1表示,1、2、4看着有規律啊,不錯,的確rwx使用二進制表示的話,有權限使用1表示,沒有使用0,那麼如下圖:

1240


具體只要在相應位上有權限,則二進制爲1,則三個位組合起來,再從二進制轉化爲十進制則數字可計算出來權限。

[[email protected] app]#chmod 754 dir/  
#用數字法給dir的屬主賦予rwx權限,屬組爲rx權限,其他人爲只讀r權限
[[email protected] app]#ll
drwxr-xr-x. 2 root root   6 May 29 19:48 di2
drwxr-xr-. 2 root root   6 May 29 19:48 dir

1.3umask

umask值用來消除創建文件時的相應位上的權限(從二進制方面理解);
新建文件: 666 - umask值就是新建文件的默認權限,因爲新建文件默認沒有執行權限的(沒有1權限,所以只要有奇數權限則代表有執行權限),所以得到的權限必定是偶數,如果umask爲奇數,則用666減去將得到奇數權限,如果所得結果某位存在奇數權限,則將其權限+1(因爲從二進制方面理解,如果相應位沒有權限,則多減了1,故要加上1來彌補這個權限);

[root@CentOS7 ~]# umask
0022
[root@CentOS7 ~]# umask 135     #將當前umask設爲135,
[root@CentOS7 ~]# umask
0135       #修改成功
[root@CentOS7 ~]# touch f2
[root@CentOS7 ~]# ls -l f2
-rw-r---w-. 1 root root 0 Jun  3 20:45 f2#按理說666-135=531,但是奇數權限加上1,則成爲642

新建目錄: 777 - umask值就是新建目錄的默認權限;
管理員的umask 是 022
普通用戶的umask是 002

[[email protected] app]#umask  #查看當前用戶的umask值
0022 #root的umask值是002
[[email protected] app]#umask 002 #把當前用戶的umask值改爲002
[[email protected] app]#umask
0002 #修改成功
[[email protected] app]#umask -S #模式方式顯示
u=rwx,g=rwx,o=rx
[[email protected] app]#umask -p #顯示全部,輸出可被程序調用
umask 0002

1.4X權限的理解

X的作用(x權限特殊形式)
針對目錄增加x權限
對文件
1 無執行的文件,不會增加x權限
2 任意三種人有執行權限,也會增加x權限
目錄

[root@CentOS7 ~]# chmod 600 tmp/
[root@CentOS7 ~]# ls -ld /root/tmp/
drw-------. 2 root root 38 Jun  3 16:02 /root/tmp/
[root@CentOS7 ~]# chmod u+X tmp/
[root@CentOS7 ~]# ls -ld tmp/
drwx------. 2 root root 38 Jun  3 16:02 tmp/

文件:

[root@CentOS7 ~]# chmod 000 f1 #去掉文件的所以權限,以便看的更清楚
[root@CentOS7 ~]# ls -l f1
----------. 1 root root 1098 Jun  3 19:34 f1
[root@CentOS7 ~]# chmod u+X f1 #賦予X權限
[root@CentOS7 ~]# ls -l f1 #並沒有權限x被賦予
----------. 1 root root 1098 Jun  3 19:34 f1
[root@CentOS7 ~]# chmod 100 f1#一旦賦予任何一類人x權限
[root@CentOS7 ~]# chmod a+X f1
[root@CentOS7 ~]# ls -l f1
---x--x--x. 1 root root 1098 Jun  3 19:34 f1#則所以位都被賦予x權限

1.5文件與目錄的權限與注意

對目錄的權限意義:
只有讀:只能查看目錄文件列表,不能訪問文件,也不能cd目錄(查看,刪除)
只有執行:可以cd進去,不能ls,可以訪問目錄中的文件。執行是基礎權限
寫權取:配合x權限才生效

二、特殊權限

2.1SUID

SUID權限代表不管是誰執行此程序,將繼承此程序所有者的權限
比如修改密碼命令passwd,因此每個用戶都可以用此命令修改自己的密碼,由於其繼承的是屬主root用戶的權限。

[root@CentOS7 ~]# ll /usr/bin/passwd 
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

創建一個文件,賦予s權限

[root@CentOS7 ~]# touch f3
[root@CentOS7 ~]# ll f3
-rw-r---w-. 1 root root 0 Jun  3 21:17 f3
[root@CentOS7 ~]# chmod u+s f3
[root@CentOS7 ~]# ll f3
-rwSr---w-. 1 root root 0 Jun  3 21:17 f3  #此處爲S權限
#由於其沒有x權限,S並不能代表SUID權限,必須賦予x權限使其成爲可執行程序,此時將自動變爲s
[root@CentOS7 ~]# chmod u+x f3
[root@CentOS7 ~]# ll f3
-rwsr---w-. 1 root root 0 Jun  3 21:17 f3

2.2SGID

SGID作用於目錄或可執行程序,作用於目錄代表在此目錄創建的文件或目錄,默認的屬組繼承此目錄的屬組

[root@CentOS7 ~]# ls -ld tmp/  查看權限
drwx------. 2 root bin 58 Jun  3 21:32 tmp/
[root@CentOS7 ~]# chmod g+s tmp #賦予此目錄的g有s權限
[root@CentOS7 ~]# ll -d tmp
drwx--S---. 2 root bin 58 Jun  3 21:32 tmp
[root@CentOS7 ~]# chmod g+wx tmp
[root@CentOS7 ~]# ll -d tmp
drwx-ws---. 2 root bin 58 Jun  3 21:32 tmp
[root@CentOS7 ~]# touch tmp/  #驗證權限
f1         f2         functions  profile    
[root@CentOS7 ~]# touch tmp/f3
[root@CentOS7 ~]# ll tmp/f3
-rw-r--r--. 1 root bin 0 Jun  3 21:40 tmp/f3  #發現屬組爲bin,成功

2.3Sticky

粘貼位權限,只能作用於目錄上,只有自己才能刪除自己創建的文件.使用t來表示,同樣需要執行權限x,否則表現爲T
有這樣的需求,如果多人合作,希望整個團隊的人都能更改這個目錄的文件,但是這個目錄的文件 不能被其他人刪除,比如說系統的/tmp目錄,這個目錄每個用戶都可以在裏面創建文件,但是不能刪除其他用戶創建的文件,除了root

 ll /tmp -d
drwxrwxrwt. 27 root root 4096 Jun  3 21:40 /tmp


[root@CentOS7 ~]# touch /tmp/f1
[root@CentOS7 ~]# ls /tmp/f1 
/tmp/f1
[root@CentOS7 ~]# ls /tmp/f1  -l
-rw-r--r--. 1 root root 0 Jun  3 21:48 /tmp/f1
[root@CentOS7 ~]# chown xiaoming:xiaoming /tmp/f1
[root@CentOS7 ~]# su - chenxuliang
Last login: Sat Jun  3 21:35:11 CST 2017 on pts/0
[chenxuliang@CentOS7 ~]$ echo "aaa" > /tmp/f1
-bash: /tmp/f1: Permission denied   #當然此處需要賦予其他用戶可w權限。

[chenxuliang@CentOS7 ~]$ rm -f /tmp/f1
rm: cannot remove ‘/tmp/f1’: Operation not permitted
#此處tmp其他用戶擁有rwx權限,卻不能刪除其中的文件,則就是因爲加了粘貼位sticky權限的原因。(刪除文件與文件本身的權限無關)

2.4特殊權限除了可以用模式方法設置,還可以使用數字法

特殊權限:
SUID:4
SGID:2
Sticky:1

[[email protected] app]#ll #查看當前目錄文件列表和文件屬性
drwxr-xr-x. 2 root root  24 May 30 19:46 dir  
[[email protected] app]#chmod 1755 dir/  # 爲dir目錄設置權限,1表示Sticky權限,755表示普通權限
[[email protected] app]#ll #查看當前目錄文件列表和文件屬性
drwxr-xr-t. 2 root root  24 May 30 19:46 dir #在其他用戶權限的x位上出現了t,表示Sticky權限添加成功

2.5特殊權限總結與注意

SUID只能作用於二進制可執行程序,不能作用於目錄,因爲其對應的是程序,程序需要能執行
爲什麼對於一個文件有讀寫執行權限,依然不能刪除呢,因爲刪除文件要看其父目錄是否有權限。刪除的是目錄項中的文件名(詳細請看我的inode博客)

三、ACL權限

3.1爲什麼要有ACL權限

因爲文件權限管理職能對三類人有效,在生產中遠遠不能滿足要求,ACL則應運而生

3.2ACL權限的查看

[root@CentOS7 ~]# getfacl f1
# file: f1
# owner: root
# group: root
user::--x
group::--x
other::--x

3.3ACL權限的設定

  1. setfacl的選項和常用參數
  2. getfacl 文件 或 目錄 #查看文件或目錄的acl權限
  3. setfacl - m u:用戶名:權限 文件或目錄 #可以使用模式方法也可以使用數字方法設置
  4. setfacl - R #R表示遞歸
  5. setfacl - M 配置文件 文件或目錄 #M表示把配置文件裏權限設置給後面的文件或者目錄,你可以先寫好一個權限保存在文件中來批量設置
  6. setfacl - m g:組名:權限 #g表示組
  7. setfacl - m d:u:用戶:rx #d選項表示創建默認權限不影響其他acl權限,加了d之後在目錄下創建的文件都會獲得父目錄的設置默認acl權限
  8. setfacl - k #刪除默認權限
  9. setfacl - x u:用戶 #刪除單個權限
  10. setfacl - X #X和M選線功能相似只不過X是按照文件的內容刪除acl權限
  11. setfacl -b #刪除所有acl權限
  12. setfacl -- set #set選項會把原來的acl設置用新的代替,相當於覆蓋

舉例:

[[email protected] app]#setfacl -m u:admin:rw dir/ #爲admin設置權限
[[email protected] app]#getfacl dir/  #查看權限
# file: dir/
# owner: root
# group: root
user::rwx  
user:admin:rw- #設置的admin的權限
group::r-x  
mask::rwx #mask值是acl權限的上線,mask是除了所有者和其他的之外的人和組的最大權限
#在設置了acl權限之後文件的屬組權限和mask值是綁定的
other::r-x

3.4複製其他文件ACL權限

[email protected] app]#getfacl dir |setfacl -set-file=- dir2

3.5ACL權限的備份與還原

[[email protected] app]#getfacl -R dir > acl.txt #把dir目錄和子文件的acl權限備份至acl.txt文件
[[email protected] app]#setfacl -R --set-file=acl.txt  dir #恢復acl權限
[[email protected] app]#setfacl --restore acl.txt #第二種方法

終於寫完啦,但是這還只是理論上的,還沒有應用於實踐,想要在應用中完美結合,還差的很遠,畢竟文件權限管理是一門基礎的大學問。

發佈了43 篇原創文章 · 獲贊 41 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章