как запустить сервис от непривилегированного пользователя полностью?

Вопрос или проблема

Я пытаюсь запустить приложение (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. Вот скриншот терминала через работающий сервис:

скриншот окна терминала vscode

Пожалуйста, помогите мне, если у вас есть решение этой проблемы.

Редактировать 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, так и в скрипт, который запускает ваше приложение. Ниже представлено подробное руководство по этой задаче.

Шаги по запуску службы от имени непривилегированного пользователя

  1. Изменение файла службы (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
  2. Изменение скрипта (vsc.sh)

    Зафиксируйте, что ваш скрипт vsc.sh выполняется без дополнительных привилегий. Скорее всего, ваш скрипт может выглядеть следующим образом:

    #!/bin/bash
    cd /home/dev001/projects
    code-server -p 80 --allow-http --password somepassword

    Убедитесь, что скрипт имеет разрешение на выполнение. Для этого выполните команду:

    chmod +x /usr/bin/vsc.sh
  3. Проверка прав доступа

    Убедитесь, что у пользователя dev001 есть доступ к портам, которые вы хотите использовать. Порты ниже 1024 требуют superuser-доступа, поэтому рекомендуется использовать порт больше 1024 (например, 8080) для разработки и отобразить его на 80 через обратный прокси (например, nginx). Если необходимо использовать 80, продумайте использование конфигурации nginx для проксирования портов.

  4. Запуск и активация службы

    После изменения файла службы, перезагрузите конфигурацию systemd:

    sudo systemctl daemon-reload

    Затем включите и запустите вашу службу:

    sudo systemctl enable vsc.service
    sudo systemctl start vsc.service
  5. Проверка работы службы

    Для проверки, как выполняется ваша служба, используйте следующие команды:

    systemctl status vsc.service
    ps aux | grep code-server

    Обратите внимание на пользователя, под которым работает процесс. Если все сделано правильно, то процесс code-server будет запущен от имени dev001.

Заключение

При запуске службы как непривилегированного пользователя важно правильно настроить файлы и убедиться, что требуемые права доступа учтены. Убедитесь, что ваши приложения настроены для доступа к ресурсам и портам, необходимым для работы. Прокси-сервер (например, nginx) может быть полезен для управления доступом к определённым портам и улучшения безопасности.

Следуя этим шагам, вы сможете эффективно запустить ваше приложение без привилегий root и с соблюдением лучших практик безопасности.

Оцените материал
Добавить комментарий

Капча загружается...