在Linux中,權限的分配和管理是一件很重要的事。因爲這對系統中文件的管理非常重要。如何分配好權限是其中的關鍵。
權限分爲兩種使用權(MODE)和所有權(OWNERSHIP)
首先我來看一下MODE的構成:
r:可讀
w:可寫
x:executable可執行
對目錄來說:
擁有r權限時可以使用ls命令來查看目錄
擁有w權限時可修改此目錄下的文件名或文件列表,即可刪除文件
擁有x權限時可以使用ls -l命令來獲取其中的文件的詳細信息(這是基本權限,沒有 時什麼都做不了)
對文件來說:
擁有r權限時可以查看或獲取文件中存放的數據
擁有w權限時可以修改文件中存放的數據,(要想刪除文件的話,對該文件所在的目錄 有w權限才行)
擁有x權限時可將此文件發起運行爲進程
下面舉個例子來具體分析一下:
-rw-r--r--:三個權限位--屬主、屬組、其他用戶
-:代表是文件(d的話代表目錄)
rw-:屬主權限
r--:屬組權限
r--:其他用戶權限(其寫權限不要隨便給)
當爲目錄或文件設置權限時,除了用rwx表示外,也可以用下面的方法表示,其對應關係如下:
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
例如想要設置rwx權限時,可以寫777
注意:只有某個文件的屬主才能修改文件的使用權(root除外)
修改或設置目錄文件的權限的命令有: chmod、 chown、 chgrp、
chmod命令:
用法: chmod - change file mode bits
chmod [OPTION]... MODE[,MODE]... FILE...
MODE:符號權限標識法
其中:
u,g,o,a 表示所有權
+,-,= 標識授權方式
r,w,x 表示具體權限內容
舉幾個例子:
chmod u+r,g-w,0=x file
chmod ug+r file
chmod +w file 默認只爲屬主增加w權限
chmod +x file 默認爲全部用戶增加x權限
注意:文件的執行權限對Linux文件系統來說,是非常重要的安全標識。
chmod [OPTION]... OCTAL-MODE FILE...
如果使用八進制數字標識法,則每次必須給足所有的權限位
如果給的權限位不完整,文件系統會自動補足(左側補零)。
chmod [OPTION]... --reference=RFILE FILE...
chmod --reference=a b (都是當前目錄下的a,b文件)
-R(遞歸式修改):將目標目錄中的文件及子目錄和子目錄下的所有文件統一設置爲指定的 權限標識
chown命令:
chown:屬主與屬組都可修改
格式:chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown OWNER FILE
chown :GROUP FILE
chown OWNER: FILE
chown OWNER:GROUP FILE
-R:將目標目錄中的文件及子目錄和子目錄下的所有文件統一設置爲指定 的權限標識
chown [OPTION]... --reference=RFILE FILE...
注意:修改OWERSHIP操作只有root用戶可以完成
chgrp命令:
chgrp(使用較少):只能修改文件的屬性
格式:chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
除此之外,還有install命令也相關
install命令:安裝:複製文件,
-o:set ownership (super-user only)
-g:set group ownership, instead of process' current group(super-user only)
注意:install命令不能複製目錄,如果是目錄的話,則install依次複製其中的所有 非目錄文件到目標位置。
OWNERSHIP:資源的所有權
屬主:掌控資源的某個特定用戶 owner(user)、u
屬組:掌控資源的某些特定用戶 group、g
其他用戶:未曾掌控資源的那些用戶 other、o
全部用戶:a
特殊權限:SUID,SGID,STICKY
其表示如下:
--- 000 0
--t 001 1
-s- 002 2
-st 003 3
s-- 004 4
s-t 005 5
ss- 006 6
sst 007 7
我們知道,在Linux中默認情況下,用戶發起一個進程,該進程的屬主是其發起者,
但當文件有了SUID權限時情況就不一樣了。(注意:SUID只對文件有效)
當用戶發起執行一個進程時,該程序文件如果擁有suid權限的話,那麼此程序發起的進程的屬主爲 該程序文件的屬主,而不是其發起者。
用法格式:chmod u+|-s FILE....
同樣的SGID權限,(注意:SGID只對目錄有效)
如果某個目錄對於一些用戶有寫權限並且設置了SGID時,則所有此目錄的有寫權限的用戶在該目錄 創建目錄或文件時,新文件的屬組不再是創建用戶的基本組,而是繼承了該目錄的屬組。
STICKY(粘性的):粘滯位
如果某個目錄中,有超過一個用戶擁有寫權限,則這多個用戶也擁有寫權限。
文件的特殊屬性:相關命令lsattr、chattr
lsattr (查看)
lsattr [ -RVadv ] [ files... ]
chattr(修改)(a和i主要)
chattr - change file attributes on a Linux file system
chattr [ -RVf ] [ -v version ] [ mode ] files...
mode:使用+-=等的方式來設置
整個chattr最核心的設置就是mode部分
[aAbBcCdDijsStTu]都是所需要的屬性
a(常用):設置這個屬性的文件,其內容不能更改或刪除,只能以追加的方式向文件中寫入數據,多數的服務器日誌類文件會設置爲此屬性
A:文件的訪問時間戳,IO瓶頸,When a file with the 'A' attribute set is accessed, its atime record is not modified. This avoids a certain amount of disk I/O for laptop systems.
c:設置文件是否自動壓縮後存儲
C(使用少):設置文件是否開啓“寫時複製”屬性
d:設置文件在使用dump
D(最好別設置):設置文件在文件系統中的異步寫操作
i(重要):設置文件不能被刪除、修改、設定鏈接關係
s:設置文件的保密性刪除。
u:跟s屬性相反,
-R:遞歸地設置指定目錄
例:chattr +i FILE
爲文件賦予額外的權限機制:FACL (centos7後才逐漸成熟,5之前沒有)
與FACL有關命令:
getfacl:
getfacl - get file access control lists
getfacl [-aceEsRLPtpndvh] file ...
getfacl [-aceEsRLPtpndvh] -
setfacl:
setfacl - set file access control lists
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file
爲用戶賦予額外權限:
setfacl -m u:username:mode file...
爲組賦予額外權限:
setfacl -m g:groupname:mode file...
撤銷爲用戶賦予額外權限:
setfacl -x u:username file...
撤銷爲組賦予額外權限:
setfacl -x g:groupname file...