linux文件權限
當我們使用ll命令查看文件時,可以看到文件的一些信息,今天我們來了解下這些信息都是些什么
-rw-r--r-- 1 root root 0 Aug 3 19:13 f2
-:指的是文件類型
rw-r–r–:權限 ==>前三位表示屬主的權限,中三位表示屬組的權限,后三位表示other用戶的權限
1:引用次數(硬鏈接次數)
root:屬主(所有者)
root:屬組(所屬組)
0:文件大小
Aug 3 19:13 :創建時間
f2:文件名
權限:
對文件
r:read 可讀取此文件的實際內容,如讀取文本文件的文字內容等
w: write 可以編輯,新增或修改該文件的內容(但是不含刪除該文件)
x:execute 該文件具有可以被系統執行的權限==>>針對二進制文件或腳本
X:針對目錄會加上x權限,如果是文件,本身沒有執行權限,那么也不會加上執行權限,對目錄不影響
對目錄:
x: execute 可以進入目錄,可以訪問目錄中的文件,但是看不到里面有什么文件
r:read 進不去目錄,可以看文件列表。不能訪問目錄內文件,文件的元數據不能查看
w: write 可以創建或刪除目錄中的文件,但是要匹配x權限
X:和x等價
假如對目錄有寫和執行,就可以刪除里面的任何文件,里面文件u=,也一樣
文件權限的對象:
屬主:u
屬組:g
other:o
chown:設置文件的屬主
[root@localhost qiuwei]# ll total 8 -rw-r---w- 1 root root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chown qiuwei f2 ==>屬主改為用戶qiuwei [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chown qiuwei:qiuwei fff ==>屬主和主組也可一起修改,用”:“隔開,也可用”.“ [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]#
chgrp:設置文件的屬組信息
[root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chgrp qiuwei fff ==>修改目錄fff的屬組為qiuwei [root@localhost qiuwei]# [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 root qiuwei 4096 Aug 3 20:12 fff
[root@localhost qiuwei]# chown qiuwei fff [root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root root 0 Aug 3 20:12 abc ==>修改了目錄fff的屬主,但是目錄里面的文件abc屬性并沒有變 [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei root 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chgrp -R qiuwei fff ==>加上-R選項,修改目錄fff的屬組,看看目錄里面的abc如何 [root@localhost qiuwei]# ll total 8 -rw-r---w- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root qiuwei 0 Aug 3 20:12 abc ==>abc文件屬組也隨之修改了 [root@localhost qiuwei]#
文件權限的修改
用八進制的數字表示
— 000 ==>0
–x 001 ==>1
-w- 010 ==>2
-wx 100 ==>3
r– 011 ==>4
r-x 101 ==>5
rw- 110 ==>6
rwx 111 ==>7
所以我們表示文件權限也可以說775(rwxrwxr-x), 620(rw–w—-)666(rw-rw-rw-)
chmod:修改文件的權限
修改一類用戶的所有權限:
u=rwx g=rw o= a=rwx ==>沒有就是默認沒有此權限
修改一類用戶的某些權限
u+x o+w a+r …
[root@localhost qiuwei]# ll total 8 -rwxr-x-wx 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod a= f2 ==>所有人對f2沒有任何權限 [root@localhost qiuwei]# ll total 8 ---------- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod o+r f2 ==>f2文件other增加r權限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff
-R:遞歸修改,你懂的
[root@localhost qiuwei]# ll fff total 0 -rw-r--r-- 1 root qiuwei 0 Aug 3 20:12 abc ==>abc原本權限644 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod -R a=rwx fff ==>fff目錄和里面的文件abc權限都設置為777的權限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxrwxrwx 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# ll fff total 0 -rwxrwxrwx 1 root qiuwei 0 Aug 3 20:12 abc [root@localhost qiuwei]#
我們也可以用八進制數字來修改
[root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 drwxrwxrwx 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod 000 fff ==>修改為任何人對fff目錄都沒有權限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 d--------- 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]# chmod 555 fff ==>修改為任何人對fff目錄都只有r和x權限 [root@localhost qiuwei]# ll total 8 -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-xr-x 2 qiuwei qiuwei 4096 Aug 3 20:12 fff [root@localhost qiuwei]#
umask:
用來設置限制新建文件夾權限的掩碼。當新文件被創建時,其最初的權限是由文件創建掩碼決定。用戶進入系統時,umask命令都會被執行,
并自動設置掩碼mode來限制新文件的權限。用戶可以通過執行umask命令來修改默認值,
查看umask配置文件
全局設置:/etc/bashrc 用戶設置:~/.bashrc
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022
以上表示如果uid號大于199且用戶名和組名相同,則umask默認為002,否則umask默認為022
對一般文件而言,是不需要執行(x)權限的,所以一般文件全部權限為666,目錄文件為777
umask+默認權限=666(文件)/777(目錄)
所以對root用戶,默認新建文件權限為644,目錄權限為755、
對普通用戶,默認新建文件權限為664,目錄文件為775
umask修改默認值
我們假設umask=125,來看看新建文件權限究竟是多少
在root用戶下:
umask=125,則新建文件默認權限應為666-125=541
新建目錄默認權限應為777-125=652
[root@localhost qiuwei]# umask 0125 [root@localhost qiuwei]# touch a [root@localhost qiuwei]# mkdir b [root@localhost qiuwei]# ll total 0 -rw-r---w- 1 root test 0 Aug 3 21:28 a ==>a文件權限為642 drw-r-s-w- 2 root test 6 Aug 3 21:28 b ==>b目錄權限為652
對比看來目錄權限一致,但是文件權限卻有差異
這是因為我們前面有說到,我們一般系統默認文件是不需要執行(x)權限的,而我們知道541權限表示屬主有rx權限,
other有執行(x)權限,這不符合系統設定,所以這種情況下,默認的文件權限如果有奇數就自動加1,偶數就保留,
因為如果文件權限有奇數,就一定代表文件有執行(x)權限 ==>r=4 w=2 x=1
或者也可以這樣理解:
用八進制數表示
文件權限 110 110 110 ==>666
umask設定 001 010 101 ==>125
新建文件權限 110 100 010 ==>642
umask設置可以理解為:屏蔽掉屬主x權限,屬組w權限。other的rx權限,,所以文件權限上面有umask要屏蔽的就屏蔽了,沒有的就保留原權限,所以結果就是642
umask從目錄或文件上屏蔽掉最大權限相對應的位,從而得出默認權限
umask也可用模式發表示
[root@localhost qiuwei]# umask u=rw,g=r,o= ==>新建文件屬主有rw權限,屬組有r權限,other無權限 [root@localhost qiuwei]# umask 0137 [root@localhost qiuwei]# touch aaa [root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa
linux文件系統的特殊權限
SUID SGID Sticky
屬主 屬組 other
前提:進程有屬主和屬組;文件有屬主和屬組
-
任何一個可執行程序文件能不能啟動為進程:取決于發起者對程序文件是否擁有執行權限
-
啟動為進程之后,其進程的屬主為發起者;進程的屬組為發起者所屬的組
-
進程訪問文件時的權限,取決于進程的發起者
a.進程的發起者,同文件的屬主;則應用文件屬主權限
b.進程的發起者,屬于文件屬組;則應用文件屬組權限
c.進程的發起者,是other,則應用文件”其他“權限
SUID:
執行/etc/cat文件
qiuwei 2184 0.0 0.0 100944 548 pts/0 S+ 08:10 0:00 cat
用命令ps aux知cat命令的擁有者是用戶qiuwei,不是屬主root用戶,而且進程訪問文件的權限是用戶qiuwei的,
因為如果權限是屬主root的話,我們是可以訪問/etc/shadow文件的
/etc/shadow文件是用來管理用戶密碼的,任何人都無權限,root用戶除外,很顯然普通用戶是無法更改/etc/shadow 文件的
那么普通用戶是怎么實現密碼修改的呢
passwd是修改密碼的命令,我們就是通過執行passwd命令,來訪問修改shaodw文件的,我們來看下passwd這個可執行文件有什么特殊的
passwd文件和cat文件區別在于屬主的權限上,passwd多了個s,少了x,看來關鍵就是這個s了,給cat文件加上s權限,看看結果
剛才執行cat命令訪問shadow文件時,顯示權限不夠的,但是給cat加了s權限后,可以直接訪問shadow文件了,
這個s權限就是SUID
SUID:讓本來沒有相應權限的用戶運行這個程序時,可以訪問他沒有權限訪問的資源。passwd就是一個很鮮明的例子。
我理解為:當一個文件的屬主擁有s權限時,其他用戶執行此文件后,進程屬主將獲得此文件屬主的權限,上面的cat執行后,擁有了root的權限,所以可以訪問shadow文件了
SUID只針對二進制可執行程序有效
SUID設置在目錄上無效
s權限設定: chmod u+s file
chmod u-s file
用八進制數字表示為4
SGID:如果理解了上面SUID,這個SGID也是一樣的
組的執行位加上s,普通用戶調用程序時,得到的是組的權限
在此說明:root用戶權限很大,類似于天神,無所不能,而root組權限和普通用戶組差不多
s權限設定:chmod g+s file
chmod g-s file
用把八進制數字表示為2
SGID作用在目錄上時:
對目錄加上g+s,任何人不管是不是目錄所在組的成員,在里面創建文件時,該目錄里面的文件屬組繼承目錄的屬組
即作用在目錄上,將使在該目錄中新建目錄或文件將自動繼承該目錄所屬組
[root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-srwx 2 root root 4096 Aug 4 10:29 fff ==>目錄fff有s權限,屬組是root [root@localhost qiuwei]# cd fff [root@localhost fff]# su qiuwei ==>切換到普通用戶qiuwei [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:29 1114 -rw-r----- 1 root root 0 Aug 4 10:04 123 -rw-r----- 1 root root 0 Aug 4 10:28 321 [qiuwei@localhost fff]$ touch test ==>創建新文件test [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:29 1114 -rw-r----- 1 root root 0 Aug 4 10:04 123 -rw-r----- 1 root root 0 Aug 4 10:28 321 -rw-rw-r-- 1 qiuwei root 0 Aug 4 10:30 test ==>文件的屬組為root,而不是普通用戶qiuwei
Sticky
當用戶對一個目錄擁有寫權限時,是可以刪除目錄里面的任何文件,無論該文件的權限或擁有者
為了避免這種情況,我們在目錄設置Sticky位,只有文件的所有者或root可以刪除該文件
權限設定:
chmod o+t DIR
chmod o-t DIR
[root@localhost fff]# ll total 0 -rw-rw---- 1 root root 0 Aug 3 20:12 abc ==>other用戶對abc文件無任何權限 [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ ll total 0 -rw-rw---- 1 root root 0 Aug 3 20:12 abc [qiuwei@localhost fff]$ rm -rf abc ==>可以刪除abc文件 [qiuwei@localhost fff]$ ll total 0 [qiuwei@localhost fff]$
給fff目錄增加t權限后
[root@localhost qiuwei]# chmod o+t fff ==>給fff目錄增加t權限 [root@localhost qiuwei]# ll total 8 -rw-r----- 1 root root 0 Aug 4 09:24 aaa -------r-- 1 qiuwei root 4 Aug 3 19:53 f2 dr-xr-xrwt 2 root root 4096 Aug 4 09:51 fff [root@localhost qiuwei]# touch fff/123 [root@localhost qiuwei]# cd fff/ [root@localhost fff]# ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ rm -rf 123 rm: cannot remove `123': Operation not permitted ==>給fff目錄增加t權限,其他用戶就無法刪除123文件 [qiuwei@localhost fff]$ ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$ touch 111 [qiuwei@localhost fff]$ ll total 0 -rw-rw-r-- 1 qiuwei qiuwei 0 Aug 4 10:18 111 ==>可以創建文件 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$ rm -rf 111 ==>可以刪除自己的文件 [qiuwei@localhost fff]$ ll total 0 -rw-r----- 1 root root 0 Aug 4 10:04 123 [qiuwei@localhost fff]$
t權限用把八進制數字表示為1
權限位映射:
SUID: user, 占據屬主的執行權限位
s:屬主擁有x 權限
S:屬主沒有x 權限
SGID: group, 占據屬組的執行權限位
s:group 擁有x 權限
S:group 沒有x 權限
Sticky:other, 占據other 的執行權限位
t:other 擁有x 權限
T:other 沒有x
設定文件特定屬性
chattr
+i:不能刪除改名,更改文件,任何人
-i:取消上面設置
+A:不讓修改文件時間戳
-A:取消上面設置
+a:可以修改內容,但是不能移動改名刪除
-a:取消上面設置
lsattr:顯示特定屬性
訪問控制列表
ACL:Access Control List,實現靈活的權限管理
除了文件的屬主屬組,other,可以對更多的用戶設置權限
ACL生效順序:屬主,自定義用戶,自定義組,其他人
setfacl -m u:qiuwei:rwx file==>屬主
[root@localhost fff]# ll total 4 -rw-r----- 1 root root 4 Aug 4 11:08 123 ==>other用戶qiuwei對文件123無任何權限 [root@localhost fff]# setfacl -m u:qiuwei:rwx 123 ==>定義用戶qiuwei對文件123特殊權限rwx [root@localhost fff]# su qiuwei ==>切換到qiuwei用戶 [qiuwei@localhost fff]$ ll total 4 -rw-rwx---+ 1 root root 4 Aug 4 11:08 123 ==>權限后面出現了+ [qiuwei@localhost fff]$ cat 123 ==>可正常訪問123文件 123 [qiuwei@localhost fff]$
setfacl -m g:qiuwei:rwx file==>屬組
setfacl -x u:qiuwei file刪除acl權限
setfacl -Rm g:qiuwei:rwx directory ==>遞歸設置,目錄里面的文件也一并設置
也可批量設置
setfacl -M file.acl file|directory 批量設置
setfacl -X file.acl directory 批量刪除
mask值:
當文件有acl權限時,group權限就是mask值,
[root@localhost fff]# setfacl -m u:qiuwei:r 123 ==>S設置ACL權限 [root@localhost fff]# [root@localhost fff]# ll total 4 -rw-r-----+ 1 root root 4 Aug 4 11:08 123 [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:r-- group::r-- mask::r-- ==>只有r權限 other::--- [root@localhost fff]# chmod g+w 123 [root@localhost fff]# ll total 4 -rw-rw----+ 1 root root 4 Aug 4 11:08 123 ==>屬組加w權限 [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:r-- group::r-- mask::rw- ==>也加上了w權限 other::---
它針對的是除了文件屬主和other之外的用戶的最大權限
屬組和acl特殊權限用戶的權限只能比mask的權限低,如果某權限位比mask高,也會被屏蔽,不會擁有此權限
,比mask低的保留其原權限
[root@localhost fff]# setfacl -m m::r 123 ==>設定mask權限為r [root@localhost fff]# getfacl 123 # file: 123 # owner: root # group: root user::rw- user:qiuwei:rwx #effective:r-- ==>qiuwei用戶acl權限為rwx,但是有效權限只有r group::r-- mask::r-- other::--- [root@localhost fff]# su qiuwei [qiuwei@localhost fff]$ ll total 4 -rw-r-----+ 1 root root 4 Aug 4 11:08 123 [qiuwei@localhost fff]$ echo 111 >123 ==>qiuwei用戶無法修改123文件 bash: 123: Permission denied [qiuwei@localhost fff]$ cat 123 ==>qiuwei用戶可讀123文件 123
用戶和組的權限設置必須存在于mask權限設定范圍內才會生效
備份和恢復ACL
-
getfacl -R /tmp/dir1 > acl.txt
-
setfacl -R -b /tmp/dir1
-
setfacl -R –set-file=acl.txt /tmp/dir1
-
getfacl -R /tmp/dir1
原創文章,作者:qiuwei,如若轉載,請注明出處:http://www.www58058.com/28059
文章整體思路清晰,從權限介紹、管理到特殊權限,都有了相應的認識和理解。