Linux

我可以使用 ACL 覆蓋我的 umask 以使在給定目錄中創建的所有文件都可讀嗎?

  • July 2, 2020

假設我的 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 可以做到這一點。

  1. 確保您的文件系統使用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 /
  1. 安裝 acl 實用程序。在 ubuntu/debian 上,這是:
sudo apt-get install acl
  1. 你的新朋友是setfaclgetfacl。用於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--

引用自:https://serverfault.com/questions/349145