chmod -R sprawia, że ​​z jakiegoś powodu pliki w folderach potomnych są nieczytelne

22

Dostosowałem uprawnienia podczas konfigurowania niektórych motywów WordPress i uruchomiłem. chmod 664 -R theme-dir/*Działa dobrze na plikach w katalogu głównym katalogu, ale wszystkie pliki w podkatalogach teraz czytają w ten sposób, gdy ls -l:

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

Nie mogę cd do żadnego z podkatalogów, a także nie mogę ich usunąć. Nigdy czegoś takiego nie widziałem, czy ktoś kiedykolwiek wpadł na coś podobnego?

Sal
źródło
wygląda jak uszkodzony system plików.
alexus
1
biegchmod -R u+rwX,go+rX,go-w theme-dir/*
Dusan Bajic
@ dusan.bajic To działało, dziękuję. Nadal nie mam pojęcia, dlaczego tak się stało.
Sal
5
@alexus bez korupcji, po prostu trwa
pisklęta
Wydaje mi się, że widziałem coś takiego, gdy zmieniłem 644 (lub cokolwiek innego) w porównaniu do chmod, ale tak naprawdę nie mam ochoty testować ponownie na działającym systemie
Foon

Odpowiedzi:

49

Dostęp do zawartości katalogu (a ściślej metadanych pliku oprócz nazwy pliku) katalogu wymaga, aby katalog miał ustawiony bit wykonania.

Twój rekursywny chmod usunął to uprawnienie, więc utraciłeś ten dostęp. Jeśli korzystasz z -Ropcji chmodlepiej jest unikać numerycznej wersji uprawnień i zamiast tego uruchomić (na przykład żądany stan) chmod -R ug=rwX,o=rX. Litera X oznacza ustaw bit X tylko na katalogach lub plikach, które mają co najmniej jeden xzestaw. Możesz także użyć 644 ( u=rwX,go=rX), chyba że naprawdę potrzebujesz użytkowników do pisania.

Kevin Cathcart
źródło
6
X oznacza ustawienie X w katalogach i plikach, które już mają uprawnienia do wykonywania dla niektórych użytkowników (co zwykle jest tym, czego chcesz)
tomclegg
1
@tomclegg: Racja. Zaktualizowałem swoją odpowiedź odpowiednio. Wydaje się dziwne, że nigdy nie dodali prawdziwej wersji specyficznej dla katalogu ani nawet lepiej litery przedoperacyjnej (takiej jak u, g, o lub a), co oznacza, że ​​zastosują tę zmianę tylko do katalogów.
Kevin Cathcart
13

Z dokumentacji Wordpress :

Jeśli masz dostęp do powłoki na serwerze, możesz rekurencyjnie zmieniać uprawnienia do plików, używając następujących poleceń:

Dla katalogów:

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

Dla plików:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
Bentek
źródło
Przesada w przypadku tego konkretnego problemu, ale bardzo przydatna w innych przypadkach :)
nurchi
1
Zauważyłem w bardziej wrażliwych na bezpieczeństwo środowiskach (ostatnio Magento i Health Care Systems), że dostawcy i systemy open source przechodzą do rekomendowania TYLKO przy użyciu metody pliku, ponieważ daje to kontrolę nad powyższym warunkiem latawca, a także umożliwia dokładną kontrolę nad zastosowanie setuid, setgid, a także niesławnego „lepkiego bitu”. Prawdopodobnie jest więcej pracy, aby zmapować to dla tego przypadku użycia, ale odpowiedź na zakład jest zawsze najbezpieczniejszą metodą, która pozwala osiągnąć pożądany rezultat. Uważam, że Bezpieczeństwo powinno zawsze być cechą nr 1, jeśli jest to możliwe.
Bryan „BJ” Hoffpauir Jr.