文件屬性權限及其權限設置

1. linux的系統管理員很重要的任務就是管理自己服務器的文件,對於權限設置等級森嚴的linux文件系統,文件系統的訪問權限管理自然也是linux管理員必不可少的一項技能。

linux中文件的基本權限中:被分爲三大項:文件擁有者,文件擁有組,其他人。

每一項中,用三位八進制的數字來代表文件是否可讀,是否可寫,是否可執行。並根據用戶不同可以設置不同的umask值,來屏蔽文件的權限,umask值位數等於文件的權限位數,當umask的值爲1,表示該位的權限就應該屏蔽掉。

後來在使用過程中發現,除了上面的幾種分類之外,往往會出現第四種,第五種人,比如雖然是同一個組,但是權限卻不能要求一樣,或者後一個屬於其他人的分組的一個人權限卻要求更大,還有就是比如linux的密碼文件,對於系統中的密碼文件對於普通用戶是不應該可見或更改的,但是在系統某些普通用戶登錄時又必須訪問該文件,於是便出現了,文件的特殊權限以及文件的訪問控制ACL

2. umask工作原理及其配置:

umask是從最大權限中屏蔽掉相應的權限位,從而得到相應的權限。

對於每個用戶都有其默認的umask值的設定,對於rootumask值較大,默認022,其他人umask較小,因爲root權限較大,umask值越大,屏蔽掉的權限也越多,默認創建的文件權限也就越小,對於系統來說,文件系統權限越小,相對來說也就是更高的安全。umask計算時可以用下面的方法計算:

默認權限=最大權限位 – umask屏蔽位。

上面的計算是目錄時,最大權限是777,文件時最大權限是666,然後與umask位做差運算,如果是文件則結果就是文件的權限,如果是目錄時則要看每一位的數值是奇數還是偶數,如果是奇數就需要該位上加一,偶數位則不變。

 

示例:

 [root@centos7 ~]# ll f4.txt cd
-rwxr-xr-x. 1root root 0 Aug 3 10:33 cd
-rw-r--r--. 1root root 12 Jul 27 10:35 f4.txt

  有上面的文件可知f4.txt文件權限位中(第一個-表示是文件類型,不屬於文件權限位),每三個位表示一端,每一段中又分別是rwx三中權限,-表示沒有該權限位被屏蔽掉了。每一位若用二進制數字表示的話r100)表示4w010)表示2x001)表示1,文件最大umask權限默認是666是因爲默認屏蔽掉x權限,表示執行的x權限對於系統來說有安全隱患,所以默認屏蔽掉了。

         umask值查看與設定:

[root@centos7 ~]# umask
0022
[root@centos7 ~]# umask -p
umask 0022
[root@centos7 ~]# umask -S
u=rwx,g=rx,o=rx

上面的三種查看方法當中,第一種沒有加參數,可以直接顯示umask的值,第二種加了-p選項後在umask值前面多了umask字樣,可以用來編寫腳本時使用,比如要把umask的值改變需要改變配置文件每一個用戶的初始化配置文件~/.bashrc當中都有有關umask的值的設定,在/etc/bashrc下面有全局設定,在配置文件的末尾直接寫umask  0147 便將umask值修改爲0111

umask值計算示例:

如將umask的值改爲0147了此時

         目錄:777-147=630  目錄值算出多少就是多少

         文件:666-147=52(-1)  結果當中有奇數有偶數奇數加一偶數不變(加一是爲了屏蔽掉執行權限)結果爲620

測試結果如下

[root@centos7 ~]# umask 147
[root@centos7 ~]# touch aa
[root@centos7 ~]# ll aa
-rw--w----. 1 root root 0 Aug  3 10:59 aa
[root@centos7 ~]# mkdir aadir
 [root@centos7 ~]# ll aadir/ -d
drw--wx---. 2 root root 6 Aug  3 11:00 aadir/

可知,結果與計算相符,計算正確

注意:

文件權限是需要和文件系統關聯的,假如將fat文件系統格式化的分區,該分區將不支持文件系統權限的,比如用fat32的優盤掛載至文件系統,通過lsblk列出塊設備,df –T 查看文件系統確認分區格式和掛載點,修改文件權限,切至普通用戶就會發現文件權限修改使沒有生效的

3. 文件系統的特殊權限:SUID,SGID,STICKY

三種文件系統權限的都是文件系統權限的擴展,分別簡寫爲sst。在通過ls  -l查看文件時第一位就是文件的特殊權限三個字母分別對應於原來的rwx三位,數值也是421

三種權限的含義:

SUID:對用戶有效,並且需要是二進制的可執行文件,對於普通文件和腳本文件無效,當用戶執行具有suid的可執行文件時,該用戶將繼承擁有該程序擁有者的權限執行該程序(可執行文件的運行身份是以發起該進程的用戶身份的)

如:

