Linux
我可以使用 ACL 覆蓋我的 umask 以使在給定目錄中創建的所有文件都可讀嗎?
假設我的 umask 是 0077。
我有一個目錄,
foo
我想對其應用特殊權限。我創建的所有文件foo
都應該是世界可讀的,所有目錄都應該是世界可讀和可執行的。目前,如果我創建一個文件,它將是 0600,一個目錄將是 0700:
$ cd foo/ $ touch file $ mkdir directory $ ls -l drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory -rw------- 1 nfm nfm 0 2012-01-12 16:15 file
無論我的umask如何,我都希望文件為0644,目錄為0755:
drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory -rw-r--r-- 1 nfm nfm 0 2012-01-12 16:15 file
我怎樣才能做到這一點?
是的,ACL 可以做到這一點。
- 確保您的文件系統使用
acl
. 要檢查這一點,請鍵入mount
。您應該會看到acl
列出的其他權限,例如/dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
如果它沒有使用 acl 掛載,請打開
/etc/fstab
並添加acl
到選項列表中:# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> /dev/sda1 / ext3 noatime,errors=remount-ro,acl 0 1
現在,使用新選項重新掛載正在執行的文件系統:
mount -v -o remount /
- 安裝 acl 實用程序。在 ubuntu/debian 上,這是:
sudo apt-get install acl
- 你的新朋友是
setfacl
和getfacl
。用於setfacl
更改目錄的預設 acl:setfacl -d -m o:r foo
-d
設置預設值,-m
修改 acl,並o:r
授予“其他”讀取權限。在目錄上設置 default 大致相當於在目錄上設置setgid,但新創建的文件不是繼承組,而是繼承 acl。setgid 和 acl 一起可以很強大,因為您可以將預設權限授予組,並讓新創建的文件屬於該組,以獲得有效的基於組的每個目錄的 umask。 4. 檢查你的工作:ls -l
除了標准文件權限之外,現在應該顯示一個額外的“+”表示 acl 的存在。% ls -la foo/ drwxr--r--+
您可以使用 獲取有關 acl 的詳細資訊
getfacl
。% getfacl foo # file: foo # owner: you # group: you user::rwx group::r-- other::r-- default:user::rwx default:group::--- default:other::r--