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


12

假设我的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

我该如何实现?


您没有尝试过搜索“每个目录的umask”,对吗?如果获得许可,我将为此投票,因为第三次点击是
严格

3
@BeeDee我确实看到了。我有其他有趣的方式,希望使用ACL。我宁愿不检查/更改每张CD上的umask,也不重写bash函数。
stickmangumby 2012年

Answers:


15

是的,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 /
    
  2. 安装acl实用程序。在ubuntu / debian上,这是:

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

    setfacl -d -m o:r foo
    

    -d设置默认值,-m修改acl并o:r授予“其他”阅读权限。在目录上设置默认值与在目录上设置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--
    

1
这似乎不适用于我。setfaclgetfacl返回预期的输出,但是父目录中只有目录(而非文件)继承了acl,即使这样,我的umask也优先于默认值(如果它们不是世界可读的,default:other::r--则不会让其他用户使用访问它们)。我是否错过了明显的事情?
stickmangumby 2012年

我发现的一件事(也许是麻烦):facl似乎使用了当前用户匹配的(用户,组,其他)中的第一个。也就是说,如果您属于文件的组,则将处理组的ACL,而不处理其他文件的ACL。如果您使用-d来应用目录,则仍应继承acl,..
user67641 2012年

1
嗯,再试一次,一切正常。抱歉,不确定我第一次做错了什么!谢谢:)
stickmangumby 2012年

3

您还可以通过如下设置掩码ACL属性来强制目录使用umask:

setfacl -d -m mask:07 .

-4

只需安装OnDir并根据需要对其进行正确配置。我已经回答了位于类似的问题在这里


这个问题没有提到有关使用终端遍历目录的任何内容,这是OnDir的目的。
Yarin 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.