如何指定通过程序创建的文件夹属于哪个所有者/组

如何指定通过程序创建的文件夹属于哪个所有者/组

首先介绍一下背景:我正在 Windows 7 机器上进行一些 Drupal 网站建设。Drupal 有一个图像模块,简而言之,它允许图像缓存。当您创建图像样式时,该模块会创建一个目录。例如,如果您创建样式,my_image_style它将自动创建一个文件夹sites/default/files/img/styles/my_image_style/and/some/other/folders/beneath。但是,创建的目录具有所有者:组Administrators:System和权限d--------+。其他一切,一直到 root 都是chrisrockwell:None。Apache(这是一个 WAMP5 设置)也是chrisrockwell:None

Drupal 模块需要在此目录中创建文件,但由于权限问题而无法创建。

那么,在这个设置中,我如何指定创建的目录属于哪个用户:组?

我不确定它是否有效果,但我主要在 cygwin 中做所有事情(移动、打开、vim)。

如果您需要更多信息,或者这更适合其他网站,请告诉我。

更新:如果我将整个站点目录 chmod 777,则唯一被拒绝权限的文件夹是 Drupal 脚本创建的 image_style 文件夹。

答案1

Cygwin 备注

这是一种解决方法,而不是答案。

我最近遇到了与 Cygwin 类似的问题。原因似乎是 Windows 用户和组与 Cygwin 用户和组的映射方式存在错误配置。具体来说,我看到“文件属性”对话框中的“安全”选项卡包含“组或用户名”条目,例如 OWNER 和 GROUP。我认为 Windows 不支持这些条目。

可能需要研究该mkpasswd实用程序并阅读有关 Windows ACL 的内容,以永久解决此问题。但是,到目前为止,我已经能够通过将 Windows ACL 重置为默认值来消除所有文件权限错误,如下所示:

wraptor: ~/tmp/su/find-xargs
$ icacls.exe . /reset /t
processed file: .
processed file: .\.search-dirs
processed file: .\.test
processed file: .\dirz
processed file: .\foo
processed file: .\moo
processed file: .\sensors
processed file: .\.test\test.java
processed file: .\dirz\3.java
processed file: .\foo\2.java
processed file: .\moo\1.java
processed file: .\sensors\light.java
Successfully processed 12 files; Failed processing 0 files

在此之后,有时需要遍历层次结构并重置权限位:

find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +

经过这些步骤后,这些文件就正确地由 windows-me 或管理员用户“拥有”,并且本机 windows 程序可以照常读取和写入这些文件。


尝试回答

除此之外,umask应该提到。它是在用户环境中设置的(或为程序中的进程设置的),并控制随后创建的文件和文件夹的权限。

例如(bash)

umask 0022

这将导致所有文件和文件夹都以 644 和 755 权限创建。

例如(python)

$ cat moo.py
import os
for _ in ('0022', '0002', '0077'):
        os.umask(int(_, 8))
        with open('moo.f-%s' % _, 'w') as f:
                f.writelines("moo\nfoo")

$ python moo.py; ll moo.f-*
-rw-rw-r-- 1 1K 2013-07-24 07:46 moo.f-0002
-rw-r--r-- 1 1K 2013-07-24 07:46 moo.f-0022
-rw------- 1 1K 2013-07-24 07:46 moo.f-0077

PHP 有一个“相同的”umask功能。

更多信息请点击这里:man 3p umask

答案2

我已经看到 Windows 中其他应用程序在以管理员身份运行时设置组时出现类似问题。我不知道如何修复原始目录创建问题,但您可以使用以下命令重新分配 cygwin 中所有目录的所有者和组chown

chown -R chrisrockwell:none my_image_style

相关内容