我可以使用ACL来覆盖我的umask,使在给定目录中创build的所有文件都可读?

假设我的umask是0077。

我有一个目录foo ,我想要对其应用特殊权限。 我在foo创build的所有文件应该是世界可读的,所有的目录应该是世界可读和可执行的。

目前,如果我创build一个文件,它将是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 

我想要的文件是0644和目录0755,无论我的umask:

 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挂载。 要检查这个,inputmount 。 你可以看到其他权限列出'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 / 
  2. 安装acl实用程序。 在Ubuntu / Debian上,这是:

     sudo apt-get install acl 
  3. 你的新朋友是setfaclgetfacl 。 使用setfacl更改目录的默认acl:

     setfacl -d -mo:r foo 

    -d设置默认值, -m修改acl, o:r授予“其他”读权限。 在一个目录上设置默认值大致等同于在一个目录中设置setgid ,而不是新创build的inheritance该组的文件,它们inheritance了acl。 在一起,setgid和acl可以是强大的,因为你可以授予组的默认权限,并获得新创build的文件属于该组,为一个有效的基于组的每个目录的umask。

  4. 检查你的工作: ls -l现在应该显示一个额外的“+”,表示除了标准的文件权限之外还有acl的存在。

     % ls -la foo/ drwxr--r--+ 

    您可以使用getfacl获取关于acl的详细信息。

     % getfacl foo # file: foo # owner: you # group: you user::rwx group::r-- other::r-- default:user::rwx default:group::--- default:other::r-- 

您也可以通过设置掩码ACL属性来强制目录的umask:

 setfacl -d -m mask:07 . 

只需安装OnDir并根据您的需要进行正确configuration即可。 我在这里回答了类似的问题。