setfacl和chmod有什麼區別

linux提供了一套相當安全的文件管理方式,它包括文件的權限、屬性、ACL還有SELINUX

1、權限
在說文件權限之前,我們得知道它們是什麼?
先在終端中輸入ls -l /root,root是系統管理員的HOME目錄,它下面有一個目錄Desktop和文件root.如下所示:
-rw------- 1 root root 8 9月 28 13:36 root
drwxr-xr-x 2 root root 4096 9月 26 21:42 Desktop
你會發現除了名字外前面還有一堆信息,那這些信息都是些什麼意思呢?我先拿目錄那行來說明
drwxr-xr-x 2 root root 4096 9月 26 21:42 Desktop

再說權限之前先看root和root這兩個參數,他們的意思是該目錄屬於用戶root(第一個root)和用戶組root(第二個root),這兩個不一定非要相同,可以通過命令修改
修改所屬用戶:chown haha Desktop 將Desktop的擁有者改成用戶haha
修改所屬組:chgrp heihei Desktop 將Desktop的羣組擁有者改成用戶組heihei

然後是文件的三大基本權限:讀r、寫w、執行x
對於文件的意義:
r:可讀取文件的實際內容,如讀取文本文件的文字內容等;
w:可以新增、修改該文件的內容,但不能刪除該文件;
x:該文件可以被系統執行
對於文件夾的意義
r:可以讀取文件夾裏列表的權限,比如用ls命令將該目錄下的內容列出來
w:可以新建、刪除、重命名、移除文件夾下的文件和文件夾
x:進入一個文件夾的權限,如使用cd進入一個文件夾

說完這兩個參數和三大權限後,那前面那十個參數就好理解了
drwxr-xr-x 這十個字母可以分成1+3+3+3四個小組。
第1組:代表該文件的類型,這裏是d,代表目錄
-代表普通文件,d代表目錄,l代表鏈接文件
b代表讀取數據以段爲單位的設備,如硬盤
c代表讀取數據以字符爲單位的設備,如鍵盤、鼠標
第2組:代表文件擁有者對該文件的權限,這裏是rwx,意思是root對該Desktop具有讀r、寫w、執行x的權限
第3組:代表文件所在組對該文件的權限,這裏是r-x,意思是用戶組root下面其他非root用戶對Desktop具有讀r、執行x權限,沒有寫w權限就用-表示
第4組:代表文件擁有者所在組外其他組及成員對該文件的權限,這裏也是r-x,意思是其他組的成員對Desktop讀、執行權限,沒有寫w權限
既然時權限,當然可以修改,修改的命令是chmod,有下面三種方法
數值模式:chmod 764 Desktop,修改完權限變成drwxrw-r--
賦值模式:chmod u=rwx,g=rw,o=r Desktop,修改完權限變成drwxrw-r--
增刪模式:chmod u+x,g-x,o-x,修改完變成drwxr--r--


2、特殊權限
SUID、SGID、SBIT

先用ls -l命令看一下下面幾個文件或目錄的信息:
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
-rwx--s--x. 1 root slocate 35612 8月 24 2010 /usr/bin/locate
drwxrwxrwt. 24 root root 20480 10月 14 17:55 /tmp
會發現在文件擁有者,文件擁有者所在組,其他組的權限x的位置上被s或者t取代了,這是什麼?

先來看看他們的作用:
SUID:當用戶執行具有x權限的二進制文件時擁有此文件所有者的權限
SGID:當用戶執行具有x權限的二進制文件時擁有此文件所在組的權限,另外也可以對目錄設置此權限
SBIT:當用戶對某個目錄具有w和x權限時,在該目錄下建立的文件和目錄只有該用戶和root用戶纔可以刪除
聽着很繞,舉個例子:
比如普通用戶用passwd命令去修改密碼,而密碼是存在/etc/shadow文件中,而普通用戶是無法修改這個文件的,也就無法把新密碼保存進來。
但事實的結果是普通用戶是可以修改密碼,並且保存到/etc/shadow這個文件中的。

它的流程是這樣的:
一、先看下/usr/bin/passwd這個文件,也就時命令passwd。
-rwsr-xr-x. 1 root root 25980 2月 22 2012 /usr/bin/passwd
發現這個文件的擁有者是root,並且其他組的權限爲r-x,也就說普通用戶對其具有r和x的權限
二、既然普通用戶對其具有執行權限,因此當普通用戶執行這條命令時,由於s這個權限的存在,那麼在執行過程中會暫時獲取root的權限
三、由於只有root纔可以修改/etc/shadow文件,而在此次執行過程中已經得到了root用戶的支持,因此密碼會順利得寫入到這個文件中

那麼,怎樣才能增加這種權限呢?
可以參照第1節權限,使用chmod命令修改,命令如下:
SUID 4 SGID 2 SBIT 1
chmod 6777 這就添加了SUID和SGID權限,就是在原有權限的前面加了一個6

