Первоначально удивленный отсутствием возможности записи на монтирование 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 могут находиться в группе «медиа», имея разрешение на запись на ваш носитель, а другие пользователи могут иметь разрешение только на чтение.
Хотя мне понравился ответ Стюарта , он добавляет в конвейер еще одну часть, которая может сломать (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 в «пользовательском пространстве».
Думаю, 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