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 {} +