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

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.
Lekensteyn
источник
да, я добавил флаг 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
Я починил это. Последнее верно. Будьте осторожны, предоставляя другим доступ к созданным вами исполняемым файлам.
Райан Шиллингтон