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?

Sal
fonte
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.

Kevin Cathcart
fonte
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 {} \;
bentek
fonte
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.