Это удобно при разработке и администрировании, когда нужно проверить права приложения, выполнить миграцию от имени сервисного пользователя или воспроизвести ошибку, связанную с доступом.
Обычный запуск команды от имени другого пользователя:
sudo -u www-data id
Команда выполнится с
UID и GID пользователя www-data, но текущий терминал останется вашим.Например, можно проверить, имеет ли веб-приложение доступ к нужной директории:
sudo -u www-data ls -la /var/www/app
Это обычно безопаснее, чем временно менять владельца файлов или расширять права доступа.
Также можно открыть shell от имени сервисного пользователя:
sudo -u postgres bash
Все команды внутри этого shell будут выполняться от имени postgres. Однако это не полноценный login shell: текущая директория и часть окружения могут сохраниться от исходного пользователя.
Если нужен shell с окружением, близким к обычному входу пользователя, используйте:
sudo -iu postgres
При отладке важно учитывать, что
sudo -u не всегда воспроизводит реальное окружение работающего сервиса.Например:
sudo -u node env
Эта команда покажет окружение, сформированное
sudo, но оно может отличаться от окружения процесса, запущенного через systemd, Docker, Kubernetes, PM2 или другой менеджер процессов.Также можно передать временную переменную окружения только для одного запуска:
sudo -u www-data env APP_ENV=testing ./deploy.sh
Переменная
APP_ENV будет доступна только этому процессу и его дочерним процессам. Глобальные настройки системы при этом не изменятся. Также важно: возможности sudo -u зависят от правил в sudoers. Разрешение на запуск shell, интерпретатора или произвольного скрипта может дать пользователю широкий доступ от имени целевой учётной записи.🔥
sudo -u — удобный инструмент для проверки прав, отладки сервисов и запуска отдельных команд от имени системных пользователей без полноценного переключения сессии.➡️ DevOps Ready | #практика