我有一堆长时间运行的脚本和应用程序,它们将输出结果存储在少数用户之间共享的目录中.我想要一种方法来确保在此共享目录下创建的每个文件和目录都自动拥有u=rwxg=rwxo=r权限.
我知道我可以使用umask 006我的各种脚本,但我不喜欢这种方法,因为许多用户编写自己的脚本,可能忘记自己设置umask.
我真的只是希望文件系统设置新创建的文件和目录,如果它在某个文件夹中,则具有一定的权限.这是可能吗?
更新:我认为可以使用默认ACL功能使用POSIX ACL来完成,但目前这一切都在我的脑海中.如果任何人都可以解释如何使用默认ACL,它可能会很好地回答这个问题.
我在一个运行Linux(Debian和Ubuntu)的实验室工作.用户名和组名由NIS和yp处理.我们有一些普通用户,每个人都可以访问运行实验,然后我们每个人都拥有自己的用户,此外还有一个我们都是其成员的公共组.
如何使/home/用户/组对共享驱动器(NFS)上的所有文件和目录进行读/写(/可执行)?基本上我想要的是
chmod -R 664 /home
chgrp -R commongroup /home
或者等价的umask 0002.
但是运行上述命令只能修复文件夹中的当前文件,而umask仅适用于单个用户,并且必须在每次用户登录时运行,即.在.bashrc文件中(这将通过gnome用于更改模式吗?).是否有系统范围的命令或设置可用于确保我们的commongroup对公共文件具有写入权限?
我有一个简单的代码,如:
sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path, path);
unlink(path);
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
bind(fd, (sockaddr*)(&address), sizeof(address));
listen(fd, 100);
我想以原子方式创建具有特定权限的Unix Domain Socket文件,例如:0777.手册没有说明有关套接字文件权限的umask任何内容.甚至,如果umask确实影响了套接字文件,那么它不是一种原子方式 - 在多线程程序中.
我希望,有一种方法可以在不使用umask()调用同步的情况下实现我的目标.
如何检查当前正在运行的程序的umask?
[更新:另一个流程,而不是当前流程.]
我有Git的问题.我在Google和StackOverflow中搜索了一个解决方案,但没有任何帮助.
问题是,每当git更新工作目录中的某个文件时(当我签出分支或合并分支时等),则更改文件权限,以便添加"可写入组"标志.如果文件可写入组,我的apache会显示"错误500".
示例:我有一个文件index.php.权限是"-rwxr-xr-x".当前(活动)分支是主分支.此文件在分支"develop"中已更改.我执行"git checkout develop"并且文件index.php获得权限"-rwxrwxr-x"(可写入组添加).我的网站停止工作.由于apache不允许在php文件中使用此标志(我不知道为什么但我无法更改此内容).
每当我执行"git checkout develop"时,我还需要执行"chmod gw index.php".我不喜欢执行两个命令(有时我忘记执行此操作,我的网站不起作用).
我该怎么做才能解决这个问题?我认为这与umask有关.我在网上找到了一些技巧,但没有任何效果.
谢谢.
umask 0022和022?之间有什么区别吗?我想把我的umask改成022.我该怎么做?
我已经设置了Git和Gitolite,并且在某些时候我记得曾在其中一个配置文件中看到过"umask"设置.这是否为我使用Git同步的所有文件设置了权限?这正是我所需要的.我在哪里可以找到它?
可能重复:
如何在java中设置umask?
在java中创建文件对象时,如何将文件权限设置为777(或任何其他任意权限)?
我更新了npm和cordova,之后我无法从终端运行任何cordova命令.这是我得到的错误:
Avinash-mac-mini:~ avinash$ cordova
module.js:339
    throw err;
Error: Cannot find module 'umask'
    at Function.Module._resolveFilename (module.js:337:15)
    at Function.Module._load (module.js:287:25)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/cordova/node_modules/npm/lib/utils/umask.js:1:75)
    at Module._compile (module.js:425:26)
    at Object.Module._extensions..js (module.js:432:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
我真的很感激在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-fpmumask 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): …