Ваш подход к созданию пользователя для запуска приложения на 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
```
### Заключение
Ваш подход логичен, и с описанными шагами вы сможете создать пользователя с необходимыми правами и настроить приложение таким образом, чтобы свести к минимуму риск доступа к переменным окружения.