Как я могу рекурсивно изменить права доступа к файлам и каталогам?


65

У меня на локальном компьютере установлена ​​Ubuntu с помощью apache / php / mysql.

Теперь у меня есть каталог в / var / www - внутри которого у меня есть несколько моих текущих проектов. Я также работаю с opensource (drupal, magento, sugarcrm).

Проблема, с которой я сталкиваюсь, заключается в изменении разрешения файла с помощью терминала. Иногда мне нужно изменить разрешение всей папки и ее последующих подпапок и файлов. Я должен индивидуально изменить, используя

sudo chmod 777 foldername

Как я могу сделать это рекурсивно.

Кроме того, почему я всегда должен делать это 777 , я пробовал 755 для папок и 644 для файлов, но это не сработает.

Ответы:


91

Просто добавьте -Rопцию рекурсивного изменения прав доступа к файлам. Например, рекурсивно добавьте права на чтение и запись для владельца и группы foldername:

chmod -R ug+rw foldername

Разрешения будут как 664 или 775.

Установка разрешений на 777 крайне не рекомендуется . Вы получаете ошибки в Apache или в вашем редакторе относительно разрешений, потому что apache работает под другим пользователем ( www-data), чем вы.

Если вы хотите написать /var/www, добавьте себя в www-dataгруппу и соответственно установите права доступа umask +.

  • Добавьте себя в www-dataгруппу:sudo adduser $USER www-data
  • Изменить владельца файлов в /var/www:sudo chown -R www-data:www-data /var/www
  • Измените umask, чтобы вновь созданные файлы Apache предоставляли права на запись и группе. Добавить umask 007в /etc/apache2/envvars.
  • Даруй себя (технически, группа www-data) написать разрешения: sudo chmod -R g+w /var/www.

да, я добавил флаг r в неправильном месте, я добавил его после o + w для chmod.
JohnMerlino

Кроме того, если вы попытаетесь использовать chmod -r blablabla(маленький -r вместо -R), вы можете в конечном итоге удалить разрешения на чтение для всех ...
Кирилл Дюшон-Дорис

1
После этих инструкций рекомендуется проверить, что .htaccessдля apache нет файлов с разрешениями на запись. find /var/www/ | grep .htaccess | xargs ls -l,
reynoldsnlp

23

грубая сила:

sudo find foldername -exec chmod a+rwx {} ";"

Что не работает? Более конкретно!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

когда вы внутри папки, удалите «foldername»
Enrique

4
... и заменить его на.
djjeck

4

Вам не нужно 777 для чего-либо. В худшем случае вам необходимо изменить владельца определенных файлов и каталогов на пользователя "www-data".

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

Если вы используете метод членства в группе Лекенштейна, измените 755 на 775 и 644 на 664, соответственно, выше, а затем принудительно закрепите группу:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s

3

Вы можете изменить подпапки и файлы на Nautilus. Как вы можете видеть на изображении ниже. Чтобы иметь разрешения на кнопки, вы можете включить опцию на Ubuntu Tweak.

введите описание изображения здесь


Используйте, LANG=C [command]чтобы получить перевод на английский.
Лекенстейн

1

Если вы хотите, чтобы все ваши файлы были доступны для чтения всему миру (т. Е. Это просто статический набор файлов / изображений HTML), используйте эту команду:

chmod -R a+r <base directory>

Это будет рекурсивно просматривать все файлы и подкаталоги и добавлять к ним разрешение на чтение.

ВНИМАНИЕ : Не делайте этого для исполняемых файлов! Только файлы, которые должны быть видны всем.


Вы говорите «ничего не делай chmod -R a+x» или «не делай chmod -R a+rс исполняемыми файлами»?
aleclarson

Я починил это. Последнее верно. Будьте осторожны, предоставляя другим доступ к созданным вами исполняемым файлам.
Райан Шиллингтон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.