譯者 | 布加迪
審校 | 重樓
本文介紹了Linux訪問控制列表(ACL),它相比標(biāo)準(zhǔn)的Linux權(quán)限提供了更大的靈活性。
經(jīng)常在Linux與微軟Windows之間快速切換的一些人認(rèn)識到兩者之間根本性的區(qū)別。其中一個區(qū)別是權(quán)限。標(biāo)準(zhǔn)的Linux權(quán)限非常簡單:指定一個用戶、一個用戶組,然后指定其他任何用戶或用戶組(稱為“others”),并根據(jù)需要授予讀取、寫入和執(zhí)行等權(quán)限。Windows的權(quán)限則要復(fù)雜得多,有嵌套、更多的訪問級別和共享(Share)權(quán)限組合。然而從許多方面來看,Windows權(quán)限在大規(guī)模環(huán)境下更靈活、更實用。
本文介紹Linux訪問控制列表(ACL),它相比標(biāo)準(zhǔn)的Linux權(quán)限提供了更大的靈活性。我將討論為多個獨(dú)立用戶和多個用戶組查看和配置ACL。你選擇的Linux發(fā)行版很可能已經(jīng)啟用了ACL(ACL實際上是文件系統(tǒng)的一項功能)。
簡要回顧標(biāo)準(zhǔn)的Linux權(quán)限
你可以使用chmod命令來配置標(biāo)準(zhǔn)的Linux權(quán)限。該命令可以設(shè)置以下三種訪問級別的任意組合:讀取、寫入和執(zhí)行。你可以將這些訪問級別授予三種身份:
- 用戶(所有者):擁有文件的一個用戶帳戶(默認(rèn)情況下,這是文件創(chuàng)建者)。
- 用戶組:在/etc/group文件中顯示的一組用戶。
- 其他:不是用戶或指定組成員的任何人。
圖1:ls -l命令顯示標(biāo)準(zhǔn)權(quán)限、所有權(quán)和組關(guān)聯(lián)
對于用戶和用戶組較少的獨(dú)立系統(tǒng)而言,這種方法綽綽有余。然而,在共享系統(tǒng)、啟用了文件共享功能的系統(tǒng)或SSH遠(yuǎn)程訪問頻繁的設(shè)備上,這種方法卻變得非常麻煩又笨拙。
這時候文件系統(tǒng)ACL功能就能派上用場。它允許你配置具有不同訪問級別的多個用戶及/或用戶組。
ACL如何提供幫助?
ACL允許你指定多個用戶帳戶,并為它們提供不同的訪問級別。這也意味著你不必將文件的所有權(quán)授予其中一個用戶。它為用戶組提供了同樣的靈活性。
ACL仍然可以識別讀取、寫入和執(zhí)行這三個標(biāo)準(zhǔn)訪問級別,因此你不必重新學(xué)習(xí)已經(jīng)了解的關(guān)于Linux權(quán)限的所有知識。實際上,ACL與標(biāo)準(zhǔn)權(quán)限協(xié)同工作,因此你仍將使用基本的用戶(u)、用戶組(g)和其他(o)等身份。你是在補(bǔ)充常規(guī)權(quán)限,而不是替換常規(guī)權(quán)限。
驗證你的發(fā)行版支持ACL
今天的現(xiàn)代Linux發(fā)行版通常默認(rèn)情況下支持ACL。ACL是文件系統(tǒng)的一項功能。標(biāo)準(zhǔn)的文件系統(tǒng)是ext4、XFS和Btrfs。它們都支持ACL。
你可能不需要檢查自己的Linux發(fā)行版是否支持ACL,但是如果你想確認(rèn),可以使用以下命令:
tune2fs -l /dev/sda1 | grep -i "Default mount options"
預(yù)計輸出中會看到列出的acl。
圖2:tune2fs命令顯示文件系統(tǒng)設(shè)置,包括是否啟用了ACL
注意,如果針對資源配置了ACL,ls -l輸出將顯示+字符。在下面這個例子中,ACL被應(yīng)用到file1.txt。
圖3:注意file1.txt的權(quán)限字符串末尾的+字符,表示應(yīng)用了ACL
使用setfacl命令
ACL配置命令是setfacl。它依賴標(biāo)準(zhǔn)的Linux命令語法:
command -options argument
參數(shù)將是你應(yīng)用訪問控制的那個文件或目錄。
setfacl命令有很多選項。以下列表含有一些最常見的選項:
- -m:修改指定的ACL。
- -x:從ACL中刪除條目。
- -b:從ACL中刪除所有條目。
- -d:為特定的目錄配置默認(rèn)ACL。
- -R:對所有目錄內(nèi)容遞歸應(yīng)用ACL。
然而,setfacl還依賴其他參數(shù)來定義新的訪問控制是否應(yīng)用于用戶或用戶組。
u:<username>
g:<groupname>
如果結(jié)合起來,這些設(shè)置允許管理員實現(xiàn)極其可靠而實用的權(quán)限配置。
下面的命令示例簡要介紹了如何使用setfacl。后面會介紹更具體的示例。
如果為用戶django配置ACL,將讀取(r)權(quán)限授予sample.txt資源,請輸入:
setfacl -m u:django:r sample.txt
針對用戶組engineering的類似示例,如下所示:
setfacl -m g:engineering:r sample.txt
一旦你配置了ACL設(shè)置,需要檢查它們以確保它們是正確的。這時候getfacl命令就有了用武之地。
使用getfacl命令
用于管理ACL的另一個相關(guān)命令是getfacl,它可以顯示當(dāng)前的ACL設(shè)置。
基本語法是getfacl和你想要查看的那個文件或目錄名:
getfacl / dev-projects
然而與大多數(shù)Linux命令一樣,getfacl支持許多有用的選項來修改輸出。這些包括:
- -c:只顯示ACL條目,并丟棄額外的頭信息。
- -R:遞歸顯示目錄內(nèi)容。
- -t:以更可讀的表格格式顯示輸出。
在審計或配置訪問控制時,使用getfacl檢查ACL設(shè)置。
圖4:getfacl命令顯示標(biāo)準(zhǔn)設(shè)置和ACL設(shè)置
ACL用例
下面你將看到ACL的兩個用例,包括場景和相關(guān)命令。考慮一下在你的環(huán)境中類似的情況會如何發(fā)生。
場景1
我將從一個簡單的示例開始入手:sales組對于/sales目錄需要擁有rwx權(quán)限,marketing組應(yīng)該只有r-x權(quán)限。其他人不需要訪問。(請記住,這些組需要執(zhí)行權(quán)限才能cd到目錄中。)
先向銷售組授予標(biāo)準(zhǔn)的rwx權(quán)限:
chown –R : sales /sales
chmod – r 770 /sales
接下來,為marketing組設(shè)置ACL:
setfacl -m g:marketing:r-x /sales
使用getfacl /sales確認(rèn)設(shè)置。
請記住,ACL與標(biāo)準(zhǔn)權(quán)限協(xié)同工作,因此不要忘記使用ls -l命令用于這兩個系統(tǒng)。除了顯示ACL條目外,getfacl命令還顯示標(biāo)準(zhǔn)權(quán)限。
場景2
想象另一種情況,你需要為不同的用戶和組授予不同的訪問級別。假設(shè)你有一個/dev-projects目錄,需要滿足以下要求:
- 所有者:擁有全面訪問權(quán)限(rwx)的root。
- 用戶組:擁有全面訪問權(quán)限(rwx)的developers。
- 額外用戶:擁有只讀取訪問權(quán)限(r-x)的alex(代碼審閱者)。
- 額外用戶:具有只讀取訪問權(quán)限(r-x)的silas(項目經(jīng)理)。
- 額外用戶組:擁有只讀取訪問權(quán)限(r-x)的contract-dev-team。
標(biāo)準(zhǔn)權(quán)限無法滿足這類需求,但ACL可以輕松滿足。
先設(shè)置標(biāo)準(zhǔn)權(quán)限:
chown -R root:developers /dev-projects
chmod - R 770 /dev-projects
接下來,為額外用戶和用戶組配置ACL條目:
setfacl -R u:alex:r-x /dev-projects
setfacl -R u:silas:r-x /dev/projects
setfacl -R g:contract-dev-team:r-x /dev/projects
通過使用getfacl和ls -l顯示設(shè)置來檢查結(jié)果。
結(jié)語
訪問控制列表(ACL)擴(kuò)展了Linux權(quán)限的功能,允許對不同的用戶和用戶組授予不同的訪問級別。雖然這使故障排查起來變得更復(fù)雜了,但為了增強(qiáng)靈活性是值得的。
ACL功能是文件系統(tǒng)的一項功能。今天的現(xiàn)代文件系統(tǒng)支持ACL,可能已經(jīng)啟用了它。確保創(chuàng)建一種根據(jù)訪問需求組織資源、從而有效地利用ACL的目錄基礎(chǔ)設(shè)施。一般來說,銷售團(tuán)隊所需的一切資源都應(yīng)該存在于一個父目錄中,營銷團(tuán)隊所需的一切資源都存在于另一個父目錄中。
ACL在大型部署環(huán)境中變得尤為重要,比如支持訪問需求各異的許多用戶和資源的主要文件服務(wù)器?,F(xiàn)在仔細(xì)檢查你的大型部署環(huán)境,看看ACL是否有助于更有效地控制資源訪問。在排查看似神秘的訪問問題時,別忘了考慮ACL。
原文標(biāo)題:A Guide to Linux Access Control Lists,作者:Damon M. Garn