天天看點

【02-05】權限管理 [chown|chmod|getfacl|setfacl | chattr|lsattr ]

權限管理 

chown

chown 指令: 設定檔案所有者和檔案關聯組的指令
chown [-cfhvR] [--help] [--version] user[:group] file...

user : 新的檔案擁有者的使用者 ID
group : 新的檔案擁有者的使用者組(group)
-c : 顯示更改的部分的資訊
-f : 忽略錯誤資訊
-h :修複符号連結
-v : 顯示詳細的處理資訊
-R : 處理指定目錄以及其子目錄下的所有檔案
--help : 顯示輔助說明
--version : 顯示版本      

 chmod

chmod 指令:控制使用者對檔案的權限的指令

chmod [-cfvR] [--help] [--version] mode file...

u 表示該檔案的擁有者,
g 表示與該檔案的擁有者屬于同一個群體(group)者,
o 表示其他以外的人,
a 表示這三者皆是。

+ 表示增權重限、
- 表示取消權限、
= 表示唯一設定權限。

r 表示可讀取,
w 表示可寫入,
x 表示可執行,
X 表示隻有當該檔案是個子目錄或者該檔案已經被設定過為可執行。

7 讀 + 寫 + 執行 rwx 111
6 讀 + 寫 rw- 110
5 讀 + 執行 r-x 101
4 隻讀 r-- 100
3 寫 + 執行 -wx 011
2 隻寫 -w- 010
1 隻執行 --x 001
0 無 --- 000

其他參數說明:
-c : 若該檔案權限确實已經更改,才顯示其更改動作
-f : 若該檔案權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目前目錄下的所有檔案與子目錄進行相同的權限變更(即以遞歸的方式逐個變更)
--help : 顯示輔助說明
--version : 顯示版本      

getfacl

getfacl 指令:檢視(擷取)檔案通路控制清單(ACL清單)
getfacl [-aceEsRLPtpndvh] 檔案 ...
getfacl [-aceEsRLPtpndvh] -

-a, --access 僅顯示檔案通路控制清單
-d, --default 僅顯示預設的通路控制清單
-c, --omit-header 不顯示注釋表頭
-e, --all-effective 顯示所有的有效權限
-E, --no-effective 顯示無效權限
-s, --skip-base 跳過隻有基條目(base entries)的檔案
-R, --recursive 遞歸顯示子目錄
-L, --logical 邏輯周遊(跟随符号連結)
-P, --physical 實體周遊(不跟随符号連結)
-t, --tabular 使用制表符分隔的輸出格式
-n, --numeric 顯示數字的使用者/組辨別
-p, --absolute-names 不去除路徑前的 '/' 符号
-v, --version 顯示版本并退出
-h, --help 顯示本幫助資訊      

setfacl

setfacl 指令:設定檔案通路控制清單(ACL清單)
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file

-m, --modify=acl     更改檔案的通路控制清單
-M, --modify-file=file  從檔案讀取通路控制清單條目更改
-x, --remove=acl     根據檔案中通路控制清單移除條目
-X, --remove-file=file  從檔案讀取通路控制清單條目并删除
-b, --remove-all     删除所有擴充通路控制清單條目
-k, --remove-default   移除預設通路控制清單
    --set=acl   設定替換目前的檔案通路控制清單
  --set-file=file 檔案中讀取通路控制清單條目設定
  --mask       重新計算有效權限掩碼
-n, --no-mask   不重新計算有效權限掩碼
-d, --default 應用到預設通路控制清單的操作
-R, --recursive 遞歸操作子目錄
-L, --logical 依照系統邏輯,跟随符号連結
-P, --physical 依照自然邏輯,不跟随符号連結
--restore=file 恢複通路控制清單,和“getfacl -R”作用相反
--test 測試模式,并不真正修改通路控制清單屬性
-v, --version 顯示版本并退出
-h, --help 顯示本幫助資訊      

lsattr

lsattr 指令:顯示檔案屬性
lsattr [-adlRvV][檔案或目錄...]

-a  顯示所有檔案和目錄,包括以"."為名稱開頭字元的額外内建,現行目錄"."與上層目錄".."。
-d  顯示,目錄名稱,而非其内容。
-l  此參數目前沒有任何作用。
-R  遞歸處理,将指定目錄下的所有檔案及子目錄一并處理。
-v  顯示檔案或目錄版本。
-V  顯示版本資訊。      

chattr

chattr 指令:改變檔案屬性
chattr [ -RVf ] [ -v version ] [ mode ] 檔案...
 
a:讓檔案或目錄僅供附加用途;
b:不更新檔案或目錄的最後存取時間;
c:将檔案或目錄壓縮後存放;
d:将檔案或目錄排除在傾倒操作之外;
i:不得任意更動檔案或目錄;
s:保密性删除檔案或目錄;
S:即時更新檔案或目錄;
u:預防意外删除。

