Linux: установить разрешение только для каталогов

Мне нужно изменить права доступа к каталогу htdocs в apache для определенной группы и с определенным чтением/записью/выполнением.

Каталоги должны иметь права доступа 775, а файлы — 664.

Если я сделаю рекурсивную 664 для htdocs, то все файлы и каталоги изменятся на 664.

Я не хочу менять каталоги вручную.

Есть ли способ изменить только файлы или каталоги?


person radicaled    schedule 13.06.2013    source источник


Ответы (7)


Используйте параметр find -type, чтобы ограничить действия файлами и каталогами. Используйте параметр -o, чтобы указать альтернативные действия для разных типов, поэтому вам нужно запустить find только один раз, а не отдельно для каждого типа.

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
person Barmar    schedule 13.06.2013
comment
Лучше использовать встроенную поддержку chmod. См. ответ Гордона Дэвиссона ниже. - person Jared Scott; 16.10.2014
comment
Этот метод лучше, потому что, если у вас беспорядок с «x» в основных файлах, которые в нем не нуждаются, этот метод find выше очищает их все, в то время как u=rwX,go=rX ничего не очищает. - person IncredibleHat; 24.01.2019
comment
Это сработало как шарм и сэкономило часы работы. Спасибо!! - person cbloss793; 21.11.2019

chmod может сделать это сам; символическое разрешение X означает «выполнить, если это имеет смысл», что обычно означает для каталогов, но не для файлов. Итак, вы можете использовать:

chmod -R u=rwX,go=rX /path/to/htdocs

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

person Gordon Davisson    schedule 13.06.2013
comment
Лучший ответ на сегодняшний день, если у вас достаточно рекурсивных каталогов, xargs в конечном итоге потерпит неудачу. проверьте справочные страницы для получения дополнительной информации. - person Jared Scott; 16.10.2014

Используйте find для поиска каталогов и применения к ним chmod:

find -type d | xargs chmod 775

Используйте тип f для файла:

find -type f | xargs chmod 775
person Amit Verma    schedule 13.06.2013

Я использую что-то похожее на решение, предоставленное Гордоном:

chmod -R ug=rw,o=r,a+X /path/to/folder/

Он всегда должен устанавливать 775 для папок и 664 для файлов, даже если ранее было установлено разрешение на выполнение для какого-либо файла.

person genna    schedule 18.10.2016

Вышеприведенный ответ Гордона верен, но если вы пытаетесь заблокировать доступ к дереву каталогов, он оставляет сценарии, исполняемые для владельца, также исполняемые для тех, кто получил заглавную букву X.

С использованием

find <path> -type d -exec chmod 775 {} +

or

find <path> -type d -exec chmod 755 {} +

безопаснее.

person MartinMlima    schedule 22.08.2015

пытаться:

find htdocs -type d -exec chmod 775 {} +
person RicardoE    schedule 13.06.2013
comment
Это устанавливает права доступа к каталогу, но не права доступа к файлу. - person Barmar; 16.10.2014

для каталогов или файлов

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
person wyx    schedule 03.02.2021