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

Сохранение возможностей Linux в пакете Debian

Я создаю пакет, содержащий веб-службу, которая должна прослушивать порт 443. Сама служба написана на Go, поэтому я не могу использовать authbind для управления разрешениями порта. Вместо этого я решил использовать setcap:

me@buildbox $ setcap CAP_NET_BIND_SERVICE=+eip opt/myservice/myservice
me@buildbox $ getcap opt/myservice/myservice
opt/myservice/myservice = cap_net_bind_service+eip

Однако эта возможность не сохраняется, когда я устанавливаю пакет на свои серверы.

me@myserver $ apt-get install myservice
...
# installs normally
...
me@myserver $ getcap /opt/myservice/myservice
me@myserver $ # ^ No output == no capabilities

Я действительно не хочу, чтобы эта служба запускалась с правами root, но у меня возникают проблемы с решением, которое сохраняется при установке пакета. Могу ли я как-то установить возможности в пакете debian? Есть ли другой метод, который позволяет достичь желаемого конечного результата (служба может подключаться к порту 443, но не запускается как root).

Пользователь Zoredache ответил на это в комментариях. Я отправляю этот ответ, чтобы убедиться, что люди, которые задают этот вопрос, знают, что проблема решена.

В пакете debian я добавил postinst файл в DEBIAN/, который dpkg выполняет после копирования файлов в файловую систему. В postinst содержит следующее:

#!/bin/sh
set -e
setcap CAP_NET_BIND_SERVICE=+eip /opt/myservice/myservice

Это сработало для меня. Сейчас я не помню, но я считаю, что пакет действительно должен был быть установлен пользователем с доступом sudo на целевой машине.