2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

Como definir as permissões dos ficheiros para que os novos ficheiros herdem as mesmas permissões?

Tenho uma pasta na qual novas subpastas e ficheiros serão criados automaticamente, através de um script.

Quero manter as permissões de utilizador e grupo recursivamente para todas as novas pastas e ficheiros colocados no directório principal. Sei que isto envolve definir um pouco pegajoso, mas parece que não consigo encontrar um comando que mostre exactamente o que preciso.

Isto é o que tenho feito 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 ficheiros colocados em /path/to/parent.

Contudo, tudo o que tentei até agora falhou. Alguém me pode ajudar?

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

  1. directórios colocados sob /path/to/parent são eXecutable por utilizadores com permissões
  2. ficheiros são lidos/escritos pelo próprio utilizador e por membros de algum grupo
  3. Os ficheiros e pastas em /path/to/parent NÃO são legíveis em todo o mundo

Estou a correr no Ubuntu 10.0.4 LTS.

Alguém pode ajudar por favor?

Respostas (3)

64
64
64
2011-03-30 10:28:30 +0000

As permissões que procura são 0770 e 0660.

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

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

chmod g+s /path/to/parent

Agora, todos os novos ficheiros e pastas criados sob /caminho/para/parente terão o mesmo grupo atribuído que está definido em /caminho/para/parente.


POSIX as permissões dos ficheiros são não herdadas; são dadas pelo processo de criação e combinadas com o seu valor actual de umaask.

Contudo, pode usar POSIX ACLs para o conseguir. Coloque o default ACL num directório:

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

Isto aplicar-se-á setfacl ao directório /caminho/parente, -m modificando as -d ACLs por defeito - aquelas que serão aplicadas aos itens recém-criados. (Caixa X significa que apenas os directórios receberão a +x bit.)

(Se necessário, pode adicionar uma u:someuser:rwX ou g:someuser:rwX - de preferência um grupo - às LCA.)


Nota: Em sistemas mais antigos que utilizam ext3/ext4, costumava precisar de montar o sistema de ficheiros com a opção acl, caso contrário ignoraria todas as LCA e proibiria a definição de novas.

mount -o remount,acl /

Para definir isto permanentemente, usar tune2fs -o acl <device> ou editar /etc/fstab.

10
10
10
2011-03-30 12:09:01 +0000

Grawity dá uma excelente resposta, mas suspeito que a pergunta editada possa ter mudado ligeiramente as coisas.

Sugiro deixar o directório propriedade do utilizador/grupo apache. Isto será provavelmente ou apache ou httpd, dependendo da sua distribuição.

ex.

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

Pode então fazer algo como https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian ou mesmo adicionar-se ao grupo apache para garantir que tem acesso em grupo ao directório. (Algo como usermod -aG apache username)

eu não chmod -R o directório inteiro porque não quer scripts html ou jpg’s ou outras coisas aleatórias executáveis. Deverá alterar as permissões conforme necessário. (embora a reposição para 660 pode não ser a pior das ideias)

Algo que poderá gostar de experimentar é:

chmod o+w file

O ‘o’ significa ‘outro’ & ‘w’ significa ‘escrever’. Também pode ter ‘u’ para ‘utilizador’ & ‘g’ para ‘grupo’, bem como ‘r’ & ‘x’ que, espera-se, sejam auto explicativos. É possível remover permissões usando ‘-’ em vez de ‘+’.

2
2
2
2011-03-30 14:22:39 +0000

Penso que estás a complicar demasiado a questão. Se o directório de nível superior não for acessível a outros, então outros não serão capazes de criar ficheiros dentro da árvore. O acesso de escrita em grupo não é necessário se apenas o apache estiver a fazer a escrita.

Estes passos devem fazer o que deseja (substituir directório nos comandos pelo directório que deseja utilizar):

  • adicionar umask 027 ao guião por defeito do apache /etc/default/apache. Isto impedirá que outros acedam a quaisquer ficheiros ou directórios criados pelo apache. & - executar chown www-data:www-data directory no directório para o qual deseja que o apache possa escrever.
    & - executar chmod 750 directory no directório para o qual quer que o apache possa escrever.

  • permitir ao apache escrever num directório abre a possibilidade de injectar todo o tipo de malware no conteúdo que está a servir. Monitorizar adequadamente o conteúdo desta árvore de directórios.