關于文件系統權限的管理

眾所周知的是,一個操作系統,是需要為不同的用戶進行服務的,因為不能讓每個人都以管理員進行操作,這樣做的話,毫無安全性可言,所以我們需要驗證和授權。這就體現了權限的重要性,上一篇我介紹了,那幾個重要的目錄。所以這就步入系統權限的正題了。


文件系統的權限管理:
?? ?普通權限
?? ?特殊權限
?? ?文件的擴展屬性
?? ?FACL(文件系統訪問控制列表)



文件權限的構成:
?? ?使用權:MODE,permission
?? ??? ?三個基本權限:
?? ??? ??? ?r:readable,可讀
?? ??? ??? ?w:writable,可寫
?? ??? ??? ?x:executable,可執行


?? ??? ?目錄文件
?? ??? ??? ?r:可以使用ls命令獲取其中所包含的所有文件的文件名列表;
?? ??? ??? ?w:可以在此目錄中進行文件名修改(創建,刪除,修改);即:可以創建文件名,刪除文件名及修改文件名;
?? ??? ??? ?x:可以使用ls -l命令查看各個文件的屬性信息;在路徑中引用該目錄;

?? ??? ?非目錄文件
?? ??? ??? ?r:可以利用cat類的命令獲取文件中存放的數據信息;
?? ??? ??? ?w:可以修改(添加,修改,刪除,覆蓋)文件中所存放的數據信息
?? ??? ??? ?x:可以將文件發起為進程;

獲取使用權和所有權的相關信息:
?? ?ls -l[d] /PATH/TO/SOMEFILE

[root@localhost?~]#?ls?-l?/tmp/test
總用量?0
-rw-r--r--.?1?root?root?0?11月??1?19:32?a
-rw-r--r--.?1?root?root?0?11月??1?19:32?b
-rw-r--r--.?1?root?root?0?11月??1?19:32?c
-rw-r--r--.?1?root?root?0?11月??1?19:32?d
-rw-r--r--.?1?root?root?0?11月??1?19:32?e
-rw-r--r--.?1?root?root?0?11月??1?19:32?f

rwxr-xr-x:三個權限位(屬主/所有者,屬組/所屬組,其他用戶)
?? ?屬主權限:rwx,此權限位標識為user,簡寫u;
?? ?屬組權限:r-x,此權限位標識為group,簡寫為g;
?? ?其他用戶權限:r-x,此權限位標識為other,簡寫為o;

?? ?所有權限位可以統一用all標識,簡寫為a;

?? ?注意:"-"表示在該權限位上不具備指定權限;

?? ?rwx組合稱為"權限標識三元組";


?? ?數字權限標識:二進制數字標識,在對應權限位上有權限則為1,無權限則為0;

?? ?---:000?? ??? ?0
?? ?--x:001?? ??? ?1
?? -w-:010?? ??? ?2
?? -wx:011?? ??? ?3
??? r--:100?? ??? ?4
?? ?r-x:101?? ??? ?5
?? rw-:110?? ??? ?6
?? rwx:111?? ??? ?7

?? ?使用符號標識權限和數字表示權限的區別:
?? ??? ?1.使用符號標識法可以只標識某個特定的權限位,也可以同時標識所有的權限位;
?? ??? ??? ?示例:
?? ??? ??? ??? ?u=rx;ug=rwx;u=rwx,g=rx,o=r;a=rwx
?? ??? ?2.使用數字標識法只能同時標識所有權限位;
?? ??? ??? ?示例:
?? ??? ??? ??? ?755;644;7 == 007; 75 == 075

修改文件的使用權:
?? ?chmod - change mode
?? ?格式:
?? ??? ?chmod [options]... mode[,MODE] file...
?? ??? ?chmod [options]... OCTAL -MODE FILE..
?? ??? ?chmod [options]... reference=RFILE FILE...

