Почему chmod 644 делает каталоги недоступными?

8

У меня есть куча медиа-файлов (которые должны быть только 644), которые были сочетанием различных разрешений. Некоторые из них были доступны для записи в группе или на глобальном уровне, поэтому я подумал, что, чтобы быть в безопасности, я верну их все в 644.

Проблема в том, что существует иерархия каталогов, и для всех каталогов, которые были обнаружены в этом, они ls -lотображаются как:

d????????? ? ? ? ?            ? Dirname

Если я chmod это 744, это исправлено.

Мой вопрос: что здесь происходит? Должны ли каталоги быть исполняемыми?

Оли
источник

Ответы:

7

Как отмечено в справочной странице по chmodотношению к разрешениям:

Буквы rwxXst выбирают биты режима файла для затронутых пользователей: чтение (r), запись (w), выполнение (или поиск каталогов) (x), выполнение / поиск, только если файл является каталогом или уже имеет разрешение на выполнение для некоторых пользователь (X)

Исполняемый бит в папке описан выше как разрешение «поиск»; т. е. бит выполнения просто позволяет вам получить доступ к папке в файловом браузере или перейти к папке из терминала, выполнив cdкоманду или запустив ls ~/folderсписок файлов в папке.

Папка должна быть исполняемой для владельца , хотя суперпользователь все равно сможет получить доступ к папке, так как при использовании sudoлюбой файл или каталог может быть доступен или удален. Кроме того, права доступа к каталогам и файлам описаны в этой полезной статье в Stackoverflow .

Также важно отметить, что «выполнение» папки не означает, что вы на самом деле выполняете какой-либо код или команды, например, когда запускается исполняемый двоичный файл или скрипт.

Для пользователя домашнего рабочего стола (хотя, возможно, не для вашего сервера) большинство папок в нем $HOMEимеют права на выполнение для пользователя, группы и других, если их просматривать stat ~/myfolder(выдержка ниже):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)

Стандартные разрешения для папок внутри $HOME - 755 или 775, а для файлов - 644. Однако остальная часть файловой системы будет отличаться. Опять же, папки должны иметь бит выполнения для владельца, иначе они не смогут открыть его. Важно соблюдать осторожность chmodпри изменении разрешений и особенно при рекурсивном выполнении, поскольку ситуация может быстро запутаться.

Для получения дополнительной информации, смотрите man chmodили справочные страницы Ubuntu онлайн , и эту статью в Superuser .

Десерт
источник
0

xДля открытия каталогов необходимо установить бит (для каталога, который рассматривается как поисковый бит). Многие люди обнаруживают, что когда они удаляют исполняемый бит со chmod -Rвсей папки, они больше не могут получить к нему доступ. Чтобы исправить это, я использую treeтак, чтобы я мог получить только набор папок и избежать кошмара установки всех файлов в качестве исполняемых файлов (опция для дерева есть -d List directories only.):

sudo tree -faid dirname | xargs -L1 -I{} sudo chmod +x "{}"

если у вас нет tree:

find  dirname -type d -exec chmod +x {} 

Предупреждение!!! Вы должны иметь это в виду:

  • использование chmod или chown recursive в корневом /каталоге или в системных каталогах разрушит вашу ОС (на самом деле все, что рекурсивно в /каталоге или системных каталогах, опасно)

  • это не очень хорошая практика безопасности, чтобы устанавливать разрешение таким образом

Эдуард Флоринеску
источник
@Melebius Хорошо, спасибо, я рад, что мы пришли к пониманию
Эдуард Флоринеску