Como especificar a qual proprietário / grupo uma pasta programaticamente criada pertence

0

Um pouco de segundo plano: estou fazendo um site Drupal em uma máquina com Windows 7. O Drupal possui um módulo de imagem que, em resumo, permite o armazenamento de imagens em cache. Quando você cria um estilo de imagem, o módulo cria um diretório. Por exemplo, se você criar um estilo my_image_style , ele criará automaticamente uma pasta sites/default/files/img/styles/my_image_style/and/some/other/folders/beneath . No entanto, o diretório criado possui o proprietário: group Administrators:System com permissão d--------+ . Tudo o mais, indo até o root, é chrisrockwell:None . O Apache (essa é uma configuração do WAMP5) também é chrisrockwell:None .

O módulo Drupal precisa criar arquivos nesse diretório, mas não pode devido ao problema de permissões.

Então, nesta configuração, como eu especifico a qual usuário: o grupo ao qual o diretório criado pertence?

Eu não tenho certeza se isso tem algum efeito, mas eu faço praticamente tudo dentro do cygwin (se movimentando, abrindo, vim).

Por favor, deixe-me saber se você precisa de informações adicionais, ou se isso é mais adequado em outro site.

UPDATE: Se eu chmod 777 o diretório do site inteiro, a única pasta que eu obtenho permissão negada é a pasta image_style que é criada pelo script do Drupal.

    
por Chris Rockwell 19.07.2013 / 17:11

2 respostas

0

Observações do Cygwin

Esta é uma solução alternativa em vez de uma resposta.

Recentemente tive problemas parecidos com o Cygwin. A causa parece ser uma configuração incorreta em como os usuários e grupos do Windows são mapeados para usuários e grupos do cygwin. Especificamente, vi que a guia "Segurança" na caixa de diálogo "propriedades do arquivo" contém entradas "Grupo ou Nome de usuário", como OWNER e GROUP. Eu suponho que estes não são suportados pelo Windows.

Pode valer a pena pesquisar o utilitário mkpasswd e ler as ACLs do Windows para resolver isso permanentemente. No entanto, até agora eu fui capaz de me livrar de todos os erros de permissão de arquivo, redefinindo as ACLs do Windows para os padrões da seguinte forma:

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.java
processed file: .\foo.java
processed file: .\moo.java
processed file: .\sensors\light.java
Successfully processed 12 files; Failed processing 0 files

Depois disso, às vezes é necessário percorrer a hierarquia e redefinir os bits de permissão:

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

Após essas etapas, os arquivos são "de propriedade" corretos pelo windows-me ou o usuário Administrador e os programas nativos do Windows podem ler e gravar esses arquivos como de costume.

Tentativa de resposta

Além disso, umask deve ser mencionado. Ele é definido em um ambiente de usuários (ou para um processo em um programa) e controla as permissões de arquivos e pastas criados posteriormente.

por exemplo, (bash)

umask 0022

Isso fará com que todos os arquivos e pastas sejam criados com as permissões 644 e 755.

por exemplo, (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

O PHP tem uma função "idêntica" umask .

Mais informações aqui: man 3p umask

    
por 24.07.2013 / 07:57
1

Eu vi problemas semelhantes com outros aplicativos no Windows, configurando o grupo errado ao executar como administrador. Eu não sei como corrigir o problema de criação de diretório original, mas você pode reatribuir o proprietário e grupo para todos os diretórios no cygwin usando chown :

chown -R chrisrockwell:none my_image_style
    
por 23.07.2013 / 18:00