Вопрос или проблема
Я пытаюсь запустить приложение (code-server) от имени sudo
. Это приложение в основном позволяет мне запускать Visual Studio Code онлайн. Я создал файл сервиса, как показано ниже: (vsc.service
)
[Unit]
Description=Запуск Visual Studio Code онлайн
[Service]
User=dev001
Group=dev001
WorkingDirectory=/home/dev001/projects
Type=simple
ExecStart=/usr/bin/sudo /usr/bin/vsc.sh
[Install]
WantedBy=multi-user.target
Как вы можете видеть, файл сервиса содержит информацию о пользователе и группе.
Вот скрипт, который я хочу запустить как сервис (/usr/bin/vsc.sh
)
cd /home/dev001/projects
code-server -p 80 --allow-http --password somepassword
Он работает нормально, но проблема в том, что процесс по-прежнему запускается от имени root, хотя работает как dev001. Вот скриншот терминала через работающий сервис:
Пожалуйста, помогите мне, если у вас есть решение этой проблемы.
Редактировать 01:
Я использовал nginx для перенаправления порта (обратного прокси), чтобы решить эту проблему, пока code-server не станет более зрелым и не получит поддержку демонов для работы напрямую на портах 80 или 443. Одним из преимуществ этого подхода стало то, что я смог установить ssl от letsencrypt. Теперь моя среда работает так, как мне нужно. Хотя есть и другие проблемы, но они не связаны с этой темой.
Как ваш скриншот связан с этим? Вы показываете пользователя и каталог вашего терминала. Я могу ошибаться, но, мне кажется, здесь есть некоторое недопонимание.
Служба SystemD должна запускаться при загрузке машины от имени пользователя dev001
. Вы можете найти это, используя systemctl
или ps aux | grep vsc.sh
и аналогичные команды. Ключевой момент здесь не в вашем терминале, а в владельце фактического процесса.
sudo systemctl enable vsc.service
sudo systemctl start vsc.service
sudo ps aux | grep vsc
Вы должны увидеть, что ваш сервис запускается пользователем, указанным в вашем файле vsc.service
.
Ответ или решение
Чтобы успешно запустить приложение (в вашем случае, code-server) в качестве службы без прав root, необходимо внести изменения как в файл службы systemd, так и в скрипт, который запускает ваше приложение. Ниже представлено подробное руководство по этой задаче.
Шаги по запуску службы от имени непривилегированного пользователя
-
Изменение файла службы (vsc.service)
В вашем примере файл службы выглядит следующим образом:
[Unit] Description=Running Visual Studio Code Online [Service] User=dev001 Group=dev001 WorkingDirectory=/home/dev001/projects Type=simple ExecStart=/usr/bin/sudo /usr/bin/vsc.sh [Install] WantedBy=multi-user.target
Чтобы запустить службу от имени пользователя
dev001
, достаточно убратьsudo
из строкиExecStart
. Использованиеsudo
не требуется, так как вы уже определили пользователя службы какdev001
:[Service] User=dev001 Group=dev001 WorkingDirectory=/home/dev001/projects Type=simple ExecStart=/usr/bin/vsc.sh
-
Изменение скрипта (vsc.sh)
Зафиксируйте, что ваш скрипт
vsc.sh
выполняется без дополнительных привилегий. Скорее всего, ваш скрипт может выглядеть следующим образом:#!/bin/bash cd /home/dev001/projects code-server -p 80 --allow-http --password somepassword
Убедитесь, что скрипт имеет разрешение на выполнение. Для этого выполните команду:
chmod +x /usr/bin/vsc.sh
-
Проверка прав доступа
Убедитесь, что у пользователя
dev001
есть доступ к портам, которые вы хотите использовать. Порты ниже 1024 требуют superuser-доступа, поэтому рекомендуется использовать порт больше 1024 (например, 8080) для разработки и отобразить его на 80 через обратный прокси (например, nginx). Если необходимо использовать 80, продумайте использование конфигурации nginx для проксирования портов. -
Запуск и активация службы
После изменения файла службы, перезагрузите конфигурацию systemd:
sudo systemctl daemon-reload
Затем включите и запустите вашу службу:
sudo systemctl enable vsc.service sudo systemctl start vsc.service
-
Проверка работы службы
Для проверки, как выполняется ваша служба, используйте следующие команды:
systemctl status vsc.service ps aux | grep code-server
Обратите внимание на пользователя, под которым работает процесс. Если все сделано правильно, то процесс code-server будет запущен от имени
dev001
.
Заключение
При запуске службы как непривилегированного пользователя важно правильно настроить файлы и убедиться, что требуемые права доступа учтены. Убедитесь, что ваши приложения настроены для доступа к ресурсам и портам, необходимым для работы. Прокси-сервер (например, nginx) может быть полезен для управления доступом к определённым портам и улучшения безопасности.
Следуя этим шагам, вы сможете эффективно запустить ваше приложение без привилегий root и с соблюдением лучших практик безопасности.