www-данные разрешения?

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

3 ответа

Решение
sudo chown -R yourname:www-data cake

затем

sudo chmod -R g+s cake

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

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

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

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

sudo usermod -a -G www-data demo

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

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

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

groups
...
# demo www-data

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

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

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

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

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

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

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

Setgid

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

Мы можем установить владельца, чтобы все новое также входило в группу "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

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

Допустим, вы хотите подключиться по sftp к каталогу с общими разрешениями на чтение, запись и выполнение с www-данными, вот что вам нужно сделать:

1 - Добавьте себя в группу www-data

      sudo usermod -a -G www-data <your_user>

2 - рекурсивно устанавливает требуемый пользователь: группа владения для вашей папки и файлов

      sudo chown -R <your_user>:www-data <your_folder>

3 - Добавляет разрешения (чтение, запись, выполнение) всем пользователям (a+rwx); Ограничить разрешения от других (o-rwx); Устанавливает один и тот же (унаследованный папкой) пользователь: группа для каждого нового файла, созданного в этом каталоге (ug+s). Это будет выполняться рекурсивно и только в папке (вероятно, именно то, что вы хотите)

      sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +
Другие вопросы по тегам