Ніколи не потрібно запускати веб-сайт із домашнього каталогу . ВСЕ. Інакше вам доведеться надати веб-серверу можливість/home/
переглядати структуру каталогів, але також/home/$USER/
(домашній каталог вашого користувача, де ми можемо спробувати і побачити, що ще існує у вашому каталозі користувачів), а також будь-які інші папки там. Неправильно налаштований або неправильно налаштований або незапартований веб-сервер може призвести до такого масового витоку даних або втрати облікових даних та таких, які могли б піддавати вашим особистим даним та входу різні дані. Підхід до символьного посилання, який ви використовуєте, не допомагає ні з тієї ж причини, що й намагатися надати Apache дозволу на читання/home/andre/www/moodle
- веб-сервер повинен бути в змозі пройти ваш домашній каталог, щоб дістатися до місця, на яке /var/www/html
вказує символьне посилання , що все ще становить такий ризик для безпеки.
По-перше, використовуйте sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Це скопіює ваші файли у /var/www/html
та збереже подалі від власного домашнього каталогу. Потім ми повторно дозволумемо, щоб ви та веб-сервер мали доступ до всього, що знаходиться у цьому каталозі, та надамо вашому користувачеві повне читання / запис у всі файли та каталоги. Тоді вам доведеться лише працювати з /var/www/html
вашого сайту.
Це фактично, через чотири кроки, після того, як ви скопіюєте свої дані назад у /var/www/html
:
- Надайте Apache доступ до папок і файлів, щоб він міг обслуговувати сайт без 403 помилок.
- Дайте вашому користувачеві "власника" над файлами та папками та дайте собі можливість читати / писати всі файли та папки, а також можливість пересувати каталоги.
- (Необов’язково, але рекомендується) Налаштуйте його таким чином, щоб будь-які файли або папки, створені з цього приводу у всій структурі каталогу, мали встановити групу
www-data
.
- (Необов’язково) Остаточне очищення безпеки, коли ми встановлюємо дозволи, щоб ви та веб-сервер могли бачити дані про сайт, але інші користувачі не можуть отримати доступ до файлів чи структури каталогів для сайту.
(1) Дозволити Apache отримати доступ до папок і файлів.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Це рекурсивно встановлює "групу" www-data
для папок і файлів. Потім це дає дозвіл веб-серверу на повторний доступ та отримання доступу до структури кореневих каталогів документа на сайті ( +x
лише для каталогів). Потім він також забезпечує доступ до веб-сервера для читання для всіх файлів, тому дані про сайт можуть бути отримані.
Можливо, є деякі випадки, коли потрібно надати веб-серверу дозвіл на запис у файл або в каталог - цього можна досягти, зробивши це sudo chmod g+w /var/www/html/PATH
(де PATH
шлях до файлу чи папки в структурі каталогу, куди потрібно застосувати дозволу на запис для веб-сервера).
УВАГА : Є багато випадків, коли це може викрити "захищену" інформацію про конфігурацію сайту (наприклад, облікові дані доступу до бази даних тощо), і вам слід видалити "інші" дозволи на доступ до цих даних із тих окремих файлів або каталогів з наступне: sudo chmod o-rwx /var/www/html/FILEPATH
(заміна FILEPATH
шляху до відносно /var/www/html
папки для файлу).
Зауважте також, що вам, можливо, доведеться повторно запустити ці команди, якщо "нові файли" отримають 403 проблеми, щоб надати правильний дозвіл веб-серверу, щоб мати можливість отримувати доступ до файлів і папок, створених або скопійованих у та не отримують www-data
груповий набір правильно.
(2) Надайте власнику права читання / запису в папки та файли та дозвольте доступ до папок для проходження структури каталогів.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Замініть USER
в першій команді власне ім’я користувача!
Ми робимо тут три речі. По-перше, ми встановлюємо вашого користувача "власником" всіх файлів і каталогів /var/www/html
. Далі ми встановлюємо дозволи на читання та запис у папках та дозволяємо вам отримувати доступ до папок, щоб увійти в них ( +x
пункт у елементах каталогу). Потім ми встановлюємо всі файли для дозволу читання / запису для власника, які ми тільки що встановили.
(3) (Необов’язково) Переконайтеся, що кожен новий файл після цього створюється www-data
як користувач "доступу".
sudo find /var/www/html -type d -exec chmod g+s {} +
Це встановлює біт "set gid" для групи в каталогах. Файли та папки, створені всередині цих каталогів, завжди матимуть www-data
групу, дозволяючи веб-серверу отримати доступ.
(4) (Необов’язково) Остаточне очищення безпеки, якщо ви не хочете, щоб інші користувачі могли бачити дані
Нам потрібен ваш користувач, щоб побачити каталоги та файли. Для цього нам потрібен і веб-сервер. Ми можемо не бажати, щоб інші користувачі системи (крім root) бачили дані. Тож давайте не надавати їм доступу, і зробити так, щоб дані могли бачити лише ваш користувач та веб-сервер.
sudo chmod -R o-rwx /var/www/html/
ПРИМІТКА. Вам не доведеться повторно запускати це пізніше або редагувати дозволи для категорії "інші" тут. Якщо "інші" користувачі не можуть дістатися до них /var/www/html/
(у них немає необхідного +x
біту /var/www/html
для переходу структури файлів та каталогів, а також +r
біта для читання списків файлів), то дозволи на елементи під цим каталогом для інших користувачів або групи насправді не матимуть великого значення.
Існує також трохи менш інвазивне рішення для цього, хоча це не гарантується, що працює для всіх нових файлів, а також не гарантується, що він працює у всіх файлових системах , включаючи списки контролю доступу до файлів. Це дозволяє залишити право власності на файли www-data
на речі, але надає ефективні права власника на всі наміри та цілі, навіть якщо ви особисто не володієте файлами.
Це рішення є менш інвазивних, і дозволяє мати каталог і всі файли , що знаходяться в власності www-data:www-data
або , root:www-data
але і дати собі доступ. Він використовує списки контролю доступу , що дозволяє декільком користувачам мати дозволи без встановлення окремих груп. Це також дозволяє користувачам системи root
або www-data
власникам файлів, але також дозволяє додавати додаткові дозволи для кожного конкретного випадку та точно налаштовувати дозволи для певних користувачів, щоб вони могли читати речі, але не редагувати тощо.
Якщо припустити, що ми все ще працюємо /var/www/html/
, і ми не хочемо, щоб інші користувачі, окрім нас та системи (і root-коду) переглядали наші дані, нам потрібно буде виконати наступні дії:
- Поверніть право власності користувачеві системи веб-сервера
www-data
.
sudo chown -R www-data: www-data / var / www / html
- Рекурсивно дають вам читати / писати у файли, не даючи іншим користувачам (за винятком
www-data
і, root
звичайно), доступу до файлів.
sudo find / var / www / html -type f -exec setfacl -mu: YOURUSERNAME: rw -m other :: --- {} \;
- Рекурсивно дозволяйте собі читати / записувати / переходити по каталогах, видаляйте доступ до папок для інших користувачів (виключаючи
www-data
та root
) та встановлюйте це як ACL 'за замовчуванням' для нових файлів у каталогах.
sudo find / var / www / html -type d -exec setfacl -d -mu: YOURUSERNAME: rwx -mo :: --- {} \;
- Нам також потрібно встановити
setgid
біт для всіх каталогів, так що якщо ви створюєте файл, веб-сервер все ще може отримати доступ до нього як www-data
через групові дозволи.
sudo find / var / www / html -тип d -exec chmod g + x {} \;
А тепер у вас є доступ до всіх каталогів, і вам не доведеться відбирати доступ, www-data
який допомагає, оскільки веб-сервер все ще може створювати файли скрізь, як це потрібно (наприклад, на основі PHP, що мають власні каталоги кеш-пам'яті та подібні що потрібно створити і записати для належної роботи).
Єдиний застереження: якщо ви вручну створюєте нові файли, вам потрібно їх відповідно порушити, щоб надати право власності на веб-сервер. Це просто sudo chown www-data:www-data filename
, і списки контролю доступу все ще повинні мати ефективні права власника на файл.
Існує кілька випадків, коли мені доводилося це робити як систематичний пристрій для певного типу нестандартного доступу без зміни власників даного файлу. Це працює, але має свої головні болі, оскільки не кожна файлова система підтримує списки доступу до файлів.
+x
для файлів давав би виконавчі права, і ми не хочемо, щоб файли PHP виконувалися, обов'язково, через командний рядок PHP або як виконуваний файл на самому сервері - ми хочемо, щоб вони оброблялися PHP-аналізатором на веб-сервері (і ми не потрібні файли PHP для того,+x
щоб PHP-аналізатор міг їх читати та обробляти). Довідники потрібні+x
для того, щоб дозволити перехід через каталоги - тобто, якщо каталог не є,+x
а я не root, я не можу потрапити в каталог, що є проблемою, з якою у Apache не працювало з вашими посиланнями та вашим домом каталог.