Випуск дозволів: як Apache може отримати доступ до файлів у моєму домашньому каталозі?


33

Я знаю, що дозволу на файли тут вже висвітлювалося, але я намагаюся обернутись концепцією для мого сценарію.

  • Я створив файли на старій установці ubuntu.
  • Я скопіював файли у свою нову установку ubuntu і поклав їх у свою веб-кореневу систему.
  • Коли я намагаюся запустити файли (вони PHP-файли), я отримую помилку, пов’язану з дозволами

У спробі виправити це, я припустив, що вони все ще повинні належати попередньому власнику, тому я побіг chown -Rдо каталогу, моє ім'я користувача як аргумент, щоб взяти право власності на всі файли в каталозі. Слід зазначити, що імена користувачів між новими та старими установками ubuntu були однаковими.

Коли я намагаюся запустити файли ще раз, та сама проблема: 500 помилок через проблеми дозволів. Хто-небудь може сказати мені, які інші кроки я повинен зробити?

Веб-корінь для моєї установки apache знаходиться в моїй домашній папці. Якщо я створюю нові файли у своїй веб-кореневій програмі, вони також працюватимуть, як очікувалося, це лише старі файли, які викликають проблему.


Я не впевнений, що дозволи файлу копіюються, коли файл є, чи може хтось це підтвердити? В іншому випадку, чи можна було б надати файли іншому користувачеві (або root), а потім відновити їх?
Tagger

Гаразд, я вирішив свою проблему, коли файли не виконуються, але я це зробив, просто запустившись chmod -R 777 dirу відповідний каталог. Я не можу допомогти думати theres кращий спосіб зробити це хоч
richzilla

3
777 дозволу у файлі дозволять всім писати ваші файли, що може призвести до пошкодження ваших сторінок або злому. Спробуйте спробувати 755, який зазвичай використовується для файлів php. Переконайтеся, що вам не потрібно активувати "дозволити виконання" для файлу, і в цьому випадку ви можете запустити chmod [filename] -x. Інформацію про команду chmod можна отримати, натиснувши наступне посилання: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

Що показує журнал помилок Apache?
Кіс Кук

Відповіді:


14

У каталогах над вашою веб-коренею повинен бути встановлений біт виконання, щоб Apache спускався в каталоги.

Якщо ваш Webroot знаходиться в /home/user/htdocs, то /, /home, /home/userі /home/user/htdocsповинні мати виконати набір бітів.


Наведене вище рішення "працює", але це не ідеально. Якщо ви створили папку, Apache не може до неї записати. Зворотне трапляється теж.

Це можна "виправити", встановивши umask 0007 і додавши себе до групи Apache (www-data, якщо я не помиляюся), так що новостворені файли та папки можуть записуватися групою.

Крім того, ви можете встановити альтернативний Apache MPM: Apache2 MPM ITK ( інформація про налаштування ) та відрегулювати конфігурацію, щоб Apache працював під вашим користувачем.


Докладні вказівки щодо того, як це зробити, дивіться у відповіді Марко нижче
варити

2
@hobs Ще краще, askubuntu.com/a/46371/6969
Lekensteyn

44

Якщо документи вашого сервера знаходяться в /home/$USER/public_htmlкаталозі, вам потрібно запустити

sudo chown -R www-data:www-data /home/$USER/public_html

надати право власності на папку DocumentRoot користувачеві www-dataта групі www-data.

Тоді ви можете додати себе до групи www-data

sudo adduser $USER www-data

Нарешті, вам потрібно зробити папку DocumentRoot доступною для запису як власником (користувачем www-data), так і вашим персоналом (як частиною www-dataгрупи):

sudo chmod -R 775 /home/$USER/public_html

Для зручності ви можете створити сценарій з ім’ям public_html_fix.sh:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Збережіть його всередині /home/$USER/binта зробіть його виконуваним за допомогою:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Потім ви викликаєте це коли потрібно, звідки в файловій системі ви опинитесь таким:

public_html_fix.sh

1
працював на мене ....
Еммануель Океке

Чудова відповідь! - З Прикладами та навіть зручним сценарієм та як використовувати / встановити Відмінно!
Андре

2
Якщо це робиться на спільному хості, як ви зупиняєте інших користувачів у www-dataгрупі читати ваші файли чи писати з цього питання?
jozxyqk

Дійсно приголомшлива відповідь ... ти врятувало мені життя
NullPoiитея

1
chmod -R 775 /home/$USER/public_htmlдійсно жахливо. find /home/$USER/public_html -type d -exec chmod 775 {} \;і find /home/$USER/public_html -type f -exec chmod 664 {} \;набагато краще
iharob

1

Окрім chmoding-файлів та редагування файлів apache .conf, я хочу сказати, що для мене нічого не працювало, оскільки мої файли були на розділі, який я автоматично встановив через nautilus. Це обмежує розділ лише для вашого користувача.

Щоб перевірити, чи ваші файли відображаються користувачем www-rootчи іншим користувачем apache (запустіть, ps -aux | grep apache2щоб перевірити), виконайте таку команду:

sudo su -l www-data -s /bin/bash

і спробуйте прочитати файл із кореня документа.

Якщо файл не читабельний, перевірте, що:

1) Ви встановили всі інші дозволи файлів

2) ви використали FollowSymlinksу своїх .confфайлах за потреби

3) Ви встановили DocumentRoot

3) змонтуйте свій розділ для всіх користувачів. Мені довелося відредагувати /etc/fstabта вказати свій розділ через його UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Потім демонтуйте свій розділ через nautilus і зробіть sudo mount -a. Якщо все добре, ваші файли зараз під /mnt. Оновіть свої посилання і ви будете готові йти.


1

Найкращий спосіб я завжди налаштовував це так, як це робить VirtualMin.

створити користувача та групу "мій будинок"

Зробіть користувачем apache членом групи "myhome". Не навпаки, як описані тут деякі пояснення

Отож зараз apache читає та виконує доступ до / home / myhome на додаток до / home / myhome / www

Користувач "myhome" має доступ до запису


Мені подобається ця концепція, але вона, здається, не працює для мене. Користувач www-dataналежить до групи myhome. Усі файли та каталоги мають групові дозволи на запис та належать до них myhome:myhome. Я перезапустив апаш. Apache все ще не може писати нові файли та папки. (Скрипт PHP з використанням www-data: www-data user / group)
Squarecandy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.