Узнайте, как посмотреть внутренний и внешний IP-адрес в Linux. Подробные команды, примеры, способы через терминал, DNS и графический интерфейс. Полное руководст...
Блог компании 3v-Hosting
12 мин.
Любой Linux, в том числе операционная система Ubuntu - это система, которая часто оказывается на пересечении интересов, так как один и тот же сервер может обслуживать разработчиков, администраторов, CI/CD-процессы, сервисные аккаунты, а иногда и бизнес-пользователей. На рабочей станции картина может быть не менее насыщенной, с существованием основного пользователя, сервисных учётных записей, временных аккаунтов и тестового окружения.
И одной из самых часто встречающихся задач является то, как корректно переключаться между пользователями в Ubuntu.
Если хорошо подумать, то это вопрос не про "ввести команду и забыть". Это про безопасность, удобство, контроль окружения и чёткое понимание того, кто именно и в каком контексте сейчас работает в системе. В этой статье мы попытались дать вам подробный практический разбор всех основных способов переключения между пользователями в Linux, их различий и подводных камней при использовании каждого из методов. Каждый инженер или администратор обязан понимать различия этих методов и глубоко понимать, как они работают, чтобы не допустить компрометации системы.
Если вы работаете в Linux не первый день, то базовая идея вам уже знакома: один пользователь - одна зона ответственности. Но на практике переключение между пользователями - это не просто формальность и уж тем более не пережиток старых Unix-традиций.
В современных системах, таких как например Ubuntu, пользователями являются не только люди, но и процессы, сервисы, пайплайны автоматизации, контейнеры, агенты деплоя и мониторинга и т.д. и т.п.. Каждый из них живёт в своём контексте, со своими правами, переменными окружения, домашним каталогом, ключами доступа и историей команд. И когда этот контекст нарушается, то начинаются проблемы, которые сложно диагностировать и ещё сложнее воспроизводить.
Неправильный пользователь при выполнении той или иной команды может привести к незаметным ошибкам в правах доступа, поломанным зависимостям, странному поведению приложений и уязвимостям в безопасности. Особенно часто это проявляется на серверах и VPS, где под одной системой работают сразу несколько ролей.
Именно поэтому умение осознанно переключаться между пользователями является базовым навыком не только для системных администраторов, но и для разработчиков, DevOps-инженеров и всех, кто работает с продакшн-системами. Речь идёт именно про контроль, предсказуемость и ответственность, а не про банальное удобство одной команды в терминале.
Теперь давайте разберём, зачем именно это нужно на практике и какие задачи решает корректное разделение пользователей.
Ubuntu по умолчанию довольно либеральна в плане sudo-доступа, но именно поэтому особенно важно понимать, что именно вы делаете и в каком контексте, а не просто выполнять команды "на автомате". Такая модель удобна для старта и повседневной работы, но она легко притупляет ощущение границы между обычным пользователем и администратором.
Со временем это приводит к тому, что команды с повышенными привилегиями выполняются без должного анализа последствий, например меняются владельцы файлов, создаются артефакты с некорректными правами, нарушается изоляция окружений и т.д. В небольших системах это может остаться незаметным, но в серверной или multi-user среде такие мелочи быстро превращаются в реальные проблемы.
Поэтому важно не просто иметь sudo-доступ, а осознанно управлять им, выбирая подходящий способ переключения в зависимости от задачи, а не из привычки или удобства.
www-data;
Итак, перейдём к практике и начнём с самого очевидного варианта - переключения пользователей через графический интерфейс Ubuntu. Этот способ знаком большинству пользователей и чаще всего используется на персональных компьютерах, рабочих станциях и ноутбуках, где система работает в интерактивном режиме.
GUI-переключение воспринимается как нечто простое, привычное и от того безопасное, но за внешней наглядностью и простотой скрывается вполне полноценный механизм управления сессиями. Каждому пользователю выделяется собственное пространство, заключающееся в отдельном наборе процессов, переменных окружения, конфигурациях рабочего стола и правах доступа. С точки зрения системы это не упрощённый режим, а такие же изолированные пользовательские контексты, как и при входе через терминал или SSH.
Важно понимать заранее, что графическое переключение - это не способ "временно стать другим пользователем", а создание параллельной пользовательской сессии. Именно поэтому данный вариант отлично подходит для локальной работы, но практически не применяется в серверной среде, где графическая оболочка отсутствует и приоритет отдан терминальному доступу.
В стандартной среде Ubuntu (GNOME):
В правом верхнем углу экрана открывается системное меню, объединяющее индикаторы сети, звука и питания. Это единая панель управления сессией и состоянием системы.
В меню выбирается пункт Сменить пользователя (Switch User), после чего текущий рабочий стол скрывается, а система возвращает пользователя на экран входа.
Текущая пользовательская сессия не завершается и все запущенные приложения, процессы и открытые файлы остаются активными и продолжают работать в фоне.
Новый пользователь выполняет обычный вход в систему - с вводом пароля или использованием настроенного метода аутентификации.
После входа создаётся отдельная, полностью изолированная сессия с собственным набором процессов, переменных окружения и пользовательских настроек.
Права доступа не наследуются, то есть если новый пользователь не входит в группу sudo, то он не получит административных прав, даже если предыдущая сессия ими обладала.
В системе одновременно могут существовать несколько активных пользовательских сессий, между которыми можно переключаться без потери состояния.
Важно! конкретные шаги могут различаться в зависимости от версии ОС и конкретной сборки.
Это параллельные сессии, каждая со своими процессами, переменными окружения и рабочим столом. Очень удобно для локальной машины, но почти бесполезно на серверах, где графической среды просто нет.
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, внутри которого вы продолжаете работу.При этом пароль пользователя 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-пользователя, корректно инициализируется рабочее окружение и формируется отдельная история команд.
Почему на практике это так важно:
Именно поэтому 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-среде, где важно минимизировать побочные эффекты и сохранить прозрачность действий.
На серверах и VPS всё проще и одновременно строже, чем на десктопах. Здесь почти всегда используется терминальный доступ, а любые действия пользователя чётко привязаны к конкретной сессии и контексту.
В SSH-модели каждый пользователь - это отдельная точка входа в систему. Переключение между пользователями означает не смену роли внутри уже существующей сессии, а установление нового SSH-соединения. Это автоматически создаёт новый контекст выполнения команд с учётом собственных окружений, переменными, правами доступа и историей действий.
Именно поэтому такой подход считается эталонным для серверной среды. Он действительно:
В реальной инфраструктуре обычно придерживаются следующих принципов:
PermitRootLogin, чтобы исключить прямой вход под root;Дополнительно о настройке SSH на сервере можно почитать тут.
Такой подход может показаться менее удобным, чем быстрое su или sudo su, но именно он обеспечивает максимальную управляемость и предсказуемость системы. Не случайно многие администраторы принципиально не используют su на серверах, предпочитая отдельных SSH-пользователей и ключи.
Это чуть медленнее в повседневной работе, но в долгосрочной перспективе - в разы надёжнее, особенно в multi-user и production-окружениях.
Даже опытные пользователи Ubuntu регулярно наступают на одни и те же грабли, особенно когда работа с пользователями превращается в рутину и выполняется "на автомате":
Работа под root без реальной необходимости
Повышает риск случайных изменений в системе и усложняет поиск источника проблемы, если что-то пойдёт не так.
Путаница с окружением при su без login-флага
Команды выполняются от имени другого пользователя, но с переменными и путями предыдущей сессии, что приводит к труднообъяснимому поведению приложений.
Забытые фоновые процессы другого пользователя
Сервисы, скрипты или задачи продолжают работать после переключения сессии, потребляя ресурсы и создавая неожиданные побочные эффекты.
Некорректные права на файлы после sudo
Файлы и каталоги внезапно оказываются принадлежащими root или сервисному пользователю, из-за чего приложения перестают нормально работать.
Неочевидное смешение контекстов
Команды запускаются в правильный момент, но от неправильного пользователя, что особенно критично для деплоя, миграций и операций с данными.
Linux не прощает невнимательность, но почти всегда честно показывает последствия. Если что-то пошло не так, в большинстве случаев проблема не в Ubuntu как системе, а в том, в каком контексте и от имени какого пользователя была выполнена команда. Именно поэтому осознанное управление пользователями и сессиями - это не простая формальность, а важная часть надёжной работы с системой.
Технически - да, система этого не запрещает. Практически - это крайне не рекомендуется. Постоянная работа под root увеличивает риск случайных ошибок, делает необратимыми многие действия и существенно усложняет поиск причины проблемы. Кроме того, при работе под root теряется прозрачность аудита: становится сложнее понять, кто и зачем выполнял те или иные команды, особенно в multi-user среде.
sudo -i лучше sudo su?sudo -i создаёт полноценную login-сессию пользователя root с корректно инициализированным окружением, правильными переменными и понятным логированием. В отличие от sudo su, этот способ не размывает контекст и лучше вписывается в модель аудита Ubuntu. Именно поэтому sudo -i считается предпочтительным вариантом для административных задач.
su?Сам по себе su не опасен, если использовать его осознанно. Рекомендуется применять su --login или su -, чтобы получить полноценную сессию целевого пользователя с корректным окружением. Основная опасность возникает при использовании su без login-флага, когда пользователь меняется, а окружение остаётся прежним.
В большинстве случаев - нет. По умолчанию Ubuntu использует sudo-модель доступа, при которой root-пароль либо не установлен, либо заблокирован. Управление системой происходит через sudo, что позволяет сохранять контроль, аудит и гибкость прав доступа.
Для production-систем оптимальной считается модель с отдельными пользователями, SSH-ключами, минимально необходимыми привилегиями и использованием sudo -i только тогда, когда действительно нужен root-доступ. Такой подход повышает безопасность, упрощает аудит и делает поведение системы более предсказуемым.
Да, и на практике так делают почти всегда. Например, для повседневных задач используется sudo -u, для административных - sudo -i, а доступ к серверу организован через SSH-пользователей. Главное - понимать, в каком контексте и зачем применяется каждый способ.
Графическое переключение не подходит для серверов, VPS и любых production-окружений без GUI. Кроме того, оно не заменяет административные инструменты и не даёт дополнительных привилегий. Это удобный механизм для локальной работы, но не для управления системой.
Итак, переключение между пользователями в Ubuntu - это не просто набор команд или удобный приём для повседневной работы, а отражение базовых принципов Linux, таких как чёткое разделение ролей, минимально необходимые привилегии и осознанный контроль над контекстом выполнения команд.
И чем глубже вы погружаетесь в работу с системой, будь то администрирование серверов, DevOps-практики, разработка приложений или эксплуатация продакшн-инфраструктуры, тем важнее в каждый момент понимать, от имени какого пользователя вы действуете и с каким окружением. Ошибки здесь редко выглядят критичными сразу, но именно они чаще всего становятся причиной труднообъяснимых сбоев и проблем с безопасностью.
Управление портами на VPS и выделенных серверах: как проверить открытые порты, правильно настроить фаервол, избежать типичных ошибок и повысить безопасность инф...
Оптимизация Windows Server 2022 на VPS с 2-4 ГБ RAM: как система расходует память, что можно безопасно настроить, pagefile, службы, GUI и когда апгрейд RAM разу...
GitOps - это подход к управлению инфраструктурой и Kubernetes через Git как единый источник истины. Он упрощает деплой, снижает риски, устраняет дрейф конфигура...