设置目录的 umask,以便所有目录、可执行文件(.sh、.cmd、.bat)为 750,常规文件为 640

设置目录的 umask,以便所有目录、可执行文件(.sh、.cmd、.bat)为 750,常规文件为 640

需要创建并更改现有文件和目录,使得所有目录和可执行文件(*.sh、*.bat、*.cmd ..) 均为 750,常规文件均为 640。我需要在 shell 和 python 中执行此操作。

我喜欢将 umask 设置为 027,而现有目录的默认值为 022 .... 无法更改默认 umask。基本上需要设置特定目录的 umask

答案1

似乎你不能为目录设置 umask,请参阅类似的问答。

让我们读一读man umask看看你有哪些选择:

描述

umask() 将调用进程的文件模式创建掩码(umask)设置为 mask & 0777(即,只使用 mask 的文件权限位),并返回该掩码的先前值。

umask 由 open(2)、mkdir(2) 和其他创建文件的系统调用使用,用于修改新创建文件或目录的权限。具体来说,umask 中的权限从 open(2) 和 mkdir(2) 的模式参数中关闭。

或者,如果父目录具有默认 ACL(请参阅 acl(5)),则忽略 umask,继承默认 ACL,根据继承的 ACL 设置权限位,并关闭模式参数中缺少的权限位。例如,以下默认 ACL 相当于 umask 022:

u::rwx,g::r-x,o::r-x

将此默认 ACL 的效果与模式参数 0666 (rw-rw-rw-) 相结合,得到的文件权限将为 0644 (rw-r--r--)。

我想说你这里有三个选择:

  1. 不要管 umask 了,定期运行一个脚本来设置文件和目录所需的权限。
  2. umask 027在特定位置创建文件或目录时运行- 这将影响当前进程。umask 022完成后运行。
  3. 启用并使用 ACL。既然您标记了这个问题setfacl,那么您可能已经在考虑这种方法:

    setfacl -Rdm u::rwx,g::r-x,o::--- .
    touch a
    mkdir b
    

    运行ls -algetfacl *查看结果:

    -rw-r-----  a
    drwxr-x---+ b
    
    # file: a
    user::rw-
    group::r--
    other::---
    
    # file: b
    user::rwx
    group::r-x
    other::---
    default:user::rwx
    default:group::r-x
    default:other::---
    

笔记:默认权限不根据文件扩展名进行区分:如果您希望 .sh、.cmd 和 .bat 拥有 750 而其他文件拥有 640,则最好的选择是上面的 1。

相关内容