?? ?MODE:符號權限標識法:
?? ??? ?u,g,o,a:表示權限位;
?? ??? ?+,-,=:表示授權方式;
?? ??? ??? ?+:表示在指定的權限位上增加指定權限;如果新增的權限是已經存在的權限,則結果相比較啊授權之前無變化;
?? ??? ??? ?-:表示在指定的權限位上撤銷指定權限;如果撤銷的權限并不存在,則結果相比較啊授權之前無變化;
?? ??? ??? ?=:表示在指定的權限位上精確授權;此種授權方式不考慮該權限位原有的權限設定;
?? ??? ?r,w,x:表示具體的權限;

?? ??? ?注意:
?? ??? ?chmod +|- r|x FILE :在所有者的權限位上增加或撤銷讀或執行權限;
?? ??? ?chmod +|- w FILE:僅在所有者權限位上增加或撤銷寫權限;

?? ??? ?注意對于文件來說,執行權限是非常重要的安全上下文標識;因此默認情況下,所有的非目錄文件都不應該有執行權限;一旦非目錄具有了執行權限,則意味著該文件可以被執行,發起為進程,則可以按需使用系統資源。

?? ?OCTAL-MODE:八進制權限位標識位;

?? ?reference=RFILE:

?? ?# chmod --reference=/etc/shadow root.txt
?? ??? ?依照shadow文件的權限位來設置root.txt相同的權限;

?? ?常用選項:
?? ??? ?-R,,遞歸的設置目標文件或目錄的權限;

修改文件的所有權;
?? ?chown
?? ??? ?chown - 修改文件所有者和組別
?? ??? ?格式:
?? ??? ??? ?chown [option] [OWNER][:[group]] file...
?? ??? ??? ?chown [option] reference=RFILE FILE...

?? ??? ??? ?~]# chown user3 tset1
?? ??? ??? ?~]# chown user3: tset2
?? ??? ??? ?~]# chown :user3 tset3
?? ??? ??? ?~]# chown user3:myuser tset4

?? ??? ??? ?注意:在使用chown命令時,特別的,可以使用"."代替":"

?? ??? ??? ?常用選項:
?? ??? ?-R,,遞歸的設置目標文件或目錄的權限;

[root@localhost?~]#?chown?root.?/home/yu
[root@localhost?~]#?ls?-l?/home
總用量?4
drwx------.?14?root?root?4096?9月??17?00:25?yu

?? ??? ??? ?注意:對于文件來說,普通用戶可以修改所有者為自己的文件的使用權,但無法修改文件的所有權;修改文件所有權的操作只有root可以完成;


