chmod -R torna os arquivos em pastas filho ilegíveis por algum motivo


22

Eu estava ajustando as permissões ao configurar alguns temas do WordPress e executei chmod 664 -R theme-dir/*. Funcionou bem nos arquivos na raiz do diretório, mas todos os arquivos nos subdiretórios agora são lidos assim quando ls -l:

?---------  ? ? ? ?            ? core_functions.php
?---------  ? ? ? ?            ? css
?---------  ? ? ? ?            ? custom_functions.php
?---------  ? ? ? ?            ? images
?---------  ? ? ? ?            ? import_settings.php
?---------  ? ? ? ?            ? js
?---------  ? ? ? ?            ? options_trim.php
?---------  ? ? ? ?            ? page_templates
?---------  ? ? ? ?            ? post_thumbnails_trim.php
?---------+ ? ? ? ?            ? shortcodes

Não consigo fazer o cd para nenhum dos subdiretórios e também não posso excluí-los. Eu nunca vi nada assim, alguém já encontrou algo parecido?


olhares como sistema de arquivos corrompido ..
— alexus

1
executechmod -R u+rwX,go+rX,go-w theme-dir/*
— Dusan Bajic

@ dusan.bajic Isso funcionou, obrigado. Ainda não faço ideia do por que aconteceu em primeiro lugar.
— Sal

5
@alexus nenhuma corrupção, apenas perms
— pintos

Acho que vi algo assim quando eu tinha chown 644 (ou qualquer outro) versus chmod, mas eu realmente não sinto como testar novamente em um sistema de trabalho
— Foon

Respostas:


49

O acesso ao conteúdo (ou mais especificamente aos metadados do arquivo, exceto pelo nome do arquivo) de um diretório requer que o diretório tenha o bit de execução definido.

Seu chmod recursivo removeu essa permissão, então você perdeu esse acesso. Se você estiver usando a -Ropção de, chmodé melhor evitar usar a versão numérica das permissões e, em vez disso, execute (usando o estado desejado como exemplo) chmod -R ug=rwX,o=rX. O X maiúsculo significa definir o bit X apenas em diretórios ou arquivos que possuem pelo menos um xconjunto. Além disso, convém usar o 644 ( u=rwX,go=rX), a menos que você realmente precise que os usuários do grupo escrevam.


6
X significa conjunto X em diretórios e arquivos que já tem permissão de execução para algum usuário (que é geralmente o que você quer)
— tomclegg

1
@tomclegg: Certo. Eu atualizei minha resposta adequadamente. Parece estranho que eles nunca tenham adicionado uma versão específica do diretório real ou, melhor ainda, uma carta pré-operação (como u, g, o ou a) que significa aplicar essa alteração apenas aos diretórios.
— 22415 Kevin Kathcart

13

Na documentação do Wordpress :

Se você tiver acesso de shell ao seu servidor, poderá alterar as permissões de arquivo recursivamente usando os seguintes comandos:

Para diretórios:

find /path/to/your/wordpress/install/ -type d -exec chmod 755 {} \;

Para arquivos:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;

Um exagero para este problema particular, mas muito útil em outros casos :)
— nurchi

1
Notei em ambientes mais sensíveis à segurança (Magento e Health Care Systems recentemente) que fornecedores e sistemas de código aberto estão recomendando SOMENTE o uso do método file, uma vez que fornece controle granular por pipa sobre a condição acima e também permite controle refinado aplicação de setuid, setgid e também o infame "bit pegajoso". Provavelmente, é mais trabalhoso mapear isso para este caso de uso, mas a resposta da aposta é sempre o método mais seguro que alcança o resultado desejado. Acredito que a segurança deve sempre ser o recurso nº 1, se for possível.
— Bryan 'BJ' Hoffpauir Jr.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.