По умолчанию rundeck работает на портах 4440/4443. Теперь по причинам безопасности, которые действительно должны быть очевидными, я не хочу, чтобы эта конфиденциальная служба привязывалась к портам с большими номерами. После того, как HTTPS настроен, это должно снять некоторые из моих опасений, но все же ...
Есть ли способ привязать службу rundeckd к порту 80 как root, а затем перейти к пользователю rundeck?
Чтобы быть предельно ясным, я не спрашивая "Как мне заставить rundeck работать на разные порт? ", потому что я могу изменить /etc/rundeck/profile
и заставить его работать на любом незарегистрированном порту нормально.
Есть ли способ привязать службу rundeckd к порту 80 как root, а затем перейти к пользователю rundeck?
Насколько я понимаю, для этого нет готового решения. Для того, чего вы хотите достичь, программа должна использовать Разделение привилегий:
В компьютерном программировании и компьютерной безопасности разделение привилегий - это метод, при котором программа делится на части, которые ограничены конкретными привилегиями, которые им требуются для выполнения определенной задачи. Это используется для уменьшения потенциального ущерба от атаки на компьютерную безопасность.
Распространенным методом разделения привилегий является разделение компьютерной программы на два процесса. Основная программа отбрасывает привилегии, а меньшая программа сохраняет привилегии для выполнения определенной задачи. Затем две половины связываются через пару сокетов. Таким образом, любая успешная атака на более крупную программу получит минимальный доступ, даже если пара программ будет способна выполнять привилегированные операции.
Разделение привилегий традиционно осуществляется путем отделения реального идентификатора пользователя / идентификатора группы от эффективного идентификатора пользователя / идентификатора группы с использованием setuid (2) / setgid (2) и связанных системных вызовов, которые были указаны в POSIX. Если они расположены неправильно, разрывы могут привести к широкому проникновению в сеть.
Как упоминалось выше, процесс может вызывать сетуид (2), и сетгид (2) чтобы отказаться от привилегий после запуска с правами root.
И для того, чтобы все это сработало, вам, возможно, придется внести фундаментальные изменения в код rundeck, если вы так отчаялись.
Посмотри пожалуйста : Как и почему демоны Linux теряют привилегии и
https://unix.stackexchange.com/questions/21282/drop-process-privileges
Или вы можете использовать authbind что позволяет программам без полномочий root связывать () с нижними портами.
А для привязки к другому порту по Руководство по установке Rundeck: Свойства системы, среди прочего:
Вы можете настроить поведение средства запуска, используя некоторые свойства системы Java.
Укажите эти свойства, используя обычный
-Dproperty=value
параметры командной строки дляjava
команда:server.http.port The HTTP port to use for the server, default "4440" server.https.port The HTTPS port to use or the server, default "4443"
Один из классических подходов - настроить прокси-сервер nginx. В ubuntu и, вероятно, в большинстве разновидностей Linux установите пакет nginx и поместите файл конфигурации в / etc / nginx / sites-available. Мой файл выглядит так:
server {
listen 443;
ssl_certificate /etc/nginx/my_domain.crt;
ssl_certificate_key /etc/nginx/my_domain.key;
# Limit to VPN
allow 10.1.0.0/16;
deny all;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
add_header X-Frame-Options "SAMEORIGIN";
add_header Content-Security-Policy "frame-ancestors 'self'";
location / {
proxy_pass http://localhost:4440;
proxy_read_timeout 90;
}
}
Затем создайте символическую ссылку в / etc / nginx / sites-enabled / на / etc / nginx / sites-available / rundeck и перезапустите. Очевидно, аналогичные пакеты, такие как haproxy, могут сделать то же самое для вас.
Если вы используете AWS, альтернативным подходом является использование Application Load Balancer (ALB) для прокси-сервера. Таким образом, любые обновления / изменения конфигурации, которые вы вносите в экземпляр, не повлияют на это; вы отделяете прокси от серверной ОС. Это должно снять беспокойство OP в его комментарии под комментарием Карла ДеБишопа.
Полная документация Вот, но обзор такой:
Настройте ALB. Это будет включать настройку ваших «Слушателей», которые будут «слушать» трафик, предназначенный для порта 80 извне (например, клиентов), и будет включать настройку вашей «Целевой группы», которая будет «прослушивать» трафик, предназначенный для порта 4440. из слушателя вашего ALB.
Поток следующий: Клиент запрашивает 80 -> Слушатель получает запрос -> Слушатель «пересылает» запрос целевой группе -> Экземпляр EC2 получает на порт 4440
-
Обратите внимание, что вы должны зарегистрировать EC2 в целевой группе вручную или с помощью конфигурации группы автоматического масштабирования. Если после регистрации вы получаете ошибку проверки работоспособности 302, это просто означает, что ваш путь проверки работоспособности неверен. Быстрый способ исправить это - сделать ...
curl -vL <your URL destination>
В выводе должно отображаться как ваше перенаправление 302, так и ответ 200 (при условии, что ваше веб-приложение работает нормально). Найдите путь под ответом перенаправления 302 и вставьте его в путь проверки работоспособности целевой группы:
> GET / HTTP/1.1
> Host: XXXXXXXXX.us-east-1.elb.amazonaws.com
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Wed, 11 Mar 2020 18:19:57 GMT
< Content-Length: 0
< Connection: keep-alive
< Set-Cookie: JSESSIONID=XXXXXXXXXX; Path=/; HttpOnly
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Location: http://XXXXXXXXX.us-east-1.elb.amazonaws.com/user/login
<
* Connection #0 to host XXXXXXXXX.us-east-1.elb.amazonaws.com left intact
* Issue another request to this URL: 'http://XXXXXXXXX.us-east-1.elb.amazonaws.com/user/login'
[omitted]
* Connected to XXXXXXXXX.us-east-1.elb.amazonaws.com (10.1.1.1) port 80 (#0)
> GET /user/login HTTP/1.1 <-------------- this path is what you want