?? ?chgrp(不常用
?? ??? ??? ?chgrp - 改變文件的組所有權
?? ??? ?格式:
?? ??? ??? ?chgrp [option] group file...
?? ??? ??? ?chgrp [option] reference=RFILE FILE...

?? ??? ?注意:chown和chgrp所指定的用戶和組,既可以是用戶名和組名,也可以是UID和GID;

?? ?mkdir:
?? ? -m MODE :在創建目錄時為其指定權限;

[root@localhost?~]#?mkdir?-m?700?-pv?/tmp/mydir
mkdir:?已創建目錄?"/tmp/mydir"
[root@localhost?~]#?ls?-l?/tmp
總用量?0
drwx------.?2?root?root??6?11月??9?22:46?mydir

?? ? install命令:復制文件并設置屬性

?? ? ?? ?install [option] [-T]? source dest
?? ? ?? ??? ?單源復制,為復制后的文件增加執行權限;
??????? install [option] source... directory
?????? ??? ?多源復制,為復制后的文件增加執行權限;
??????? install [option] -d directory...
?????? ??? ?創建目錄;

??????? 常用選項:
?????? ??? ?-g group, --group=group
????????????? 設定目標文件的所屬組為指定組,而不是進程所有者的主要組;
??????????? -m mode, --mode=mode
?????????? ??? ?設定目標文件的權限,而不是rwxr-xr-x
??????????? -o owner, --owner=owner
?????????? ??? ?設定目標文件的所有者,僅root用戶可用;

??????? 注意:install命令,不能復制目錄,也不能以目錄為源文件;如果其源文件是一個目錄,則install命令會進入該目錄,一次復制其中所有的非目錄文件到達目標位置;

特殊權限:
?? ?SUID,SGID,STICKY

?? ?SUID:SUID僅設置在可執行的文件上。默認情況下,當用戶執行此類可執行文件時,被發起的進程的所有者不是進程發起者,而是可執行文件的所有者;換句話說,進程以所有者的身份運行。

?? ??? ?SUID權限所顯示的位置:文件的屬主的權限位中的執行權限位上;如果屬主本來就具有執行權限,則顯示為“s”,如果本來沒有執行權限,則顯示為“S”

?? ?管理SUID權限:
?? ??? ?1.符號標識法:chmod u+s FILE
?? ??? ?2.數字標識法:chmod 4755 FILE

[root@localhost?~]#?chmod?4755?/tmp/mydir
[root@localhost?~]#?ls?-l?/tmp
總用量?0
drwsr-xr-x.?2?root?root??6?11月??9?22:46?mydir



??? SGID:SGID可設置在可執行文件或目錄的屬組權限位的執行權限上。
?? ??? ??? ?如果某個目錄設置了SGID權限,并且對于某些用戶有寫權限,則所有在此目錄創建的新文件和目錄的所屬組均為其父目錄的所屬組,而并非進程發起者的主要組;


?? ??? ??? ?SGID權限的顯示位置;文件的屬組權限位上的執行權限上;如果屬組本來就有執行權限。則顯示為"s",否則,就顯示為“S”;

?? ??? ?管理SGID權限:
?? ??? ??? ?1.符號標識法:chmod g+s DIR
?? ??? ??? ?2.數字標識法:chmod 2770 DIR

[root@localhost?~]#?chmod?2770?/tmp/mydir/
[root@localhost?~]#?ls?-l?/tmp/
總用量?0
drwsrws---.?2?root?root??6?11月??9?22:46?mydir

?? ?3.STICKY:僅設置在目錄的其他用戶權限位的執行權限上。
?? ??? ?如果在某個目錄上的權限設置為多個用戶都擁有寫權限,那就意味著凡是擁有寫權限的用戶都能直接管理該目錄中的所有文件名,包括改名文件及刪除文件名等操作;因此需要在這樣的目錄上設置STICKY特殊權限;如果此類目錄設置了STICKY,則所有用戶即便擁有寫權限,也僅能刪除或改名所有者為其自身的文件;

?? ??? ?STICKY權限的顯示位置:在目錄的其他用戶的權限位的執行權限上;如果該權限位本來有執行權限,則顯示為“t”,否則,顯示為“T”

?? ??? ?管理STICKY權限:
?? ??? ??? ?1.符號標識法:chmod o+t DIR
?? ??? ??? ?2.數字標識法:chmod 1777 DIR

[root@localhost?~]#?chmod?1777?/tmp/mydir
[root@localhost?~]#?ls?-l?/tmp/
總用量?0
drwsrwsrwt.?2?root?root??6?11月??9?22:46?mydir


權限遮罩碼:umask
?? ?作用:在創建目錄或文件時,被創建出來的目錄或文件的默認權限上刪除遮罩碼上所對應的權限;

?? ?注意:在創建目錄或文件時,默認不設置特殊權限;

?? ?對于目錄文件:默認的權限為:0777-umask
?? ?對于非目錄文件:默認的權限為:0666-umask

[root@localhost?~]#?umask
0022

?? ?umask [OCTAL-MODE]

?? ?默認設置遮罩碼的文件:/etc/bashrc
?? ??? ?規則:如果用戶的UID大于199并且用戶的用戶名和主要組的組名相同,則遮罩碼為002;否則遮罩碼為022;


文件的擴展屬性:
?? ?lsattr
?? ??? ?lsattr - 顯示文件在Linux第二擴展文件系統上的特有屬性

?? ??? ?格式:
?? ??? ??? ?lsattr [ -RVadv ] [ files...? ]

?? ?chattr
?? ??? ?chattr - 修改文件在Linux第二擴展文件系統(E2fs)上的特有屬性

?? ??? ?格式:
?? ??? ??? ?chattr [ -RV ] [ -v version ] [ mode ] files...

?? ??? ??? ?mode 可以是:+-=[ASacdisu]


?? ??? ??? ?a:在向文件寫數據時,只能以附加的方式進行寫操作;文件的內容不能被更改和刪除;一般會為日志文件設置此屬性;
?? ??? ??? ?A:atime,文件的訪問時間戳控制屬性;對于并發訪問量較大或者并發訪問頻率較高的文件,應該設置此屬性以降低IO成本,防止IO瓶頸;
?? ??? ??? ?c:設置是否自動壓縮之后在存儲;
?? ??? ??? ?C:是否開啟“寫時復制”
?? ??? ??? ?d:使用dump備份文件系統時,跳過屬性設置為d的文件;
?? ??? ??? ?D:設置文件在文件系統中的異步寫操作;
?? ??? ??? ?i:設置文件不能被刪除,改名及設定鏈接關系;
?? ??? ??? ?s:設置文件的保密性刪除;
?? ??? ??? ?u:與s屬性相反,如果此類文件被刪除,則在存儲器中會繼續保存其內容;


FACL:
?? ?Filesystem Access Control List,文件系統訪問控制列表;
?? ?想要應用此功能,必須讓文件系統能夠支持;

?? ?FACL為文件系統的額外賦權機制:

?? ?在原有的u,g,o權限位之外,讓普通用戶能夠控制權限賦予另外的某個指定的用戶或組的一種賦權機制;

?? ?這種機制在centos或者RHEL7之后的發行版本中才逐漸成熟;

?? ?與FACL相關的命令:
?? ??? ?getfacl
?? ??? ??? ?getfacl - get file access control lists
?? ??? ??? ?格式:
?? ??? ??? ??? ?etfacl [-aceEsRLPtpndvh] file ...


?? ??? ?setfacl
?? ??? ??? ?setfacl - set file access control lists
?? ??? ??? ?格式:
?? ??? ??? ??? ?setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
?? ??? ??? ??? ?setfacl --restore=file

?? ??? ??? ?常用的選項:
?? ??? ??? ??? ?-m acl_spec:為指定文件設置acl_spec;
?? ??? ??? ??? ?-x acl_spec:將acl_spec從指定文件上移除;

?? ??? ??? ??? ?acl_spec:acl_specification, acl規格,訪問控制列表;
?? ??? ??? ??? ??? ?u:USERNAME:MODE
?? ??? ??? ??? ??? ?g:USERNAME:MODE

?? ??? ??? ??? ??? ?MODE一般是使用符號權限標識法標識的權限;

?? ??? ??? ?示例:

?? ??? ??? ??? ?為文件賦予指定用戶的額外訪問權限:
?? ??? ??? ??? ?setfacl -m u:USERNAME:rwx /PATH/TO/SOMEFILE/

?? ??? ??? ??? ?撤銷指定用戶的額外訪問權限
?? ??? ??? ??? ?setfacl -x u:USERNAME /PATH/TO/SOMEFILE/

?? ??? ??? ?注意:如果設置了FACL之后,在修改目標文件的使用權限,那么FACL中設置的權限條目可能受到影響而導致授權失敗


還有一些小實驗:

??? 背景描述:xiaoqiang、wangcai和tangbohu三個用戶的基本組都是與用戶名相同的組,但是他們都以qiuxiang組為附屬組;

?

[root@localhost?~]#?groupadd?qiuxiang[root@localhost?~]#?useradd?-G?qiuxiang?xiaoqiang[root@localhost?~]#?useradd?-G?qiuxiang?wangcai[root@localhost?~]#?useradd?-G?qiuxiang?tangbohu

1.當用戶xiaoqiang對/testdir目錄無執行權限時和無讀權限時,分別意味著xiangqiang無法完成哪些操作?
? 無執行權限意味著無法進入目錄,不能訪問;
? 無讀權限意味著讀取目錄,不能訪問,不能查看;

2.當用戶wangcai對/testfile文件只有寫權限時,是否可修改和刪除該文件?如果不能,那么wangcai能夠對該文件做哪些操作?
? 不修改該文件,不可以刪除該文件。
? 可以修改(添加,修改,刪除,覆蓋)文件中所存放的數據信息;

3.如果用戶tangbohu在/tmp目錄中建立了一個目錄mydir,他想要讓wangcai和xiaoqiang這兩個用戶能夠在該目錄中創建、修改和刪除文件,你能想到哪些辦法來實現這個目的?
? 1.修改其他人權限
???

[tangbohu@localhost?root]$?mkdir?-pv?/tmp/mydirmkdir:?已創建目錄?"/tmp/mydir"[tangbohu@localhost?root]$?chmod?757?/tmp/mydir[tangbohu@localhost?root]$?exitexit[root@localhost?~]#?su?xiaoqiang[xiaoqiang@localhost?root]$?touch?/tmp/mydir/a[xiaoqiang@localhost?root]$?ls?/tmp/mydir

??? a
? 2.修改組權限
???

[tangbohu@localhost?root]$?chgrp?qiuxiang?/tmp/mydir[tangbohu@localhost?root]$?chmod?775?/tmp/mydir

? 3.利用su命令,臨時使用root用戶執行。

二、操作:
1.復制/etc/fstab文件到/var/tmp下,同時設置文件屬主為wangcai有讀寫權限,屬組為xiaoqiang組有只讀權限,其他人無權限,請寫出命令;

??[root@localhost?~]#?install?-o?wangcai?-g?xiaoqiang?-m?740?/etc/fstab?/var/tmp

2.不使用useradd命令創建用戶xiaoming,該用戶有如下屬性:
??? 1) UID為8089;
??? 2) 主要組為xiaoming,gid為8089;
??? 3) 其用戶全名為"Wang Xiaoming";
??? 4) 家目錄在/home/xiaoming;
??? 5) 默認登錄shell為/bin/bash;
??? 6) 密碼修改之后5天內不能再次修改密碼;
??? 7) 密碼最多使用30天;
??? 8) 密碼過期前3天開始提醒用戶修改密碼;
??? 9) 密碼過期后,7天之內不會禁止用戶登錄;
?????

