Блог компании 3v-Hosting

Как переключаться между пользователями в Ubuntu

Администрирование

12 мин.


Любой Linux, в том числе операционная система Ubuntu - это система, которая часто оказывается на пересечении интересов, так как один и тот же сервер может обслуживать разработчиков, администраторов, CI/CD-процессы, сервисные аккаунты, а иногда и бизнес-пользователей. На рабочей станции картина может быть не менее насыщенной, с существованием основного пользователя, сервисных учётных записей, временных аккаунтов и  тестового окружения.

И одной из самых часто встречающихся задач является то, как корректно переключаться между пользователями в Ubuntu.

Если хорошо подумать, то это вопрос не про "ввести команду и забыть". Это про безопасность, удобство, контроль окружения и чёткое понимание того, кто именно и в каком контексте сейчас работает в системе. В этой статье мы попытались дать вам подробный практический разбор всех основных способов переключения между пользователями в Linux, их различий и подводных камней при использовании каждого из методов. Каждый инженер или администратор обязан понимать различия этих методов и глубоко понимать, как они работают, чтобы не допустить компрометации системы.

 

 

 

 

Зачем вообще переключаться между пользователями

Если вы работаете в Linux не первый день, то базовая идея вам уже знакома: один пользователь - одна зона ответственности. Но на практике переключение между пользователями - это не просто формальность и уж тем более не пережиток старых Unix-традиций.

В современных системах, таких как например Ubuntu, пользователями являются не только люди, но и процессы, сервисы, пайплайны автоматизации, контейнеры, агенты деплоя и мониторинга и т.д. и т.п.. Каждый из них живёт в своём контексте, со своими правами, переменными окружения, домашним каталогом, ключами доступа и историей команд. И когда этот контекст нарушается, то начинаются проблемы, которые сложно диагностировать и ещё сложнее воспроизводить.

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

Именно поэтому умение осознанно переключаться между пользователями является базовым навыком не только для системных администраторов, но и для разработчиков, DevOps-инженеров и всех, кто работает с продакшн-системами. Речь идёт именно про контроль, предсказуемость и ответственность, а не про банальное удобство одной команды в терминале.

 

Теперь давайте разберём, зачем именно это нужно на практике и какие задачи решает корректное разделение пользователей.

  • Разделение прав доступа между обычным пользователем и администратором;
  • Работа с сервисными аккаунтами (деплой, CI/CD, cron, systemd);
  • Тестирование приложений от лица другого пользователя;
  • Поддержка multi-user среды на сервере или VPS;
  • Минимизация рисков при работе с чувствительными командами.

 

Ubuntu по умолчанию довольно либеральна в плане sudo-доступа, но именно поэтому особенно важно понимать, что именно вы делаете и в каком контексте, а не просто выполнять команды "на автомате". Такая модель удобна для старта и повседневной работы, но она легко притупляет ощущение границы между обычным пользователем и администратором.

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

Поэтому важно не просто иметь sudo-доступ, а осознанно управлять им, выбирая подходящий способ переключения в зависимости от задачи, а не из привычки или удобства.

 

Практические сценарии, где переключение критично

  • Проверка прав доступа к файлам от имени www-data;
  • Запуск миграций базы данных от имени пользователя приложения;
  • Диагностика багов, зависящих от переменных окружения;
  • Работа на сервере несколькими администраторами;
  • Отладка проблем, возникающих только у конкретного пользователя.

 

 

 

 

 

Переключение пользователей в графическом интерфейсе Ubuntu

Итак, перейдём к практике и начнём с самого очевидного варианта - переключения пользователей через графический интерфейс Ubuntu. Этот способ знаком большинству пользователей и чаще всего используется на персональных компьютерах, рабочих станциях и ноутбуках, где система работает в интерактивном режиме.

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

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

 