-R:遞歸處理,将指令目錄下的所有檔案及子目錄一并處理;
-v<版本編号>:設定檔案或目錄版本;
-V:顯示指令執行過程;
+<屬性>:開啟檔案或目錄的該項屬性;
-<屬性>:關閉檔案或目錄的該項屬性;
=<屬性>:指定檔案或目錄的該項屬性。      

 案例:

建立使用者user1、user2、user3。在/data/下建立目錄test
    //建立user1……3使用者
        [root@host ~]# name=user;for i in {1..3};do useradd $name$i;done
    //建立data和test目錄
        [root@host ~]# mkdir -p /data/test

(1)、目錄/data/test屬主、屬組為user1
    //檢視目前目錄屬主屬組
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 root root 4096 Oct 30 22:51 /data/test/
    //修改屬主屬組為user1
        [root@host ~]# chown user1:user1 /data/test/
    //檢視修改後的目錄屬主屬組
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 user1 user1 4096 Oct 30 22:51 /data/test/

(2)、在目錄屬主、屬組不變的情況下,user2對檔案有讀寫權限
    //檢視預設的權限
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 user1 user1 4096 Oct 30 22:51 /data/test/
        //檢視預設的acl權限
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rwx
        group::r-x
        other::r-x
    //設定user2使用者對/data/test/目錄具有讀寫權限
        [root@host ~]# setfacl -m u:user2:rw /data/test/
    //檢視修改後的acl權限
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rwx
        user:user2:rw-
        group::r-x
        mask::rwx
        other::r-x
 
(3)、user1在/data/test目錄下建立檔案a1.sh, a2.sh, a3.sh, a4.sh,
設定所有使用者都不可删除1.sh,2.sh檔案、除了user1及root之外,所有使用者都不可删除a3.sh, a4.sh

    //建立所需要的檔案病檢視
        [root@host ~]# touch /data/test/a{1..4}.sh
        [root@host ~]# ls /data/test/
        a1.sh a2.sh a3.sh a4.sh

     
    //修改檔案屬性,給1和2檔案增加不可删除屬性并檢視
        [root@host ~]# chattr +i /data/test/a{1..2}.sh
        [root@host ~]# lsattr /data/test/
        -------------e-- /data/test/a3.sh
        ----i--------e-- /data/test/a1.sh
        -------------e-- /data/test/a4.sh
        ----i--------e-- /data/test/a2.sh
    //對檔案嘗試删除,删除失敗
        [user2@host ~]# rm /data/test/a1.sh
        rm: remove regular empty file ‘/data/test/a1.sh’? y
        rm: cannot remove ‘/data/test/a1.sh’: Operation not permitted
     
    //為檔案加上sticky标志
    //設定sticky bit位後,就算使用者對目錄具有寫權限,但也隻能添加檔案而不能删除檔案
        [root@host ~]# chmod o+t /data/test/a{3..4}.sh
        [root@host ~]# ll /data/test/
        total 0
        -rw-r--r--. 1 root root 0 Oct 31 00:14 a1.sh
        -rw-r--r--. 1 root root 0 Oct 31 00:14 a2.sh
        -rw-r--r-T. 1 root root 0 Oct 31 00:14 a3.sh
        -rw-r--r-T. 1 root root 0 Oct 31 00:14 a4.sh
    //嘗試删除
        [test1@host ~]$ rm /data/test/a3.sh
        rm: cannot remove ‘/data/test/a3.sh’: Permission denied


(4)、user3增加附加組user1,同時要求user1不能通路/data/test目錄及其下所有檔案
    //檢視目前user3組資訊
        [root@host ~]# id user3
        uid=1004(user3) gid=1004(user3) groups=1004(user3)
    //為user3增加附加組user1
        [root@host ~]# usermod -G user1 user3
    //确認增加附加組的user3
        [root@host ~]# id user3
        uid=1004(user3) gid=1004(user3) groups=1004(user3),1002(user1)
    //檢視目前檔案夾情況
        [root@host ~]# ll -d /data/test/
        drwxrwxr-x+ 2 user1 user1 4096 Oct 31 00:41 /data/test/
    //修改權限并去掉x權限
        [root@host ~]# chmod -x /data/test/
        [root@host ~]# ll -d /data/test/
        drw-rw-r--+ 2 user1 user1 4096 Oct 31 00:41 /data/test/
    //切換user1并嘗試通路檔案夾
        [root@host ~]# su - user1
        [user1@host ~]$ cd /data/test/
        -bash: cd: /data/test/: Permission denied

 
(5)、清理/data/test目錄及其下所有檔案的acl權限
    //檢視/data/test/預設acl權限表
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rw-
        user:user2:rw-
        user:user3:rw-
        group::r--
        other::r--
    //遞歸删除擴充通路所有權限
        [root@host ~]# setfacl -R -b /data/test/
    //檢視删除後的情況
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rw-
        group::r--
        other::r--      

繼續閱讀