Linux - 如何提前为新文件设置组权限

时间:2015-07-22 08:07:48

标签: linux permissions

我想告诉Linux,除了默认权限之外,在某个目录中创建的每个文件都应该有g + w。

我该怎么说?我需要该目录的粘性位,不是吗? (该目录已经有drwsrwsr-x,我希望新文件可以继承,但显然他们不会......)

2 个答案:

答案 0 :(得分:1)

有几种与权限操作相关的机制:

  • umask允许您禁用每个应用权限位。它既不允许启用权限也不允许每个目录执行此操作。它也不是一个全球性的环境。它是从父进程继承的每进程属性。例如。您可以在init脚本中设置其默认值,但程序(尤其是守护程序)可能会覆盖其umask
  • sticky bit限制目录访问,以便该目录中的文件只能由root或目录所有者或文件所有者取消链接或重命名。
  • 目录上的
  • setgit bit强制在该目录中创建的任何新文件将其组设置为在目录上设置的同一组。它允许覆盖组所有者,但不允许覆盖权限。
  • bsdgroupsgrpid mount选项为所有目录启用setgit bit行为,即使未设置setgit bit也是如此。
  • ACL(访问控制列表)允许您为目录或文件设置每用户和每组权限。在该目录中创建新文件时,它们也从父目录继承。但是,ACL权限会屏蔽传统POSIX权限,这些权限由文件创建者及其umask设置,因此您无法继承比文件创建者允许的权限更多的权限。

umask之外的所有这些机制都是特定于Linux的。有关setgit bitACLs

的一些详细信息,请参阅this question

我猜这些问题不是直接解决问题的方法。你能做什么:

  • 配置创建这些文件的程序,以便以足够的权限创建它们。例如,如果他们使用权限0777创建(或可以进行配置),则将umask设置为000就足够了。见@ KasunRathnayaka的答案。
  • 如果它不是一个选项,您可以使用bindfs工具和--create-with-perms及相关选项。它允许将目录挂载到另一个目录,并在创建或修改文件时覆盖权限和用户/组所有者。见manual page

答案 1 :(得分:0)

你可以在linuxbox中更改umask。正如你想要的那样。

Umask   Created Files       Created Directories
-------------------------------------------------------------
000     666 (rw-rw-rw-)     777     (rwxrwxrwx)
002     664 (rw-rw-r--)     775     (rwxrwxr-x)
022     644 (rw-r--r--)     755     (rwxr-xr-x)
027     640 (rw-r-----)     750     (rwxr-x---)
077     600 (rw-------)     700     (rwx------)
277     400 (r--------)     500     (r-x------)

例如:

root@kasunr:/usr/share/nginx/html/tt# umask 
0022
root@kasunr:/usr/share/nginx/html/tt# umask 0027
root@kasunr:/usr/share/nginx/html/tt# mkdir yy
root@kasunr:/usr/share/nginx/html/tt# ls
yy
root@kasunr:/usr/share/nginx/html/tt# ls -al
total 12
drwxr-xr-x 3 root root 4096 ජූලි   22 15:20 .
drwxr-xr-x 4 root root 4096 ජූලි   22 15:19 ..
drwxr-x--- 2 root root 4096 ජූලි   22 15:20 yy