<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 13.3 主機的細部權限規劃:ACL 的使用 從[第五章](../Text/index.html)開始,我們就一直強調 Linux 的權限概念是非常重要的! 但是傳統的權限僅有三種身份 (owner, group, others) 搭配三種權限 (r,w,x) 而已,并沒有辦法單純的針對某一個使用者或某一個群組來設置特定的權限需求,例如前一小節最后的那個任務! 此時就得要使用 ACL 這個機制啦!這玩意挺有趣的,下面我們就來談一談: ### 13.3.1 什么是 ACL 與如何支持啟動 ACL ACL 是 Access Control List 的縮寫,主要的目的是在提供傳統的 owner,group,others 的 read,write,execute 權限之外的細部權限設置。ACL 可以針對單一使用者,單一文件或目錄來進行 r,w,x 的權限規范,對于需要特殊權限的使用狀況非常有幫助。 那 ACL 主要可以針對哪些方面來控制權限呢?他主要可以針對幾個項目: * 使用者 (user):可以針對使用者來設置權限; * 群組 (group):針對群組為對象來設置其權限; * 默認屬性 (mask):還可以針對在該目錄下在創建新文件/目錄時,規范新數據的默認權限; 也就是說,如果你有一個目錄,需要給一堆人使用,每個人或每個群組所需要的權限并不相同時,在過去,傳統的 Linux 三種身份的三種權限是無法達到的, 因為基本上,傳統的 Linux 權限只能針對一個用戶、一個群組及非此群組的其他人設置權限而已,無法針對單一用戶或個人來設計權限。 而 ACL 就是為了要改變這個問題啊!好了,稍微了解之后,再來看看如何讓你的文件系統可以支持 ACL 吧! * 如何啟動 ACL 事實上,原本 ACL 是 unix-like 操作系統的額外支持項目,但因為近年以來 Linux 系統對權限細部設置的熱切需求, 因此目前 ACL 幾乎已經默認加入在所有常見的 Linux 文件系統的掛載參數中 (ext2/ext3/ext4/xfs等等)!所以你無須進行任何動作, ACL 就可以被你使用啰!不過,如果你不放心系統是否真的有支持 ACL 的話,那么就來檢查一下核心掛載時顯示的信息吧! ``` [root@study ~]# dmesg &#124; grep -i acl [ 0.330377] systemd[1]: systemd 208 running in system mode. (+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ) [ 0.878265] SGI XFS with ACLs, security attributes, large block/inode numbers, no debug enabled ``` 瞧!至少 xfs 已經支持這個 ACL 的功能啰! ### 13.3.2 ACL 的設置技巧: getfacl, setfacl 好了,既然知道我們的 filesystem 有支持 ACL 之后,接下來該如何設置與觀察 ACL 呢? 很簡單,利用這兩個指令就可以了: * getfacl:取得某個文件/目錄的 ACL 設置項目; * setfacl:設置某個目錄/文件的 ACL 規范。 先讓我們來瞧一瞧 setfacl 如何使用吧! * setfacl 指令用法介紹及最簡單的“ u:帳號:權限 ”設置 ``` [root@study ~]# setfacl [-bkRd] [{-m&#124;-x} acl參數] 目標文件名 選項與參數: -m :設置后續的 acl 參數給文件使用,不可與 -x 合用; -x :刪除后續的 acl 參數,不可與 -m 合用; -b :移除“所有的” ACL 設置參數; -k :移除“默認的” ACL 參數,關于所謂的“默認”參數于后續范例中介紹; -R :遞回設置 acl ,亦即包括次目錄都會被設置起來; -d :設置“默認 acl 參數”的意思!只對目錄有效,在該目錄新建的數據會引用此默認值 ``` 上面談到的是 acl 的選項功能,那么如何設置 ACL 的特殊權限呢?特殊權限的設置方法有很多, 我們先來談談最常見的,就是針對單一使用者的設置方式: ``` # 1\. 針對特定使用者的方式: # 設置規范:“ u:[使用者帳號列表]:[rwx] ”,例如針對 vbird1 的權限規范 rx : [root@study ~]# touch acl_test1 [root@study ~]# ll acl_test1 -rw-r--r--. 1 root root 0 Jul 21 17:33 acl_test1 [root@study ~]# setfacl -m u:vbird1:rx acl_test1 [root@study ~]# ll acl_test1 -rw-r-xr--+ 1 root root 0 Jul 21 17:33 acl_test1 # 權限部分多了個 + ,且與原本的權限 (644) 看起來差異很大!但要如何查閱呢? [root@study ~]# setfacl -m u::rwx acl_test1 [root@study ~]# ll acl_test1 -rwxr-xr--+ 1 root root 0 Jul 21 17:33 acl_test1 # 設置值中的 u 后面無使用者列表,代表設置該文件擁有者,所以上面顯示 root 的權限成為 rwx 了! ``` 上述動作為最簡單的 ACL 設置,利用“ u:使用者:權限 ”的方式來設置的啦!設置前請加上 -m 這個選項。 如果一個文件設置了 ACL 參數后,他的權限部分就會多出一個 + 號了!但是此時你看到的權限與實際權限可能就會有點誤差! 那要如何觀察呢?就通過 getfacl 吧! * getfacl 指令用法 ``` [root@study ~]# getfacl filename 選項與參數: getfacl 的選項幾乎與 setfacl 相同!所以鳥哥這里就免去了選項的說明啊! # 請列出剛剛我們設置的 acl_test1 的權限內容: [root@study ~]# getfacl acl_test1 # file: acl_test1 &lt;==說明文檔名而已! # owner: root &lt;==說明此文件的擁有者,亦即 ls -l 看到的第三使用者字段 # group: root &lt;==此文件的所屬群組,亦即 ls -l 看到的第四群組字段 user::rwx &lt;==使用者列表欄是空的,代表文件擁有者的權限 user:vbird1:r-x &lt;==針對 vbird1 的權限設置為 rx ,與擁有者并不同! group::r-- &lt;==針對文件群組的權限設置僅有 r mask::r-x &lt;==此文件默認的有效權限 (mask) other::r-- &lt;==其他人擁有的權限啰! ``` 上面的數據非常容易查閱吧?顯示的數據前面加上 # 的,代表這個文件的默認屬性,包括文件名、文件擁有者與文件所屬群組。 下面出現的 user, group, mask, other 則是屬于不同使用者、群組與有效權限(mask)的設置值。 以上面的結果來看,我們剛剛設置的 vbird1 對于這個文件具有 r 與 x 的權限啦!這樣看的懂嗎? 如果看的懂的話,接下來讓我們在測試其他類型的 setfacl 設置吧! * 特定的單一群組的權限設置:“ g:群組名:權限 ” ``` # 2\. 針對特定群組的方式: # 設置規范:“ g:[群組列表]:[rwx] ”,例如針對 mygroup1 的權限規范 rx : [root@study ~]# setfacl -m g:mygroup1:rx acl_test1 [root@study ~]# getfacl acl_test1 # file: acl_test1 # owner: root # group: root user::rwx user:vbird1:r-x group::r-- group:mygroup1:r-x &lt;==這里就是新增的部分!多了這個群組的權限設置! mask::r-x other::r-- ``` * 針對有效權限設置:“ m:權限 ” 基本上,群組與使用者的設置并沒有什么太大的差異啦!如上表所示,非常容易了解意義。不過,你應該會覺得奇怪的是, 那個 mask 是什么東西啊?其實他有點像是“有效權限”的意思!他的意義是: 使用者或群組所設置的權限必須要存在于 mask 的權限設置范圍內才會生效,此即“有效權限 (effective permission)” 我們舉個例子來看,如下所示: ``` # 3\. 針對有效權限 mask 的設置方式: # 設置規范:“ m:[rwx] ”,例如針對剛剛的文件規范為僅有 r : [root@study ~]# setfacl -m m:r acl_test1 [root@study ~]# getfacl acl_test1 # file: acl_test1 # owner: root # group: root user::rwx user:vbird1:r-x #effective:r-- &lt;==vbird1+mask均存在者,僅有 r 而已,x 不會生效 group::r-- group:mygroup1:r-x #effective:r-- mask::r-- other::r-- ``` 您瞧,vbird1 與 mask 的集合發現僅有 r 存在,因此 vbird1 僅具有 r 的權限而已,并不存在 x 權限!這就是 mask 的功能了!我們可以通過使用 mask 來規范最大允許的權限,就能夠避免不小心開放某些權限給其他使用者或群組了。 不過,通常鳥哥都是將 mask 設置為 rwx 啦!然后再分別依據不同的使用者/群組去規范她們的權限就是了。 例題:將前一小節任務二中 /srv/projecta 這個目錄,讓 myuser1 可以進入查閱,但 myuser1 不具有修改的權力。答:由于 myuser1 是獨立的使用者與群組,因此無法使用傳統的 Linux 權限設置。此時使用 ACL 的設置如下: ``` # 1\. 先測試看看,使用 myuser1 能否進入該目錄? [myuser1@study ~]$ cd /srv/projecta -bash: cd: /srv/projecta: Permission denied &lt;==確實不可進入! # 2\. 開始用 root 的身份來設置一下該目錄的權限吧! [root@study ~]# setfacl -m u:myuser1:rx /srv/projecta [root@study ~]# getfacl /srv/projecta # file: srv/projecta # owner: root # group: projecta # flags: -s- user::rwx user:myuser1:r-x &lt;==還是要看看有沒有設置成功喔! group::rwx mask::rwx other::--- # 3\. 還是得要使用 myuser1 去測試看看結果! [myuser1@study ~]$ cd /srv/projecta [myuser1@study projecta]$ ll -a drwxrws---+ 2 root projecta 4096 Feb 27 11:29 . &lt;==確實可以查詢文件名 drwxr-xr-x 4 root root 4096 Feb 27 11:29 .. [myuser1@study projecta]$ touch testing touch: cannot touch `testing': Permission denied &lt;==確實不可以寫入! ``` 請注意,上述的 1, 3 步驟使用 myuser1 的身份,2步驟才是使用 root 去設置的! 上面的設置我們就完成了之前任務二的后續需求喔!這么簡單呢!接下來讓我們來測試一下,如果我用 root 或者是 pro1 的身份去 /srv/projecta 增加文件或目錄時,該文件或目錄是否能夠具有 ACL 的設置? 意思就是說,ACL 的權限設置是否能夠被次目錄所“繼承?”先試看看: ``` [root@study ~]# cd /srv/projecta [root@study ~]# touch abc1 [root@study ~]# mkdir abc2 [root@study ~]# ll -d abc* -rw-r--r--. 1 root projecta 0 Jul 21 17:49 abc1 drwxr-sr-x. 2 root projecta 6 Jul 21 17:49 abc2 ``` 你可以明顯的發現,權限后面都沒有 + ,代表這個 acl 屬性并沒有繼承喔!如果你想要讓 acl 在目錄下面的數據都有繼承的功能,那就得如下這樣做了! * 使用默認權限設置目錄未來文件的 ACL 權限繼承“ d:[u|g]:[user|group]:權限 ” ``` # 4\. 針對默認權限的設置方式: # 設置規范:“ d:[ug]:使用者列表:[rwx] ” # 讓 myuser1 在 /srv/projecta 下面一直具有 rx 的默認權限! [root@study ~]# setfacl -m d:u:myuser1:rx /srv/projecta [root@study ~]# getfacl /srv/projecta # file: srv/projecta # owner: root # group: projecta # flags: -s- user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::--- [root@study ~]# cd /srv/projecta [root@study projecta]# touch zzz1 [root@study projecta]# mkdir zzz2 [root@study projecta]# ll -d zzz* -rw-rw----+ 1 root projecta 0 Jul 21 17:50 zzz1 drwxrws---+ 2 root projecta 6 Jul 21 17:51 zzz2 # 看吧!確實有繼承喔!然后我們使用 getfacl 再次確認看看! [root@study projecta]# getfacl zzz2 # file: zzz2 # owner: root # group: projecta # flags: -s- user::rwx user:myuser1:r-x group::rwx mask::rwx other::--- default:user::rwx default:user:myuser1:r-x default:group::rwx default:mask::rwx default:other::--- ``` 通過這個“針對目錄來設置的默認 ACL 權限設置值”的項目,我們可以讓這些屬性繼承到次目錄下面呢! 非常方便啊!那如果想要讓 ACL 的屬性全部消失又要如何處理?通過“ setfacl -b 文件名 ”即可啦! 太簡單了!鳥哥就不另外介紹了!請自行測試測試吧! 問:針對剛剛的 /srv/projecta 目錄的權限設置中,我需要 1)取消 myuser1 的設置(連同默認值),以及 2)我不能讓 pro3 這個用戶使用該目錄,亦即 pro3 在該目錄下無任何權限, 該如何設置?答:取消全部的 ACL 設置可以使用 -b 來處理,但單一設置值的取消,就得要通過 -x 才行了!所以你應該這樣作: ``` # 1.1 找到針對 myuser1 的設置值 [root@study ~]# getfacl /srv/projecta &#124; grep myuser1 user:myuser1:r-x default:user:myuser1:r-x # 1.2 針對每個設置值來處理,注意,取消某個帳號的 ACL 時,不需要加上權限項目! [root@study ~]# setfacl -x u:myuser1 /srv/projecta [root@study ~]# setfacl -x d:u:myuser1 /srv/projecta # 2.1 開始讓 pro3 這個用戶無法使用該目錄啰! [root@study ~]# setfacl -m u:pro3:- /srv/projecta ``` 只需要留意,當設置一個用戶/群組沒有任何權限的 ACL 語法中,在權限的字段不可留白,而是應該加上一個減號 (-) 才是正確的作法!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看