Linux - 如何提前设置新文件的组权限
Linux - how to set group permissions for new files in advance
我想告诉Linux在某个目录中创建的每个文件除了默认权限外还应该有g+w。
我怎么说呢?我需要那个目录的粘性位,不是吗?
(该目录已经有 drwsrwsr-x,我希望新文件能继承它,但显然它们没有...)
您可以在您的 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
有几种与权限操作相关的机制:
umask
允许您 禁用 权限位 每个应用程序 。它既不允许启用权限,也不允许按目录执行权限。它也不是全局设置。它是从父进程继承的每个进程属性。例如。您可以在 init 脚本中设置它的默认值,但是程序(尤其是守护进程)可能会覆盖它们的 umask
.
sticky bit
限制目录访问,以便该目录中的文件只能由 root 或目录所有者或文件所有者取消链接或重命名。
setgit bit
on directory 强制在该目录中创建的任何新文件将其组设置为在目录中设置的同一组。它允许覆盖组所有者,但不允许覆盖权限。
bsdgroups
或 grpid
安装选项为所有目录启用 setgit bit
行为,即使未设置 setgit bit
。
ACL
(访问控制列表)允许您为目录或文件设置每个用户和每个组的权限。当在该目录中创建新文件时,它们也从父目录继承。但是,ACL
权限相对于传统的 POSIX 权限被屏蔽了,传统的 POSIX 权限由文件创建者及其 umask
设置,因此您不能继承超过文件创建者所允许的权限。
除了 umask
之外的所有这些机制都是 linux 特定的。有关 setgit bit
和 ACLs
的一些详细信息,请参阅 this question。
我想这些都不能直接解决您的问题。你可以做什么:
- 配置创建这些文件的程序以使用足够的权限创建它们。例如,如果他们使用
0777
权限创建它们(或可以这样配置),则将 umask
设置为 000
应该就足够了。请参阅@KasunRathnayaka 的回答。
- 如果这不是一个选项,您可以使用
bindfs
tool with --create-with-perms
and related options. It allows to mount a directory to another directory and overwrite permissions and user/group owners when files are created or modified. See manual page。
我想告诉Linux在某个目录中创建的每个文件除了默认权限外还应该有g+w。
我怎么说呢?我需要那个目录的粘性位,不是吗? (该目录已经有 drwsrwsr-x,我希望新文件能继承它,但显然它们没有...)
您可以在您的 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
有几种与权限操作相关的机制:
umask
允许您 禁用 权限位 每个应用程序 。它既不允许启用权限,也不允许按目录执行权限。它也不是全局设置。它是从父进程继承的每个进程属性。例如。您可以在 init 脚本中设置它的默认值,但是程序(尤其是守护进程)可能会覆盖它们的umask
.sticky bit
限制目录访问,以便该目录中的文件只能由 root 或目录所有者或文件所有者取消链接或重命名。setgit bit
on directory 强制在该目录中创建的任何新文件将其组设置为在目录中设置的同一组。它允许覆盖组所有者,但不允许覆盖权限。bsdgroups
或grpid
安装选项为所有目录启用setgit bit
行为,即使未设置setgit bit
。ACL
(访问控制列表)允许您为目录或文件设置每个用户和每个组的权限。当在该目录中创建新文件时,它们也从父目录继承。但是,ACL
权限相对于传统的 POSIX 权限被屏蔽了,传统的 POSIX 权限由文件创建者及其umask
设置,因此您不能继承超过文件创建者所允许的权限。
除了 umask
之外的所有这些机制都是 linux 特定的。有关 setgit bit
和 ACLs
的一些详细信息,请参阅 this question。
我想这些都不能直接解决您的问题。你可以做什么:
- 配置创建这些文件的程序以使用足够的权限创建它们。例如,如果他们使用
0777
权限创建它们(或可以这样配置),则将umask
设置为000
应该就足够了。请参阅@KasunRathnayaka 的回答。 - 如果这不是一个选项,您可以使用
bindfs
tool with--create-with-perms
and related options. It allows to mount a directory to another directory and overwrite permissions and user/group owners when files are created or modified. See manual page。