Como definir permissões de arquivo para que novos arquivos herdam as mesmas permissões? [duplicado]

32

Eu tenho uma pasta na qual novas subpastas e arquivos serão criados automaticamente, por um script.

Desejo manter as permissões de usuário e grupo recursivamente para todas as novas pastas e arquivos colocados no diretório pai. Eu sei que isso envolve definir um bit, mas não consigo encontrar um comando que mostre exatamente o que preciso.

Isso foi o que eu fiz até agora:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Depois disso, quero que as 660 permissões sejam definidas recursivamente para quaisquer pastas e arquivos colocados em /path/to/parent .

No entanto, tudo o que tentei até agora falhou. Alguém pode ajudar por favor?

Na verdade, a bandeira octal 660 provavelmente nem está correta. As permissões que eu quero são:

  1. Os diretórios colocados sob /path/to/parent são eXecutáveis por usuários com permissões
  2. arquivos são lidos / graváveis pelo usuário e por membros do somegroup
  3. Arquivos e pastas em /path/to/parent NÃO são legíveis no mundo

Estou executando no Ubuntu 10.0.4 LTS.

Alguém pode ajudar por favor?

    
por oompahloompah 30.03.2011 / 11:02

3 respostas

8

O Grawity oferece uma excelente resposta, mas suspeito que a pergunta editada possa ter mudado um pouco as coisas.

Sugiro deixar o diretório de propriedade do usuário / grupo do apache. Isso provavelmente será apache ou link dependendo da sua distribuição.

por exemplo,

chown -R apache:apache /path/to/parent

Você pode fazer algo como link ou adicione-se ao grupo apache para garantir que você tenha acesso de grupo ao diretório. (Algo como usermod -aG apache username )

Eu não iria chmod -R o diretório inteiro porque você não quer scripts html ou jpg ou aleatórios outras coisas executáveis. Você deve alterar as permissões conforme necessário. (embora redefinir para 660 pode não ser a pior das ideias.)

Algo que você gostaria de experimentar é:

chmod o+w file

O 'o' significa 'outro' & 'w' significa 'escrever'. Você também pode ter 'u' para 'usuário' & 'g' para 'grupo', assim como 'r' & 'x' que são esperançosamente auto-explicativos. Você pode remover permissões usando '-' em vez de '+'.

    
por 30.03.2011 / 14:09
53

Os bits de permissão que você procura são 0770 e 0660.

  • rw- permissões → 110 binário → 6 octal

A propriedade do grupo pode ser herdada por novos arquivos e pastas criados em sua pasta / caminho / para / pai definindo o bit setgid usando chmod g+s desta forma:

chmod g+s /path/to/parent

Agora, todos os novos arquivos e pastas criados em / path / to / parent terão o mesmo grupo atribuído em / path / to / parent.

As permissões do arquivo POSIX são não herdadas; eles são dados pelo processo de criação e combinados com seu valor umask atual.

No entanto, você pode usar POSIX ACLs para conseguir isso. Defina a ACL padrão em um diretório:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Isso aplicará setfacl ao diretório / path / to / parent, -m odificando as ACLs -d efault - aquelas que serão aplicadas aos itens recém-criados. (Maiúscula X significa que apenas diretórios receberão o +x bit.)

(Se necessário, você pode adicionar um u:someuser:rwX ou g:someuser:rwX - preferivelmente um grupo - às ACLs.)

Nota: Em sistemas mais antigos que usam ext3 / ext4, você precisava montar o sistema de arquivos com a opção acl , caso contrário, ele ignoraria todas as ACLs e não permitiria a configuração de novas.

mount -o remount,acl /

Para definir isso permanentemente, use tune2fs -o acl <device> ou edite /etc/fstab .

    
por 30.03.2011 / 12:28
2

Acho que você está complicando demais o problema. Se o diretório de nível superior não estiver acessível para outras pessoas, outras pessoas não poderão criar arquivos na árvore. O acesso de gravação do grupo não é necessário se apenas o apache estiver fazendo a escrita.

Estas etapas devem fazer o que você quer (substitua o diretório nos comandos pelo diretório que você quer usar):

  • adicione umask 027 ao script de padrões do apache /etc/default/apache . Isso impedirá que outras pessoas acessem quaisquer arquivos ou diretório criados pelo apache.
  • execute chown www-data:www-data directory no diretório no qual você deseja que o apache possa gravar.
  • execute chmod 750 directory no diretório no qual você deseja que o apache possa gravar.

Permitir que o apache escreva em um diretório abre a capacidade de injetar todo tipo de malware no conteúdo que você está veiculando. Monitore o conteúdo desta árvore de diretórios apropriadamente.

    
por 30.03.2011 / 16:22