[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# chmod u+s `which vim`
[root@centos7 ~]# ll `which vim`
-rwsr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim
[root@centos7 ~]# su - jack
Last login: Tue Aug  2 21:43:24 CST 2016 on pts/1
[jack@centos7 ~]$ ll /etc/shadow
----------. 1 root root 1309 Aug  2 21:47 /etc/shadow
 [jack@centos7 ~]$ vim /etc/shadow
[jack@centos7 ~]$ echo $?
0
[jack@centos7 ~]$ exit
logout
[root@centos7 ~]# chmod u-s `which vim`
[root@centos7 ~]# ll `which vim`
-rwxr-xr-x. 1 root root 2289656 Jun 10  2014 /usr/bin/vim

通過給/usr/bin/vim添加suid權限,普通用戶可以編輯對於任何用戶都不能查看或編輯的shadow文件,最後給vim減去suid權限。

 

SGID:類似於suid,目標也是針對可執行的二進制文件有效,對擁有sgid權限的程序,可以擁有可執行文件的組內的權限,使用較少,用法與suid類似,此處不在贅述

sgid作用在目錄上的特殊功能:當對目錄擁有sgid位時,該目錄內新建的文件或目錄的所屬組自動集成該目錄的所屬組

示例:在添加了sgiddir目錄中,其他用戶創建的目錄和文件都會變成jack所屬組

[root@centos7 testdir]# mkdir dir
[root@centos7 testdir]# chown jack.jack dir
[root@centos7 testdir]# chmod g+s dir
[root@centos7 testdir]# cd dir
[root@centos7 dir]# touch a.txt
[root@centos7 dir]# mkdir a_dir
[root@centos7 dir]# ll
total 0
drwxr-sr-x. 2 root jack 6 Aug  3 16:02 a_dir
-rw-r--r--. 1 root jack 0 Aug  3 16:02 a.txt

 

sticky:又叫粘滯位,該位在
普通文件的sticky位會被linux內核忽略,目錄的sticky位表示這個目錄裏的文件只能被ownerroot刪除 。粘滯位出現執行許可的位置上,用t表示。但是該目錄下的目錄不繼承該權限,要再設置纔可使用。   

示例:tmp目錄

[root@centos7 ~]# ll /tmp -d
drwxrwxrwt. 24 root root 4096 Aug  3 11:22 /tmp

 
那麼原來的執行標誌x到哪裏去了呢? 系統是這樣規定的, 假如本來在該位上有x, 則這些特別標誌 (suid, sgid, sticky) 顯示爲小寫字母 (s, s, t).
 否則, 顯示爲大寫字母 (S, S, T)     

 

chattr:在文件系統的層面爲文件添加屬性,保護特殊文件,防止誤操作,在系統中root可以把本已對任何人都沒有權限的文件,執行操作

在操作系統層面上,文件的屬性有:

 

a:讓文件或目錄僅供附加用途;

b:不更新文件或目錄的最後存取時間;

i:不得任意更動文件或目錄;

u:預防意外刪除。
示例:

[root@centos7 testdir]# ls
adir  a.txt
[root@centos7 testdir]# chattr +a  a.txt //添加a屬性
[root@centos7 testdir]# chattr +i adir/
[root@centos7 testdir]# echo aa > a.txt//不能修改
-bash: a.txt: Operation not permitted
[root@centos7 testdir]# echo aa >> a.txt//只能增加內容
[root@centos7 testdir]# rm -rf adir/  //不能刪除目錄
rm: cannot remove ‘adir/’: Operation not permitted


 

文件訪問控制列表ACL(Access ControlListACL)對文件權限進行精確匹配,包括組和用戶,都可以進行匹配:

選項:

 

-b,--remove-all:刪除所有擴展的acl規則,基本的acl規則(所有者,羣組,其他)將被保留。

-m給文件添加acl規則

-M 根據規定好的acl格式的文件(存放acl規則的文件),爲需要添加acl的文件添加acl

-x 給文件移除規則

-X 類似於-M也是根據文件移除acl權限

 

 

-m和-x後邊跟以acl規則。多條acl規則以逗號(,)隔開。選項-M和-X用來從文件或標準輸入讀取acl規則。選項--set和--set-file用來設置文件或目錄的acl規則,先前的設定將被覆蓋。 選項-m(--modify)和-M(--modify-file)選項修改文件或目錄的acl規則。 選項-x(--remove)和-X(--remove-file)選項刪除acl規則。
當使用-M,-X選項從文件中讀取規則時,setfacl接受getfacl命令輸出的格式。每行至少一條規則,以#開始的行將被視爲註釋。 當在不支持ACLs的文件系統上使用setfacl命令時,setfacl將修改文件權限位。如果acl規則並不完全匹配文件權限位,setfacl將會修改文件權限位使其儘可能的反應acl規則,並會向standard error發送錯誤消息,以大於0的狀態返回

 

 


一般示例:

[root@centos7 testdir]# ll
total 4
drwxr-xr-x. 2 root root 6 Aug  3 16:17 adir
-rw-r--r--. 1 root root 9 Aug  3 16:31 a.txt
[root@centos7 testdir]# setfacl -m u:jack:rwx a.txt //給用戶jack添加rwx權限
[root@centos7 testdir]# getfacl a.txt //查看文件的acl權限
# file: a.txt
# owner: root
# group: root
user::rw-
user:jack:rwx
group::r--
mask::rwx
other::r—
[root@centos7 testdir]# setfacl -x u:jack:  a.txt 
[root@centos7 testdir]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
[root@localhost ~]# getfacl ./test.txt 
# file: test.txt 
# owner: root 
# group: admin user::rw- 
user:john:rw- group::rw- 
group:dev:r-- mask::rw- 
other::r—


前面三個以#開頭的定義了文件名,file owner和group。

user::rw- 定義了ACL_USER_OBJ, 說明file owner擁有read and write permission

user:jack:rwx 定義了ACL_USER,這樣用戶jack就擁有了對文件的讀寫執行權限,實現了我們一開始要達到的目的

group::rw- 定義了ACL_GROUP_OBJ,說明文件的group擁有read and write permission group:dev:r-- 定義了ACL_GROUP,使得dev組擁有了對文件的read permission mask::rw- 定義了ACL_MASK的權限爲read and write other::r-- 定義了ACL_OTHER的權限爲read


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章