В стандартной среде Ubuntu (GNOME):

  1. В правом верхнем углу экрана открывается системное меню, объединяющее индикаторы сети, звука и питания. Это единая панель управления сессией и состоянием системы.

  2. В меню выбирается пункт Сменить пользователя (Switch User), после чего текущий рабочий стол скрывается, а система возвращает пользователя на экран входа.

  3. Текущая пользовательская сессия не завершается и все запущенные приложения, процессы и открытые файлы остаются активными и продолжают работать в фоне.

  4. Новый пользователь выполняет обычный вход в систему - с вводом пароля или использованием настроенного метода аутентификации.

  5. После входа создаётся отдельная, полностью изолированная сессия с собственным набором процессов, переменных окружения и пользовательских настроек.

  6. Права доступа не наследуются, то есть если новый пользователь не входит в группу sudo, то он не получит административных прав, даже если предыдущая сессия ими обладала.

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

 

Важно! конкретные шаги могут различаться в зависимости от версии ОС и конкретной сборки.

 

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

 

 

 

 

 

Команда su - классика Unix

Команда su - этоодин из старейших способов переключения пользователей в Unix-подобных системах.

По умолчанию:

  • su без параметров переключает на root;
  • требуется пароль целевого пользователя;
  • окружение меняется частично.

И именно здесь начинается путаница.

Если использовать просто su, вы меняете пользователя, но не полностью меняете среду. Рабочий каталог, переменные окружения и PATH могут остаться от предыдущего пользователя. Иногда это удобно, но гораздо чаще это является источником трудноуловимых ошибок.

 

Поэтому на практике почти всегда используют login-режим:

su - username # или su --login username 

 

Разница между su и su --login

Команда Пользователь Окружение Profile-файлы Тип сессии
su меняется частично нет неполная
su - меняется полностью да login
su --login user user полностью да login

 

 

 

 

 

Команда sudo su - быстрый, но опасный путь

Если su - это классика Unix, то sudo su действительно можно назвать её тёмной стороной. Формально команда выглядит безобидно, но по сути она обходит несколько важных принципов, на которых строится модель безопасности Ubuntu.

С технической точки зрения происходит следующее:

  • вы используете sudo, подтверждая, что имеете право на выполнение привилегированных команд;
  • система выдаёт вам root-права на основе вашего sudo-доступа;
  • запускается интерактивный shell от имени root, внутри которого вы продолжаете работу.

При этом пароль пользователя root не требуется вовсе, а используется ваш собственный sudo-доступ. На Ubuntu серверах root по умолчанию часто заблокирован или не имеет установленного пароля, что и делает sudo su таким популярным способом быстро стать root'ом.

Проблема в том, что такой подход размывает границу ответственности. В момент запуска sudo su вы перестаёте работать как конкретный пользователь и переходите в неявный root-контекст, где становится сложно однозначно определить, кто именно выполнял команды и с какими намерениями.

И именно здесь возникает тот самый серьёзный нюанс, который часто игнорируют до первого инцидента: sudo su нарушает прозрачность аудита и усложняет контроль над действиями в системе.

Почему sudo su ломает аудит

  • В логах сложно отследить, кто именно выполнял команды;
  • История команд смешивается;
  • Теряется прозрачность действий при нескольких администраторах;
  • Усложняется расследование инцидентов.

Именно поэтому в профессиональной среде sudo su либо используют строго осознанно, либо не используют вовсе.

 

 

 

 

Команда sudo -i - правильный способ стать root'ом

Если вам нужен именно root-доступ, а не просто временная смена пользователя, то sudo -i по праву считается золотым стандартом в Ubuntu и большинстве современных Linux-дистрибутивов.

В отличие от sudo su, эта команда инициирует полноценную login-сессию пользователя root, максимально приближенную к реальному входу в систему. Загружаются стандартные конфигурационные файлы root-пользователя, корректно инициализируется рабочее окружение и формируется отдельная история команд.

Почему на практике это так важно:

  • создаётся полноценная login-сессия root, а не временный shell без явного контекста;
  • окружение и переменные инициализируются предсказуемо и одинаково при каждом входе;
  • история команд остаётся чистой и логически связанной с конкретной сессией;
  • системные логи сохраняют корректную информацию о том, кто и когда получил root-доступ через sudo.

 