[root@localhost?~]#?echo?"xiaoming:x:8089:8089:Wang?XiaoMing:/home/xiaoming:/bin/bash"?>>/etc/passwd
[root@localhost?~]#?echo?"xiaoming:x:8089:"?>>/etc/group
[root@localhost?~]#?cp?-a?/etc/skel?/home/xiaoming
[root@localhost?~]#?chmod??700?/home/xiaoming
[root@localhost?~]#?chown??-R?xiaoming:xiaoming?/home/xiaoming
[root@localhost?~]#?echo?"xiaoming::5:30:3:7:::"?>>/etc/shadow
[root@localhost?~]#?passwd?xiaoming
更改用戶?xiaoming?的密碼?。
新的?密碼:
無效的密碼:?密碼少于?8?個字符
重新輸入新的?密碼:
passwd:所有的身份驗證令牌已經成功更新。
[root@localhost?~]#?su?xiaoming?
[xiaoming@localhost?root]$

3.用戶xiaoming在他自己的家目錄中創建了一個文件project.plan,為了想要讓wangcai用戶能夠讀取到該文件的內容,xiaoming將/bin/cat文件復制到/tmp/xmcat,/tmp/xmcat只有屬主xiaoming和wangcai用戶能夠執行;每次wangcai執行"[wangcai@localhost ~]$ /tmp/xmcat ~xiaoming/project.plan"命令就能看到該文件的內容;
?

[root@localhost?~]#?usermod?-g?8089??wangcai[root@localhost?~]#?su?-?xiaoming[xiaoming@localhost?~]$?touch?project.plan[xiaoming@localhost?~]$?install?-m?770?/bin/cat?/tmp/xmcat[wangcai@localhost?~]$?/tmp/xmcat?~xiaoming/project.