Як я можу рекурсивно змінювати дозволи на файли та каталоги?


65

У мене на локальному комп’ютері встановлено ubuntu з apache / php / mysql.

Зараз у мене є каталог / var / www - всередині мене є кілька моїх поточних проектів. Я також працюю з openource (drupal, magento, sugarcrm).

Проблема, з якою я стикаюся, - це зміна дозволу на файл з терміналом. Колись мені потрібно змінити дозвіл на всю папку та її наступні підпапки та файли. Доводиться індивідуально змінювати, використовуючи

sudo chmod 777 foldername

Як я можу це зробити рекурсивно.

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

Відповіді:


90

Просто додайте -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.
ДжонМерліно

Крім того, якщо ви спробуєте використати 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 {} ";"

коли ви всередині папки, видаліть "ім'я папки"
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.

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


Використовуйте 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.