Одним з найпопулярніших інструментів для розробки та розгортання програми давно і заслужено є Docker. Але часто розробники та адміністратори не турбуються про ч...
Блог компанії 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):
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 регулярно наступають на одні й ті ж граблі, особливо коли робота з користувачами перетворюється на рутину і виконується "на автоматі":
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-практики, розробка додатків або експлуатація продакшн-інфраструктури, тим важливіше в кожен момент розуміти, від імені якого користувача ви дієте і з яким оточенням. Помилки тут рідко виглядають критичними відразу, але саме вони найчастіше стають причиною важкозрозумілих збоїв і проблем з безпекою.
Як визначити, хто видалив файл на сервері під управлінням Linux. Перевірка історії команд Bash, системних журналів, auditd, Docker, Git та інших джерел, які доп...
Як перенести Docker Compose на новий VPS без простою: підготовка сервера, перенесення Docker Volumes, баз даних і файлів, перевірка проєкту та безпечне перемика...
Налаштування автоматичного оновлення Ubuntu Server за допомогою unattended-upgrades та Canonical Livepatch. Автоматична інсталяція оновлень безпеки, перевірка н...