My https (порт 443) приложение twistd (.tac) отлично работает, развернуто как служба systemd, но для файла модуля требуется user: root, чтобы прослушивать / связывать порты ниже 1000. Проблема в том, что twistd работает также как пользователь: root.
Как прослушать / связать порт 443, а затем передать его в Твиттере .tac как непривилегированному пользователю?
Я хотел бы следовать рекомендациям «Разделение привилегий» и избегать обходных путей, таких как setcap'cap_net_bind_service = + ep' или переадресация портов, как подробно описано здесь .
Я попытался systemd, используя Socket Activation с файлом модуля .service.Мой .socket работает для прослушивания / привязки на привилегированном порту 443. И файл .service запускает приложение twistd .tac от имени непривилегированного пользователя, но передача обслуживания сокета не работает, и twistd завершает работу с ошибкой «разрешение запрещено».После поиска я обнаружил «Известная проблема: Twisted не поддерживает прослушивание SSL-соединений на сокетах, унаследованных от systemd» в последней строке этого Twisted doc .Я использую Twisted 18.9.0 Ubuntu 18.04.
Частичный успех со следующими файлами .service и .socket:
Файл моего служебного блока Systemd:
[Unit]
Description=twistd https application
#Requires=testtls.socket
[Service]
ExecStart=/usr/bin/twistd --nodaemon --pidfile= --python=/ws/twistdhttps.tac
WorkingDirectory=/srv/web/https
#User=nobody #twistd .tac permission denied
#Group=nogroup #twistd .tac permission denied
User=root #twistd .tac works but no separation of privileges
Group=root #twistd .tac works but no separation of privileges
Restart=always
#NonBlocking=true
[Install]
WantedBy=multi-user.target
сокет Systemdфайл testtls.socket:
[Socket]
ListenStream=0.0.0.0:443
[Install]
WantedBy=sockets.target