Иногда нужно запустить команду от другого пользователя - без постоянного ввода пароля. Например:
от имени сервисного пользователя без логина;
в скриптах автоматизации;
при делегировании задач.
Используем sudo с NOPASSWD и su с передачей команды.
1️⃣ Способ: sudo без пароля. Для этого отредактируем sudoers через:
sudo visudo
Добавим строку:
myuser ALL=(targetuser) NOPASSWD: /usr/bin/systemctl restart my-service
Теперь можно запускать:
sudo -u targetuser /usr/bin/systemctl restart my-service
Или сразу выполнять произвольную команду:
sudo -u deployuser /home/deployuser/scripts/deploy.sh
2️⃣ Способ: su без пароля (через sudo-права). Если sudo уже доступен, можно делать:
sudo su - otheruser -c 'echo $HOME'
Это полезно, если нужна изоляция окружения (su - сбрасывает переменные).
▪️ Пример в скрипте:
#!/bin/bash
USER=deploy
CMD="/opt/app/update.sh"
sudo -u "$USER" bash -c "$CMD"
Обязательно ограничь sudo на конкретную команду в sudoers, чтобы избежать эскалации.
🌟 Безопасность:
📍 Не давай NOPASSWD на ALL!
📍 Всегда указывай полный путь к команде
📍 Используй visudo, чтобы не сломать конфигурацию
BashTex 📱 #bash #utils