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

35

Esta pergunta já tem uma resposta aqui:

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 pouco, mas não consigo encontrar um comando que mostre exatamente o que eu preciso.

Isto é o que eu fiz até agora:

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

Posteriormente, desejo que as permissões do 660 sejam definidas recursivamente para quaisquer pastas e arquivos inseridos /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. Diretórios colocados sob /path/to/parentsão executáveis ​​por usuários com permissões
  2. os arquivos são lidos / graváveis ​​pelo próprio usuário e por membros de algum grupo
  3. Arquivos e pastas /path/to/parentNÃO são legíveis pelo mundo

Estou executando no Ubuntu 10.0.4 LTS.

Alguém pode ajudar por favor?

oompahloompah
fonte

Respostas:

10

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

Eu sugeriria deixar o diretório de propriedade do usuário / grupo apache. Provavelmente será apache ou httpd, dependendo da sua distribuição.

por exemplo

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

Você pode fazer algo como https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian ou até se adicionar ao grupo apache para garantir que você ter acesso de grupo ao diretório (Algo como usermod -aG apache username)

Eu não faria chmod -Ro diretório inteiro porque você não deseja scripts html ou jpg ou outras coisas aleatórias executáveis. Você deve alterar as permissões conforme necessário. (embora redefini-lo para 660 possa não ser a pior das idéias.)

Algo que você pode querer experimentar é:

chmod o+w file

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

Caro
fonte
A solução mais simples, penso, é me adicionar ao grupo de usuários apache. Obrigado por sugerir isso. Não sei por que não pensei nisso!
oompahloompah
1
É o+wuma boa escolha aqui? Não deve as alterações ser limitado a ue g? Caso contrário, qual é o sentido de tentar manter a segurança no diretório e subdiretórios?
JWW
61

Os bits de permissão que você está procurando são 0770 e 0660.

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

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

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 como definido em / path / to / parent.


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

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

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

Isso se aplica setfaclpara o diretório / path / to / pai, -modifying os -dEFAULT ACLs - aqueles que serão aplicados a itens recém-criados. (Maiúsculas Xsignifica que apenas os diretórios receberão o +xbit.)

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


Nota: Em sistemas mais antigos que usam ext3 / ext4, você costumava montar o sistema de arquivos com a aclopção, 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.

gravidade
fonte
5
Obrigado por reservar um tempo para responder. Infelizmente, eu sou completamente novo em tudo isso, e o que você escreveu é indistinguível do grego para mim (desculpe a qualquer SO'ers grego!). Não entendi muito do que você escreveu. Eu tenho um processo na Web e quero dar ao Apache a capacidade de criar pastas e arquivos em uma pasta pai, onde apenas o Apache (o proprietário) e eu (o grupo) temos a capacidade de rw arquivos e mudar para diretórios. Todo mundo é banido. é tudo o que estou tentando fazer. O Apache precisa ser capaz de criar subpastas e armazenar arquivos nelas.
oompahloompah
Isso não funciona unzip?
datasn.io 6/03
2

Eu acho que você acabou de complicar o problema. Se o diretório de nível superior não estiver acessível para outras pessoas, elas não poderão criar arquivos dentro da árvore. O acesso de gravação em grupo não é necessário se apenas o apache estiver fazendo a gravação.

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

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

Permitir que o apache grave em um diretório abre a capacidade de injetar todo tipo de malware no conteúdo que você está servindo. Monitore o conteúdo dessa árvore de diretórios adequadamente.

BillThor
fonte