Именно поэтому sudo -i считается наиболее безопасным и прозрачным способом работы под root, особенно на серверах, VPS и в продакшн-окружениях, где важны контроль, аудит и воспроизводимость действий.


 

 

 

 

 

Команда sudo -u как точечное выполнение от имени другого пользователя

Иногда действительно нет необходимости "становиться" другим пользователем и менять весь рабочий контекст. Гораздо чаще требуется выполнить одну конкретную команду от имени нужного пользователя, не выходя из своей сессии и не нарушая окружение.

Именно для таких задач существует команда sudo -u, позволяющая точечно запускать процессы от имени другого пользователя. Например:


 

sudo -u www-data ls /var/www


 

sudo -u deploy ./deploy.sh


 

sudo -u postgres psql

 

Во всех этих случаях команда выполняется с правами указанного пользователя, но при этом вы не переходите в его shell и не создаёте отдельную сессию.

Типичные сценарии применения команды sudo -u:

  • запуск скриптов от имени сервисного пользователя или пользователя приложения;
  • выполнение миграций и обслуживающих команд в правильном контексте;
  • проверка доступа к файлам и каталогам без изменения владельцев;
  • работа с сервисами, демонами и их данными.

 

Ключевое преимущество sudo -u в том, что вы остаетесь в своей пользовательской сессии, окружение системы не ломается, а выполняется ровно то действие, которое требуется. Благодаря этому sudo -u считается аккуратным и практически хирургическим инструментом и широко используется DevOps-инженерами и администраторами в production-среде, где важно минимизировать побочные эффекты и сохранить прозрачность действий.

 

 

 

 

Переключение пользователей по SSH

На серверах и VPS всё проще и одновременно строже, чем на десктопах. Здесь почти всегда используется терминальный доступ, а любые действия пользователя чётко привязаны к конкретной сессии и контексту.

В SSH-модели каждый пользователь - это отдельная точка входа в систему. Переключение между пользователями означает не смену роли внутри уже существующей сессии, а установление нового SSH-соединения. Это автоматически создаёт новый контекст выполнения команд с учётом собственных окружений, переменными, правами доступа и историей действий.

Именно поэтому такой подход считается эталонным для серверной среды. Он действительно:

  • Безопасен - каждый пользователь аутентифицируется отдельно;
  • Прозрачен - в логах чётко видно, кто и когда подключался;
  • Иидеален для продакшна - исключает неявные переключения контекста.
  •  

Рекомендации по безопасной работе с пользователями по SSH

В реальной инфраструктуре обычно придерживаются следующих принципов:

  • использовать SSH-ключи вместо паролей для всех административных пользователей;
  • отключать PermitRootLogin, чтобы исключить прямой вход под root;
  • создавать отдельный аккаунт для каждого администратора или инженера;
  • выдавать sudo-доступ только там, где он действительно необходим;
  • чётко разделять роли и ответственность между пользователями.

Дополнительно о настройке SSH на сервере можно почитать тут.

Такой подход может показаться менее удобным, чем быстрое su или sudo su, но именно он обеспечивает максимальную управляемость и предсказуемость системы. Не случайно многие администраторы принципиально не используют su на серверах, предпочитая отдельных SSH-пользователей и ключи.

Это чуть медленнее в повседневной работе, но в долгосрочной перспективе - в разы надёжнее, особенно в multi-user и production-окружениях.

 

 

 

 

Частые ошибки и неожиданные эффекты

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

  • Работа под root без реальной необходимости
    Повышает риск случайных изменений в системе и усложняет поиск источника проблемы, если что-то пойдёт не так.

  • Путаница с окружением при su без login-флага
    Команды выполняются от имени другого пользователя, но с переменными и путями предыдущей сессии, что приводит к труднообъяснимому поведению приложений.

  • Забытые фоновые процессы другого пользователя
    Сервисы, скрипты или задачи продолжают работать после переключения сессии, потребляя ресурсы и создавая неожиданные побочные эффекты.

  • Некорректные права на файлы после sudo
    Файлы и каталоги внезапно оказываются принадлежащими root или сервисному пользователю, из-за чего приложения перестают нормально работать.

  • Неочевидное смешение контекстов
    Команды запускаются в правильный момент, но от неправильного пользователя, что особенно критично для деплоя, миграций и операций с данными.

