我有一堆长时间运行的脚本和应用程序,它们将输出结果存储在少数用户之间共享的目录中.我想要一种方法来确保在此共享目录下创建的每个文件和目录都自动拥有u=rwxg=rwxo=r
权限.
我知道我可以使用umask 006
我的各种脚本,但我不喜欢这种方法,因为许多用户编写自己的脚本,可能忘记自己设置umask.
我真的只是希望文件系统设置新创建的文件和目录,如果它在某个文件夹中,则具有一定的权限.这是可能吗?
更新:我认为可以使用默认ACL功能使用POSIX ACL来完成,但目前这一切都在我的脑海中.如果任何人都可以解释如何使用默认ACL,它可能会很好地回答这个问题.
我真的很感激在Ubuntu上追踪和诊断umask问题的任何帮助:
我正在php5-fpm
使用Apache 运行proxy_fcgi
.该进程使用0022的umask运行(通过让PHP将结果发送umask()
到文件[结果为'18'== 0022]确认).我想将其更改为0002,但无法追踪umask的来源.
使用umask 0002设置Apache,作为测试,如果我禁用proxy_fcgi
并运行上面的测试,我会得到一个u + g具有rw访问权限的文件(文件内容确认umask为'2'== 0002).
如果我sudo -iu fpmuser
和运行umask
结果都是0002.
系统信息:
到目前为止,我已经尝试了以下(每个系统重启和重新测试后):
umask 0002
到开头/etc/init.d/php5-fpm
--umask 0002
到start-stop-daemon
调用中/etc/init.d/php5-fpm
umask 0002
到用户.profile
的家中fpm
有些东西显然正在调整php-fpm进程的umask - 所以,我怎样才能开始跟踪强制umask 0022进入php-fpm进程的内容?
编辑(1):
/etc/login.defs
(请参阅如何设置系统范围的umask?)会影响其他地方的umask(例如,sudo
现在的comannds 有一个0002的umask),但是php-fpm仍会创建一个umask为0022的文件.请注意,我验证了session optional pam_umask.so
也出现了/etc/pam.d/common-session-noninteractive
,我测试了002和0002的umasks.编辑(2):
nginx
和复制问题php5-fpm
(使用unix套接字设置为监听模式'0666').编辑(3): …
我是唯一参与这个git项目的人.每次我在我的本地Ubuntu存储库编辑文件,然后推送到Bitbucket并拉到我的生产存储库,git将编辑的文件更改为-rwxrwxr-x 775.Apache不喜欢这个.
本地系统:Ubuntu Linux上的git版本1.8.1.2
制作系统:CentOS/Red Hat Linux上的git版本1.7.12
当我将权限修复为755时,请执行
git diff
Run Code Online (Sandbox Code Playgroud)
要么
git diff -p
Run Code Online (Sandbox Code Playgroud)
它没有任何表现.
在我的本地存储库中,权限是755,文件全部由haws拥有.在我的生产存储库中,所有其他权限保持在755,并且包括contact.php在内的所有文件都归我的用户名所有.
在本地和生产存储库中,我更改了core.filemode,试图阻止此行为,
core.filemode = false
Run Code Online (Sandbox Code Playgroud)
我在合作项目中遇到过这样的谜团,所以我真的很想了解发生了什么.
我也尝试在这里找到解决方案:防止Git更改权限拉取无效.
我的最终解决方案(感谢VonC的指导):
感谢VonC的好解释,我很勇敢地发现每次登录我的服务器时,我的umask都会回到0002.所以我创建了一个用户启动脚本(.bashrc或我的情况.bash_profile).设置的Linux主机
umask 0022
或使用符号表示法(稍微增加值)
umask u=a,g-w,o-w
Run Code Online (Sandbox Code Playgroud)
要么
umask u=a,go-w
Run Code Online (Sandbox Code Playgroud)
(允许用户拥有所有权限,禁止组和其他人的写权限)
这解决了我的问题.
我想为所有用户(在Ubuntu中)制作002系统范围的umask.我设法使用@ephemient提供的说明为所有普通用户这样做(来自这篇文章,谢谢!).但是我还有两个问题.
首先,当sudoing时,root用户似乎遵循它自己的设置,制作具有644(而不是664)权限的文件.
其次,apache用户(www-data)似乎也遵循它自己的设置(root使用的相同?),制作权限为644(而不是664)的文件.我不喜欢把umask 002
在/etc/apache2/envvars
,我宁愿改变设定分配002的umask首先到Apache.
我怎样才能解决最后两个问题?