權限就是對文件或目錄“加鎖”,有不同權限的人才能進去不同的入口……
一、正常權限
1.1權限的查看
其中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,那麼如下圖:
具體只要在相應位上有權限,則二進制爲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權限的設定
- setfacl的選項和常用參數
- getfacl 文件 或 目錄 #查看文件或目錄的acl權限
- setfacl - m u:用戶名:權限 文件或目錄 #可以使用模式方法也可以使用數字方法設置
- setfacl - R #R表示遞歸
- setfacl - M 配置文件 文件或目錄 #M表示把配置文件裏權限設置給後面的文件或者目錄,你可以先寫好一個權限保存在文件中來批量設置
- setfacl - m g:組名:權限 #g表示組
- setfacl - m d:u:用戶:rx #d選項表示創建默認權限不影響其他acl權限,加了d之後在目錄下創建的文件都會獲得父目錄的設置默認acl權限
- setfacl - k #刪除默認權限
- setfacl - x u:用戶 #刪除單個權限
- setfacl - X #X和M選線功能相似只不過X是按照文件的內容刪除acl權限
- setfacl -b #刪除所有acl權限
- 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 #第二種方法