www-data разрешения?

108

Итак, у меня есть каталог в / var / www (называемый cake), и мне нужно разрешить www-данным записывать в него, но я также хочу писать в него (без использования sudo). Я боюсь менять права доступа на 777, если какой-то другой пользователь на моей машине (или хакер) попытается изменить файлы в этом каталоге. Как разрешить доступ только себе и www-данным Apache?

q3d
источник

Ответы:

168
sudo chown -R yourname:www-data cake

затем

sudo chmod -R g+s cake

Первая команда меняет владельца и группу.

Вторая команда добавляет атрибут s, который будет хранить новые файлы и каталоги внутри торта с такими же разрешениями группы.

Джеймс Л.
источник
3
Почему chmod g + s рекурсивен?
Бен Рогманс,
не знал о g + s. очень-очень удобно!
FRAGA
1
что пользователь может сделать с файлами, созданными с помощью www-data в самом торте, и файлами, созданными с помощью www-data в каталоге, созданном с помощью www-data? например, об операциях редактирования, переименования, удаления? как я понимаю, переименование и удаление невозможно внутри каталога, созданного с помощью www-data, а редактирование файлов, созданных с помощью www-data, для пользователя вообще невозможно.
qdinar 02
49

Как указано в статье Slicehost :

Настройка пользователя

Итак, начнем с добавления основного пользователя в группу пользователей Apache:

sudo usermod -a -G www-data demo

Это добавляет пользователя demo в группу www-data. Убедитесь, что вы используете обе опции -a и -G с командой usermod, показанной выше.

Вам нужно будет выйти и снова войти в систему, чтобы включить изменение группы.

Проверьте группы сейчас:

groups
...
# demo www-data

Итак, теперь я являюсь членом двух групп: Моя собственная (демо) и группа Apache (www-data).

Настройка папки

Теперь нам нужно убедиться, что папка public_html принадлежит основному пользователю (демонстрация) и является частью группы Apache (www-data).

Давайте настроим это:

sudo chgrp -R www-data /home/demo/public_html

Поскольку мы говорим о разрешениях, я добавлю небольшое примечание относительно команды sudo: это хорошая привычка использовать абсолютные пути (/ home / demo / public_html), как показано выше, а не относительные пути (~ / public_html). Это гарантирует, что sudo используется в правильном месте.

Если у вас есть папка public_html с символическими ссылками, будьте осторожны с этой командой, поскольку она будет следовать по символическим ссылкам. В тех случаях, когда есть рабочая папка public_html, измените каждую папку вручную.

Сетгид

Пока все хорошо, но помните, что команда, которую мы только что дали, влияет только на существующие папки. А что насчет чего-нибудь нового?

Мы можем установить право собственности, чтобы все новое также находилось в группе «www-data».

Первая команда изменит права доступа к каталогу public_html, включив бит "setgid":

sudo chmod 2750 /home/demo/public_html

Это гарантирует, что всем новым файлам будет присвоена группа www-data. Если у вас есть подкаталоги, вы захотите запустить эту команду для каждого подкаталога (этот тип разрешения не работает с '-R'). К счастью, новые подкаталоги будут созданы с автоматически установленным битом setgid.

Если нам нужно разрешить доступ для записи в Apache, например, в каталог загрузок, установите разрешения для этого каталога следующим образом:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

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

Квадз
источник
Это решение мне подходит. До этого я всегда запускал сервер с терминала под пользователем root. С помощью этого решения я могу загрузить файл в каталог с разрешением 770. Это здорово, потому что до этого я мог загружать файл только с разрешением 777.
Ифан Икбал,