我对目录权限有一个奇怪的问题。
在 C++ 应用程序中,我创建了一个文件夹,其中包含:
mkdir( "foldername", 777 );
但是我在尝试在该文件夹中创建文件时遇到问题,fopen()返回NULL并errno告诉我Permission denied. 所以我检查了,确实,我对创建的文件夹具有以下权限:dr----x--t
(根文件夹有drwxrwxr-x)
我查了一下,这个不寻常的t意思是“暂时的”,但我不知道这是什么意思。
chmod 777 foldername从 shell 完成这项工作并将属性设置为drwxrwxrwx,但我不能每次都手动完成。
问题:关于发生了什么的任何线索?为什么我的应用没有正确设置文件夹属性?这个“临时”属性的含义是什么?
(系统为 Ubuntu 12.04)
t不是“临时的”,这意味着设置了粘性位。来自man ls:
t [意味着] 粘滞位已设置(模式 1000),并且是可搜索或可执行的。(参见 chmod(1) 或 sticky(8)。)
此处设置粘滞位是因为您设置的是十进制777(八进制 1411),而不是八进制777(十进制 511)。您需要编写0777以使用八进制,而不是777.
您还应该注意,modeto 参数的最终效果mkdir还涉及对您的 umask 进行 AND 运算。来自man 2 mkdir:
参数 mode 指定要使用的权限。它以通常的方式由进程的 umask 修改:创建的目录的权限为 (mode & ~umask & 0777)。
我建议,如果这会影响你,你chmod以后mkdir而不是使用mode参数。
最后一句警告:模式 777 几乎从来都不是您真正想要做的。与其向所有用户全局打开目录,不如考虑在目录上设置适当的模式和所有者/组。如果您需要更复杂的规则,请考虑使用 ACL。
| 归档时间: |
|
| 查看次数: |
8476 次 |
| 最近记录: |