Один веб-сайт, который я поддерживаю, состоит из нескольких локальных приложений, все проксируются одним и тем же nginx пример. Каждое приложение работает под своим пользователем и предоставляет сокет unix доступный для записи группой веб-серверов www-data
.
Все пользователи приложения являются частью www-data
группа, чтобы они могли Chown их розетки. Как я могу улучшить свою настройку, чтобы уязвимость в одном приложении больше не могла использоваться для попытки дальнейшего повышения привилегий через прямые подключения к другим сокетам?
Мое предыдущее решение: Создайте новую группу для каждого пользователя и добавьте ко всем этим веб-сервер. Это решение менее предпочтительно, поскольку оно усложняет добавление / удаление приложений и требует жесткого перезапуска веб-сервера для обновления групп.
Подобно тому, как услуги может наследовать привилегированные порты от systemd, они могут получить доступ к локальным сокетам, на открытие которых у них не было бы разрешения. Systemd создает сокет unix и передает службе только описание файла - таким образом, службе не требуются разрешения на доступ к файлу сокета.
Настройте сокет с помощью /etc/systemd/system/example.socket
вот так: (читать man systemd.socket
)
[Unit]
PartOf=example.service
[Socket]
SocketUser=www-data
SocketMode=0600
ListenStream=%t/example.sock
И используйте эту розетку в /etc/systemd/system/example.service
вот так: (читать man systemd.unit
)
[Unit]
Requires=example.socket
After=example.socket
[Service]
User=example
WorkingDirectory=~
ExecStart=/usr/bin/uwsgi --uwsgi-socket=fd://3 --opt2 --opt3 ..
Обратите внимание, что многие программы, включая uwsgi, понимают LISTEN_FDS
в их среде, поэтому дескриптор файла 3 с жестким кодированием часто не нужен.
Применить и запустить агрегат с помощью:
systemctl dameon-reload
systemctl start example.service
Если учетная запись службы затем попытается открыть сокет другой службы, ему это не удастся - сокеты принадлежат и доступны для чтения исключительно www-data
(т.е. только веб-сервер, работающий под этим пользователем, может получить к ним доступ).