Как создать пользователя для запуска приложения на Node.js и настроить переменные окружения?

Вот как можно переформулировать ваш вопрос для повышения его ясности и структуры:

Я установил Ubuntu, настроил все необходимые пакеты и теперь у меня есть простое Node.js приложение, которое использует переменные окружения, такие как <code>process.env.SECRET_KEY</code>. 

Для запуска приложения в продакшн-среде мне нужно создать отдельного пользователя, который имел бы доступ только к запуску этого Node.js проекта и, возможно, на чтение кода в <code>/var/www/my_project</code>. Как правильно создать такого пользователя с необходимыми правами? 

Кроме того, у меня есть секретные ключи, которые я хочу задавать перед запуском проекта для текущего сеанса. Как именно их следует устанавливать и под каким пользователем? Я не планирую использовать такие решения, как vault или AWS, и больше склоняюсь к идее с сеансами. 

Я вижу процесс создания и настройки пользователя следующим образом:
1. Создать пользователя с необходимыми правами (например, testuser).
2. Переключиться на пользователя testuser.
3. В консоли создать переменные окружения для текущего сеанса.
4. Запустить Node.js проект.
5. Вернуться к пользователю root и ограничить пользователя testuser в правах редактирования кода и работы с процессами.

Правильно ли я изложил свои мысли? Если да, то как можно забрать права у пользователя testuser после запуска проекта и разрешить ему только запускать my_project? 

Я хочу ограничить права на редактирование кода, чтобы в случае несанкционированного доступа злоумышленник не смог получить доступ к моим переменным окружения.
  • 2 апреля 2025 г. 10:55
Ответы на вопрос 1
Ваш подход к созданию пользователя для запуска приложения на Node.js и настройке переменных окружения выглядит довольно разумно. Давайте пройдем через каждый шаг более детально.

### Шаг 1: Создать пользователя

Для начала создайте нового пользователя (например, `testuser`) с помощью следующей команды:

```bash
sudo adduser testuser
```

Следуйте инструкциям на экране для установки пароля и других данных.

### Шаг 2: Настроить права на доступ к каталогу

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

```bash
sudo chown -R testuser:testuser /var/www/my_project
```

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

### Шаг 3: Переключиться на пользователя

Теперь переключитесь на нового пользователя:

```bash
su - testuser
```

### Шаг 4: Установить переменные окружения

Вы можете установить переменные окружения непосредственно в текущем сеансе перед запуском приложения. Например:

```bash
export SECRET_KEY='your_secret_key'
```

Как вариант, можно создать файл `.env` для хранения переменных окружения и использовать пакет `dotenv`, но если вы хотите использовать сеанс, то текущий способ подойдет.

### Шаг 5: Запустить Node.js проект

Теперь вы можете запустить ваше Node.js приложение:

```bash
node /var/www/my_project/app.js
```

или используйте менеджер процессов, например, `pm2`, чтобы запустить ваше приложение в фоновом режиме.

### Шаг 6: Вернуться к пользователю root

После того как ваше приложение запущено, вы можете выйти из сеанса пользователя `testuser`, чтобы вернуться к `root`:

```bash
exit
```

### Ограничение прав пользователя

Чтобы ограничить права `testuser`, можно программно настроить доступ. Вам нужно будет настроить разрешения для каталога проекта так, чтобы этот пользователь имел только право на запуск. Например, снять права на запись:

```bash
sudo chmod -R 755 /var/www/my_project
```

Это обеспечит, что `testuser` сможет читать файлы, но не сможет их изменять.

### Запуск приложения без доступа к переменным окружения

Если есть возможность, лучше оставить переменные окружения вне приложения при запуске. Например, их можно задать в `systemd` или скрипте запуска, чтобы уменьшить вероятность доступа к ним злоумышленников.

При использовании `systemd` в качестве вашего менеджера процессов:

1. Создайте файл службы, например, `/etc/systemd/system/my_project.service`:

   ```
   [Unit]
   Description=My Node.js Project
   After=network.target

   [Service]
   ExecStart=/usr/bin/node /var/www/my_project/app.js
   Restart=always
   User=testuser
   Environment=SECRET_KEY=your_secret_key

   [Install]
   WantedBy=multi-user.target
   ```

2. Перезагрузите `systemd`:

   ```bash
   sudo systemctl daemon-reload
   ```

3. Запустите службу:

   ```bash
   sudo systemctl start my_project
   ```

4. Чтобы запустить её при загрузке системы:

   ```bash
   sudo systemctl enable my_project
   ```

### Заключение

Ваш подход логичен, и с описанными шагами вы сможете создать пользователя с необходимыми правами и настроить приложение таким образом, чтобы свести к минимуму риск доступа к переменным окружения.
Похожие вопросы