Разрешить непривилегированному пользователю запускать веб-сервер на порту 80

Первоначально удивленный отсутствием возможности записи на монтирование ntfs, я заметил параметр «разрешения» в вашем файле fstab.

Это опция драйвера ntfs -3g, реализующая контроль доступа. Удалите параметр «разрешения» из fstab, и файлы должны быть доступны для записи всем.

Или для более контролируемого подхода оставьте fstab как есть и используйте дополнительные опции для umask, fmask и dmask, несколько опций изложены здесьhttps://askubuntu.com/questions/92863/mount-ntfs-partition-at-startup-with-non-root-user-as-owner

Дополнительное примечание относительно пользователей и групп. Я думаю, что уместно дать веб-приложениям своих собственных пользователей и создать группы для аналогичных задач, например. Plex и Sickrage могут находиться в группе «медиа», имея разрешение на запись на ваш носитель, а другие пользователи могут иметь разрешение только на чтение.

3
20.11.2020, 08:21
2 ответа

Хотя мне понравился ответ Стюарта , он добавляет в конвейер еще одну часть, которая может сломать (systemd), поэтому в итоге я использовал capshна этот ответ . Мне пришлось перекомпилировать его из исходного кода , чтобы получить функцию возможностей окружения (Я сохранил полученный двоичный файл как /sbin/capsh2), затем я смог установить его как команду запуска:

/sbin/capsh2 --keep=1 --user=nonrootuser --inh=cap_net_bind_service --addamb=cap_net_bind_service -- -c /path/to/webserver

Когда эта команда запускается от имени пользователя root, веб-сервер правильно запускается как nonrootuserи может выполнять привязку к портам 80 и 443 в «пользовательском пространстве».

3
28.04.2021, 23:04

Думаю, setcapбудет вашим ответом. Я думаю, что реальный вопрос здесь заключается в следующем: :Как моя система распознает, когда веб-сервер на NFS был затронут, чтобы она могла запустить на нем команду setcap?

Я думаю, вы захотите настроитьinotifyилиsystemd.pathдля мониторинга этого веб-сервера. Когда этот двоичный файл будет заменен, вы обнаружите его и активируете команду setcap, которая работает для вас. Это работает особенно хорошо, если ваш веб-сервер уже работает через systemd.

Вот пример с systemd.pathпри условии, что ваш сервер работает как служба systemdwebserver.service

# /etc/systemd/system/webcap.path
[Unit]
Description=Watching changes in the webserver binary
# Start monitoring only after the webserver is running.
After=webserver.service

[Path]
# Whenever someone writes to this path (binary is replaced), do something
PathModified=/path/to/webserver
# This is the service you launch when the above condition is met
Unit=webcap.service

[Install]
#Whenever the webserver is started, this monitor will also start
WantedBy=webserver.service
# /etc/systemd/system/webcap.service
[Unit]
Description=Update caps of webserver

[Service]
Type=oneshot
ExecStart=ssetcap cap_net_bind_service=ep /path/to/webserver
3
28.04.2021, 23:04

Теги

Похожие вопросы