Назад | Перейти на главную страницу

Unix: как я могу изменить запущенного пользователя программы и запущенную группу?

Я изменил 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.

Загруженные вопросы

  1. Как я могу убедиться, что программа работает как www-data:web-content?

  2. Как я могу убедиться, что все файлы и каталоги, созданные программой, www-data:web-content вместо того www-data:www-data?

  3. Как я могу убедиться, что такая программа, как 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 с кем вы хотите сотрудничать. Они могут помочь вам в отладке, если что-то пойдет не так, усердно работайте!

  1. Он добавит www-data -user в группу web-content.

    # usermod -a -G web-content www-data

  2. Он покажет вам пользователя процесса, но не группу

    # ps -aux|grep apache

  1. Если вы запускаете программу от имени определенного пользователя (не root), она будет работать от имени этого пользователя.

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

  3. Чтобы запустить программу от имени конкретного пользователя, установите пользователя команды с помощью su команда. man su для инструкций. Обратите внимание, что для Apache обычно существует один процесс, принадлежащий root, который отвечает за ведение журналов и запуск процессов «обработчиков», принадлежащих пользователю, указанному в конфигурации Apache.

Если вам нужен общий случай, посмотрите на системные команды вроде su. В противном случае каждая программа (Apache, nginx, mysql и т. Д.) Сама будет обрабатывать процесс «сброса привилегий», и вам нужно будет следовать инструкциям для этой конкретной программы.

Судя по пути, пользователю и группе, которые вы указали в своем вопросе, похоже, что вы используете Debian или Ubuntu Linux. Вероятно, вы захотите следовать стандартам или соглашениям для вашей конкретной платформы с точки зрения того, как обрабатываются разрешения веб-сервера.