Linux не прощает невнимательность, но почти всегда честно показывает последствия. Если что-то пошло не так, в большинстве случаев проблема не в Ubuntu как системе, а в том, в каком контексте и от имени какого пользователя была выполнена команда. Именно поэтому осознанное управление пользователями и сессиями - это не простая формальность, а важная часть надёжной работы с системой.

 

 

 

 

Часто задаваемые вопросы

 

Можно ли всегда работать под root?

Технически - да, система этого не запрещает. Практически - это крайне не рекомендуется. Постоянная работа под root увеличивает риск случайных ошибок, делает необратимыми многие действия и существенно усложняет поиск причины проблемы. Кроме того, при работе под root теряется прозрачность аудита: становится сложнее понять, кто и зачем выполнял те или иные команды, особенно в multi-user среде.

 

Чем sudo -i лучше sudo su?

sudo -i создаёт полноценную login-сессию пользователя root с корректно инициализированным окружением, правильными переменными и понятным логированием. В отличие от sudo su, этот способ не размывает контекст и лучше вписывается в модель аудита Ubuntu. Именно поэтому sudo -i считается предпочтительным вариантом для административных задач.

 

Опасно ли использовать su?

Сам по себе su не опасен, если использовать его осознанно. Рекомендуется применять su --login или su -, чтобы получить полноценную сессию целевого пользователя с корректным окружением. Основная опасность возникает при использовании su без login-флага, когда пользователь меняется, а окружение остаётся прежним.

 

Нужно ли знать пароль root в Ubuntu?

В большинстве случаев - нет. По умолчанию Ubuntu использует sudo-модель доступа, при которой root-пароль либо не установлен, либо заблокирован. Управление системой происходит через sudo, что позволяет сохранять контроль, аудит и гибкость прав доступа.

 

Что лучше использовать в продакшне?

Для production-систем оптимальной считается модель с отдельными пользователями, SSH-ключами, минимально необходимыми привилегиями и использованием sudo -i только тогда, когда действительно нужен root-доступ. Такой подход повышает безопасность, упрощает аудит и делает поведение системы более предсказуемым.

 

Можно ли комбинировать разные способы переключения?

Да, и на практике так делают почти всегда. Например, для повседневных задач используется sudo -u, для административных - sudo -i, а доступ к серверу организован через SSH-пользователей. Главное - понимать, в каком контексте и зачем применяется каждый способ.

 

Когда графическое переключение пользователей - это плохая идея?

Графическое переключение не подходит для серверов, VPS и любых production-окружений без GUI. Кроме того, оно не заменяет административные инструменты и не даёт дополнительных привилегий. Это удобный механизм для локальной работы, но не для управления системой.

 

 

 

 

Выводы

Итак, переключение между пользователями в Ubuntu - это не просто набор команд или удобный приём для повседневной работы, а отражение базовых принципов Linux, таких как чёткое разделение ролей, минимально необходимые привилегии и осознанный контроль над контекстом выполнения команд.

И чем глубже вы погружаетесь в работу с системой, будь то администрирование серверов, DevOps-практики, разработка приложений или эксплуатация продакшн-инфраструктуры, тем важнее в каждый момент понимать, от имени какого пользователя вы действуете и с каким окружением. Ошибки здесь редко выглядят критичными сразу, но именно они чаще всего становятся причиной труднообъяснимых сбоев и проблем с безопасностью.

Что такое GitOps?
Что такое GitOps?

GitOps - это подход к управлению инфраструктурой и Kubernetes через Git как единый источник истины. Он упрощает деплой, снижает риски, устраняет дрейф конфигура...

13 мин