另外,還有可能出現rwsrwsrwt大寫的情況,變成rwSrwSrwT,出現這種情況是因爲用戶不具備文件的x權限,而又用上面的命令強加了特殊權限
這就矛盾了,因爲這三個權限的基礎是用戶對其有有x權限,現在連x權限都沒有,那有sst這個權限又有什麼用呢!


3、屬性
名稱大小:文件名、 大小,這兩個最好理解了就是文件名字和佔用空間大小
所屬屬性:擁有者、擁有組,如1中所述
時間屬性:mtime、ctime、atime
mtime:最近一次文件內容變化時間,是具體內容變化,不是屬性、權限變化,ls顯示的結果就是mtime
ctime:最近一次文件狀態變化時間,這裏就是屬性、權限那些變化時的時間
atime:最近一次讀取文件時間,如用cat去讀取文件的時候


4、隱藏屬性
隱藏屬性就是給文件設定特殊的標記使其達到某種需求

廢話不多說,先看下是什麼東西,再說它有什麼用!
查看隱藏屬性的命令是:lsattr 文件名,命令很好記憶,ls應該知道是幹嘛的,attribute就是屬性的意思,lsattr = ls + attribute
lsattr file
----ia------- file
這就顯示了文件file的隱藏屬性,可以看到有13個隱藏屬性,這個文件只有i、a這兩個隱藏屬性,其他屬性沒有就用-代替。

隱藏屬性是需要文件系統的支持的,我的機子是ext4格式,上面有15個隱藏屬性,在網上搜了下,沒找到關於ext4隱藏屬性的說明,因此上面這個例子是用
鳥哥的ext3格式下的例子,ext3格式下只有13個隱藏屬性。

那麼這個i、a是什麼意思呢?
i代表不能對這個文件進行刪除、改名、鏈接、寫入資料等等。
a代表這個文件只能增加數據不能刪除和修改數據。

增加隱藏屬性的命令如下:
chattr +a file 修改後file就具有了a這個隱藏屬性。
其他屬性我也不太清楚,鳥哥的書上面只列出了幾個,誰有ext4上面的隱藏屬性資料希望能發給我份,謝謝了!

5、ACL
ACL全稱Access Control List,訪問控制列表,這個東西又是什麼?

在傳統的權限控制中,比如ls -l diary,diary是我的一個文件。
-rw-rwx--- 1 root root 2 10月 1 15:16 diray
對於某個文件和目錄,它的使用者大致分爲三類:文件擁有者、文件擁有者所在組、其他組這三大類,這樣分就有一個很大的侷限性,就是不能個性化。

舉個例子:我有本日記,我現在想讓我的密友看,但是別的朋友不可以看
在這裏,“日記”就是文件或者目錄,“我”就是“日記”的所有者,文件所在組這裏沒提到,你可以認爲你是內心的獨白,“朋友”就是其他組
在傳統權限控制中,我想讓我的密友看,那麼就必須給其他組r權限,這樣一來,不光是密友可以看見了,所有朋友都能看見
那我能不能只讓密友看,而不讓其他人看呢!當然可以,這就是ACL目的所在,可以針對單個用戶、羣組進行特別權限控制。

先來看下傳統的權限:ls -l diary
-rw-rwx---. 1 root root 2 10月 1 15:16 diary
再來看下默認情況下ACL的設定:getfacl diary
# file: diary //文件名
# owner: root //文件擁擁有者
# group: root //文件擁所在組
user::rw- //文件擁有者對其的權限,::之間爲空代表文件所有者
group::rw- //文件所在組對其的權限,::之間爲空代表文件所在組
other::--- //其他組成員對其的權限,::之間爲空代表其他組成員

和ls -l的顯示結果一模一樣,只是換了種顯示方式,現在來設置只讓密友查看:setfacl -m u:miyou:r-- diary
設置完就只有密友可以查看,別的人就看不了了,再來看下ACL:getfacl diary
# file: diary
# owner: root
# group: root
user::rw-
user:miyou:r-- //多出了這一項
group::rw-
mask::rwx //又冒出了這麼個東東
other::---
mask的作用是這樣的:它規定了開放權限的範圍,比如我現在把umask設置爲r--,而我還想讓我的密友可以修改我的日記,於是密友變成了rw-,由於我最大隻開放了r權限,即使把密友設置爲rw-也只能有r權限,w無效。

再來看下一個好玩的東西:ls -l diary
-rw-rwx---+ 1 root root 2 10月 1 15:16 diary
最後的.變成了+號,這個是因爲我設置了ACL緣故,詳情請見我以前的一個求助貼的二樓回覆:

http://www.linuxdiyf.com/viewarticle.php?id=313688

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章