使用擁有權限控制的liunx,工作是一件輕松的任務。它可以定義任何user,group和other的權限。無論是在桌面電腦或者不會有很多使用者的虛拟linux執行個體,或者當使用者不願意分享他們之間的檔案時,這樣的工作是很棒的。然而,如果你是在一個大型組織,你運作了nfs或者samba服務給不同的使用者,然後你将會需要靈活的挑選并設定很多複雜的配置和權限去滿足你的組織不同的需求。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauU2Zz5WawFHc44WavlDd5lHM1cDNwIzLcdDMvwFMxQTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVZt5CevJWcu42Y4VnbpxWLuR2Lc9CX6MHc0RHaiojIsJye.jpg)
linux(和其他unix等posix相容的作業系統)有一種被稱為通路控制清單(acl)的權限控制方法,它是一種權限配置設定之外的普遍範式。例如,預設情況下你需要确認3個權限組:owner、group和other。而使用acl,你可以增權重限給其他使用者或組别,而不單隻是簡單的"other"或者是擁有者不存在的組别。可以允許指定的使用者a、b、c擁有寫權限而不再是讓他們整個組擁有寫權限。
acl支援多種linux檔案系統,包括ext2, ext3, ext4, xfs, btfrs, 等。如果你不确定你的檔案系統是否支援acl,請參考文檔。
<a target="_blank"></a>
首先,我們需要安裝工具來管理acl。
ubuntu/debian 中:
$ sudo apt-get install acl
centos/fedora/rhel 中:
# yum -y install acl
archlinux 中:
# pacman -s acl
出于示範目的,我将使用ubuntu server版本,其他版本類似。
安裝acl完成後,需要激活我們磁盤分區的acl功能,這樣我們才能使用它。
首先,我們檢查acl功能是否已經開啟。
$ mount
你可以注意到,我的root分區中acl屬性已經開啟。萬一你沒有開啟,你需要編輯/etc/fstab檔案,在你需要開啟acl的分區的選項前增加acl标記。
現在我們需要重新挂載分區(我喜歡完全重新開機,因為我不想丢失資料),如果你對其它分區開啟acl,你必須也重新挂載它。
$ sudo mount / -o remount
幹的不錯!現在我們已經在我們的系統中開啟acl,讓我們開始和它一起工作。
基礎acl通過兩條指令管理:setfacl用于增加或者修改acl,getfacl用于顯示配置設定完的acl。讓我們來做一些測試。
我建立一個目錄/shared給一個假設的使用者,名叫freeuser
$ ls -lh /
我想要分享這個目錄給其他兩個使用者test和test2,一個擁有完整權限,另一個隻有讀權限。
首先,為使用者test設定acl:
$ sudo setfacl -m u:test:rwx /shared
現在使用者test可以随意建立檔案夾,檔案和通路在/shared目錄下的任何地方。
現在我們增加隻讀權限給使用者test2:
$ sudo setfacl -m u:test2:rx /shared
注意test2讀取目錄需要執行(x)權限
讓我來解釋下setfacl指令格式:
-m 表示修改acl。你可以增加新的,或修改存在的acl
u: 表示使用者。你可以使用 g 來設定組權限
test 使用者名
:rwx 需要設定的權限。
現在讓我向你展示如何讀取acl:
$ ls -lh /shared
你可以注意到,正常權限後多一個+标記。這表示acl已經設定成功。要具體看一下acl,我們需要運作:
$ sudo getfacl /shared
最後,如果你需要移除acl:
$ sudo setfacl -x u:test /shared
如果你想要立即擦除所有acl條目:
$ sudo setfacl -b /shared
最後,在設定了acl檔案或目錄工作時,cp和mv指令會改變這些設定。在cp的情況下,需要添加“p”參數來複制acl設定。如果這不可行,它将會展示一個警告。mv預設移動acl設定,如果這也不可行,它也會向您展示一個警告。
使用acl讓在你想要分享的檔案上擁有更多的能力和控制,特别是在nfs/samba服務。此外,如果你的主管共享主機,這個工具是必備的。
原文釋出時間:2014-10-07
本文來自雲栖合作夥伴“linux中國”