chmod -R по каким-то причинам делает файлы в дочерних папках нечитаемыми

22

Я настраивал разрешения при настройке некоторых тем WordPress и запускал. chmod 664 -R theme-dir/*Он работал нормально на файлах в корне каталога, но все файлы в подкаталогах теперь читаются так, когда я ls -l:

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

Я не могу перейти на любой из подкаталогов, и я также не могу удалить их. Я никогда не видел ничего подобного, кто-нибудь сталкивался с чем-то подобным?

Сэл
источник
выглядит как испорченная файловая система ..
alexus
1
бежатьchmod -R u+rwX,go+rX,go-w theme-dir/*
Душан Баджич
@ dusan.bajic Это сработало, спасибо. До сих пор не знаю, почему это произошло в первую очередь, хотя.
Сэл,
5
@alexus без коррупции, только завивка
птенцы
Я думаю, что видел что-то подобное, когда я делал chown 644 (или что-то еще) против chmod, но мне действительно не хочется снова тестировать на работающей системе
Foon

Ответы:

49

Для доступа к содержимому (или, более конкретно, к метаданным файла, за исключением имени файла) каталога требуется, чтобы в каталоге был установлен бит выполнения.

Ваш рекурсивный chmod удалил это разрешение, поэтому вы потеряли этот доступ. Если вы используете -Rопцию, chmodлучше избегать использования числовой версии разрешений и вместо этого запускать (используя в качестве примера желаемое состояние) chmod -R ug=rwX,o=rX. Заглавная буква X означает, что бит X установлен только для каталогов или файлов, в которых есть хотя бы один xнабор. Также вы можете захотеть использовать 644 ( u=rwX,go=rX), если вам не нужны групповые пользователи для написания.

Кевин Кэткарт
источник
6
X означает установить X для каталогов и файлов, которые уже имеют разрешение на выполнение для какого-либо пользователя (что обычно является тем, что вы хотите)
tomclegg
1
@tomclegg: верно. Я обновил свой ответ соответственно. Кажется странным, что они никогда не добавляли истинную версию каталога, или даже лучше букву перед операцией (например, u, g, o или a), что означает применить это изменение только к каталогам.
Кевин Кэткарт
13

Из документации Wordpress :

Если у вас есть доступ оболочки к вашему серверу, вы можете рекурсивно изменять права доступа к файлам, используя следующие команды:

Для каталогов:

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

Для файлов:

find /path/to/your/wordpress/install/ -type f -exec chmod 644 {} \;
bentek
источник
Излишнее решение
1
В более чувствительных к безопасности средах (в последнее время Magento и Health Care Systems) я заметил, что поставщики и системы с открытым исходным кодом переходят к рекомендациям ТОЛЬКО с использованием файлового метода, поскольку он дает вам кайтовый гранулярный контроль над вышеуказанным условием, а также позволяет детально контролировать применение setuid, setgid, а также пресловутый «липкий бит». Вероятно, это более сложная задача, чтобы наметить это для этого варианта использования, но ответ на ставку - всегда самый безопасный метод, который достигает желаемого результата. Я считаю, что безопасность всегда должна быть функцией № 1, если это возможно.
Bryan 'BJ' Hoffpauir Jr.