Я изменил APACHE_RUN_GROUP в /etc/apache2/envvars
к
APACHE_RUN_GROUP=web-content
потому что я хочу, чтобы Apache управлял нами www-data:web-content
, вставка из www-data:www-data
. Ненавижу однообразные ручные хаки вроде chown -R www-data:web-content
. В #Debian товарищ c.*9
рекомендую использовать ACL, руководство Вот, а другой товарищ H
предложил какой-то традиционный способ и другой товарищ PP
предложил добавить www-data
к группе web-content
(Он у меня есть, но в этом примере Apache по какой-то причине не работает в группе, хотя /etc/init.d/apache2 restart
так 'ps --group web-content'
-вывод Вот). Теперь предположим более общий случай, не обязательно Apache.
Загруженные вопросы
Как я могу убедиться, что программа работает как
www-data:web-content
?Как я могу убедиться, что все файлы и каталоги, созданные программой,
www-data:web-content
вместо тогоwww-data:www-data
?Как я могу убедиться, что такая программа, как Apache, работает как
www-data:web-content
?
Сначала я отвечу на вопросы 1 и 3, потому что 3 - это частный случай 1, вопрос 2 на самом деле очень простой, но давайте запачкаем руки!
Apache -case
Сначала мы выполняем специфические для Apache модификации с помощью SED, а затем убеждаемся, что Apache действительно работает с предполагаемым user:group
то есть www-data:web-content
.
# sed -i s@APACHE_RUN_GROUP=www-data@APACHE_RUN_GROUP=web-content@g /etc/apache2/envvars
# /etc/init.d/apache2 restart
# ps -o pid,user,group,fname $(pidof apache2)
PID USER GROUP COMMAND
24514 root root apache2
24521 www-data 1001 apache2
24522 www-data 1001 apache2
24523 www-data 1001 apache2
24524 www-data 1001 apache2
# grep 1001 /etc/group
web-content:x:1001:www-data,xyz,apache
# getent group 1001
web-content:x:1001:www-data,xyz,apache
где мы точно проверили соответствие 1001 -placeholder с двумя разными командами, поэтому 1001 соответствует web-content -group. Один процесс Apache должен работать как root:root
потому что он должен быть привязан к порту 80, согласно THE. Итак, теперь ваш apache работает как www-data:web-content
. Вы можете поблагодарить THE и SO за сотрудничество с этой головоломкой, добро пожаловать в канал #Debian во Freenode.
Общий - случай
На самом деле есть много путей в Рим:
setuid/setgid
- ...
- используя start / stop -daemons в
/etc/init.d
Но согласно THE, не существует общего способа добиться этого, который работал бы на всех платформах. Вам нужно научиться использовать правильный инструмент в нужном месте. Например, отправной точкой с Apache -case было исследование
/etc/apache2/apache2.conf
где вы узнали/etc/apache2/envvars
-файл, после прочтения комментариев. Тогда вы просто использовали/etc/init.d/apache2 restart
-команда и проверил, что программа действительно работает с заданнымuser:group
.Для новичков предупреждаю о
setuid/setgid
потому что легкая безопасность - уязвимости, если их не сделать осторожно - используйте по своему желанию на своей собственной машине, но используйте надлежащий аудит в производстве. Но это не ракетостроение! Вfind
-manual в Debian предоставил этот инструмент, который может помочь вам в аудите, трахайтесь!Пройдите по файловой системе только один раз, перечислив файлы и каталоги setuid в /root/suid.txt, а большие файлы - в /root/big.txt.
find $HOME -mtime 0
Резюме
Теперь я ответил на ваши пункты 1 и 3 о запуске программы с определенными
user:group
-комбинация, включая Apache (q3 был частным случаем вопроса 1). Итак, что касается второго вопроса, простойls
-command гарантирует, что Apache -thing работает правильно, например:# ls -lsa total 1832 4 drwxrwx--- 2 www-data web-content 4096 Aug 20 20:21 . 4 drwxrwx--- 6 www-data web-content 4096 Aug 14 22:20 .. 884 -rw-r--r-- 1 www-data web-content 900386 Aug 20 20:21 0_hhh.png 12 -rw-r--r-- 1 www-data web-content 8194 Aug 20 20:21 1_hhh.jpg
Удачной головоломки: D
Дополнительные команды
Вам могут понадобиться следующие команды. Если вам нужно добавить пользователя
www-data
вweb-content
-группа, например, потому что вы в конце концов нашли хорошего парняA
с кем вы хотите сотрудничать. Они могут помочь вам в отладке, если что-то пойдет не так, усердно работайте!
Он добавит www-data -user в группу web-content.
# usermod -a -G web-content www-data
Он покажет вам пользователя процесса, но не группу
# ps -aux|grep apache
Если вы запускаете программу от имени определенного пользователя (не root), она будет работать от имени этого пользователя.
Все файлы, созданные программой, будут принадлежать пользователю, запускающему программу, и будут входить в группу по умолчанию для этого пользователя. Программа может изменить группу файла на любую группу, членом которой он является.
Чтобы запустить программу от имени конкретного пользователя, установите пользователя команды с помощью su
команда. man su
для инструкций. Обратите внимание, что для Apache обычно существует один процесс, принадлежащий root, который отвечает за ведение журналов и запуск процессов «обработчиков», принадлежащих пользователю, указанному в конфигурации Apache.
Если вам нужен общий случай, посмотрите на системные команды вроде su
. В противном случае каждая программа (Apache, nginx, mysql и т. Д.) Сама будет обрабатывать процесс «сброса привилегий», и вам нужно будет следовать инструкциям для этой конкретной программы.
Судя по пути, пользователю и группе, которые вы указали в своем вопросе, похоже, что вы используете Debian или Ubuntu Linux. Вероятно, вы захотите следовать стандартам или соглашениям для вашей конкретной платформы с точки зрения того, как обрабатываются разрешения веб-сервера.