檔案的權限
當運作如下指令時:
[root@marvel ~]# ll /etc/passwd
出現下面結果:
-rw-r--r--. 1 root root 1933 May 19 11:14 /etc/passwd
解釋如下:
1)- 代表檔案類型
-:普通檔案
d:目錄檔案
l:軟連接配接檔案
s:套接字檔案
p:管道檔案
c:字元裝置檔案 無緩存,順序通路
b:塊裝置檔案 有緩存,随機通路
2)rw-r--r-- 代表檔案的權限
能使用此檔案的使用者分為三類,屬主,屬組的使用者和其他使用者
從左到右,每三位分别代表三類使用者的權限
r:讀權限
w:寫權限
x:執行權限
-:代表沒有相應位置的權限
對于檔案,讀寫執行分别代表的含義:
r:可用檔案檢視類工具擷取檔案内容
w:可修改其内容,隻有此權限時,不能檢視再修改,但是可以用重定向修改
x:可以把檔案送出給核心,啟動一個程序來執行
對于目錄來說,讀寫執行分别代表的含義:
r:可以數用ls檢視此目錄中的檔案清單
w:可以在目錄中建立/删除檔案
x:可以使用ls -l檢視此目錄中檔案清單的詳細資訊,也可以用cd進入此目錄
Attention:對于某個使用者來說,目錄有w權限,無論裡面檔案是否有w權限,都可被删除
基本的檔案權限就用這9位來表示,這樣将其功能位置固定,用10表示對應其功能開關,那麼就是一個9位的二進制數,再将每三為捆綁加以區分對每類使用者的權限,這樣就可以清晰的看到每類使用者的權限了
e.g.rw-r----- 對應二進制 110 100 000 再将每三位捆綁 變成三位的八進制數。 640 屬主讀寫權限,屬組讀權限,其他無權限,這通常是一個檔案的預設權限 目錄預設 755
3). 如果有此項,則代表該檔案有selinux标簽,使用ll -Z檢視,如果是目錄則用ll -dZ
Following the file mode bits is a single character that specifies
whether an alternate access method such as an access control list
applies to the file. When the character following the file mode
bits is a space, there is no alternate access method. When it is
a printing character, then there is such a method.
在檔案權限位後面,附加有一個單字元。用來表示是否有一個
可替換的通路控制措施應用在這個檔案上。例如,通路控制清單(ACL,access control list)。
當檔案權限位後面附加的是一個空格時,表示系統沒有可替換的通路控制措施。
當是一個可列印字元時,表示系統存在這樣一個通路控制措施。
GNU `ls' uses a `.' character to indicate a file with an SELinux
security context, but no other alternate access method.
GNU的ls指令使用‘.’字元表示檔案使用了selinux
安全上下文,但是沒有其他可替代的通路控制措施
A file with any other combination of alternate access methods is
marked with a `+' character.
在使用SElinux安全上下文的同時,混用其他通路控制措施的檔案用+字元标記
4) 1代表硬連結或軟連結的數量(參見MyNewDocument/New_1/檔案系統下/inode)
5)檔案的屬主
6)檔案的屬組
7)時間戳
8)檔案或目錄名字
1.修改檔案權限
chmod [option] OCTAL/MODE file/directory
-R 遞歸修改權限 修改目錄權限采用
OCTAL 八進制數,在上一節上中描述了八進制數的由來,跟此處的八進制數一緻
chmod 644 file
将檔案權限設為644 即 rw- r-- r--
MODE [u,g,o] [+/-/=] [rwx]
u:代表要設定屬主權限
g: 代表要設定屬組權限
o:代表要設定其他權限
a:代表所有人
這三個可以組 例如 ug= uo+等
+:某一類使用者增權重限
-:某一類使用者減少權限
=:指定某一類使用者的權限
rwx:最多3位,要什麼權限就寫什麼權限,沒有不寫
這是基本權限位,除此還有st
chmod --reference=rfile file 依據rfile的權限來設定file的權限
小竅門:
設定一個目錄本身及目錄中的所有檔案和目錄的權限,對于所有人來說,使檔案具有讀寫權限,目錄具有讀寫執行權限
chmod -R a=rwX dir
隻有x位有大寫的權限,除此之外,大寫,還有ST
2.改變檔案的屬主和屬組
chown [option] [owner][:group] file
-R 遞歸修改
owner 隻修改屬主
owner:Group 修改屬主和屬組
:group 修改屬組
Attention:“:”可以被.代替
chown --reference==rfile file 依據rfile的屬主屬組來設定file的屬主屬組
3.umask 參見 MyDocument/1/umask
4.特殊權限 SUID SGID Stickybit
1)安全上下文
前提:程序有屬主和屬組(但是沒有基本組和附加組的概念),檔案有屬主和屬組
(1)任何一個可執行程式檔案能不能啟動為程序,取決于發起者對程式檔案是否有執行權限
(2)執行檔案啟動為程序之後,其程序的屬主為發起者,程序的屬組為發起者的屬組
(3)程序通路檔案時的權限,取決于程序的發起者
(a)程序的發起者,就是檔案的屬主,則應用檔案屬主的權限
(b)程序的發起者,屬于檔案的屬組,則應用檔案屬組的權限
(c)應用檔案“其他”權限
2)可執行檔案上的SUID
(1)作用對象:二進制可執行檔案
(2)标記,二進制可執行檔案的屬主的執行權限位:
s:代表在設定SUID之前,這個二進制可執行檔案屬主有x權限
S:代表在設定SUID之前,這個二進制可執行檔案屬主沒有x權限
(3)意義:
任何一個可執行程式檔案能不能啟動為程序,取決于發起者對程式檔案是否有執行權限
執行檔案啟動為程序之後,其程序的屬主不是發起者,而是可執行程式檔案的屬主
以可執行二進制檔案的屬主身份啟動程序,而後程序通路的檔案的權限,都要看二進制可執行檔案的屬主,而非此二進制可執行檔案的發起者(目前使用者)
(4)設定在目錄上無意義
chmod u+/-s file
3)SGID權限
(1)作用對象:二進制可執行檔案或目錄
(2)标記,二進制可執行檔案或目錄的屬組的執行權限位:
s:代表在設定SGID之前,這個二進制可執行檔案或目錄的屬組有x權限
S:代表在設定SGID之前,這個二進制可執行檔案或目錄的屬組沒有x權限
(a)作用在二進制可執行檔案上
執行檔案啟動為程序之後,其程序的屬主不是發起者,而是可執行程式檔案的屬組
以可執行二進制檔案的屬主身份啟動程序,而後程序通路的檔案的權限,都要看二進制可執行檔案的屬組,而非此二進制可執行檔案的發起者(目前使用者)
(b)作用在目錄上
有這樣一種需求,有一組使用者加入了同一個組gp1,在磁盤上想建立一個目錄pub,作為gp1組的公共目錄,每個人都可以在這個目錄中,增删檔案,修改組内成員的檔案
mkdir pub
chown -R :gp1 pub
這樣組内成員都可以在pub中增删檔案,但建立的檔案的屬組還是自己的屬組,也隻能删除自己的檔案。
我們似乎可以這樣做
但是每每有人建立檔案或目錄,管理者都要執行此操作,實在顯得有些難堪
那麼這就是目錄上SGID的發揮的地方了
預設情況下,在某目錄中,使用者建立檔案或目錄時,其屬組為使用者的屬組
一旦某目錄被設定了SGID,則對此目錄有寫權限的使用者(可能是目錄的屬主,屬組使用者,或其他使用者)在此目錄中,建立的檔案或子目錄所屬的組為此目錄的屬組,而權限要應用對應使用者的umask,
Attention:子目錄繼承sgid,且目錄(也就是前面子目錄的父目錄)設定sgid之前,其目錄内已存在的檔案或目錄不會的屬組不會被修改,sgid權限也不會被修改(特指已存在的目錄)
(4)設定權限
chmod g+/-s DIR/file
4)Sticky
(1)作用對象:目錄
(2)标記目錄的其他使用者的執行權限位:
x:代表在設定sticky之前,這個目錄的屬組有x權限
X:代表在設定sticky之前,這個目錄的屬組沒有x權限
通常,對于某目錄,使用者有寫權限,那麼這個使用者就可以删除該目錄下的任意檔案或目錄(包括root的檔案或目錄)
在目錄上設定sticky位,隻有檔案或目錄的所有者或root可以删除檔案或目錄,但是否能修改為檔案和目錄,還是要看這個檔案和目錄對于使用者來說有無權限,
Attention:設定了sticky位的目錄的子目錄不繼承sticky
sticky設定在檔案上無意義
chmod o+/- dir
5)特殊權限的數字表示法
三個特殊權限的二進制位,組成了一個8進制數,在數字表示法中放在普通權限前面
如chmod 4640 file 代表給檔案設定了suid
5.另外的特定屬性
chattr +i file 不能删除,改名和更改
dir 不能删除,改名和建立和删除檔案
chattr +a file/dir 隻能增加
lsattr 顯示這裡的特定屬性
Attention:這個屬性和cp --preserve=xattr中的xattr不是一回事