Як змінити користувача в Linux: Повний посібник
Linux — це багатокористувацька операційна система за своєю природою, і керування ідентифікацією користувачів — одна з найфундаментальніших навичок, яку повинен освоїти будь-який системний адміністратор. Незалежно від того, чи ви керуєте середовищем VPS Hosting, налаштовуєте веб-сервер або усуваєте проблеми з дозволами файлів після розгортання, розуміння того, як змінювати користувачів у Linux, є важливим.
Фраза «змінити користувача» у Linux насправді охоплює кілька окремих операцій, кожна з яких має свої інструменти, ризики та найкращі практики:
- Перемикання на інший обліковий запис у оболонці (наприклад, з
johnнаroot) для інтерактивного сеансу - Запуск однієї команди від імені іншого користувача без повного перемикання сеансів
- Зміна користувача, від якого запускається служба або процес — критично для посилення безпеки
- Зміна власності файлів і каталогів — важливо після міграцій, відновлень або розгортань
- Модифікація атрибутів облікового запису користувача — перейменування користувачів, зміна UID або коригування членства в групах
Цей посібник охоплює всі ці сценарії детально, пояснюючи, коли використовувати кожен підхід, як це робити безпечно та яких помилок слід уникати — щоб ви могли впевнено керувати користувачами Linux без порушення дозволів, служб або доступу.
Зміст
- Перемикання на іншого користувача (інтерактивна оболонка)
- Запуск однієї команди від імені іншого користувача
- Зміна користувача, від якого запускається служба (systemd)
- Зміна власності файлів за допомогою chown
- Підтвердження вашої поточної ідентичності
- Модифікація атрибутів облікового запису користувача
- Швидка довідка
Перемикання на іншого користувача (інтерактивна оболонка)
Коли вам потрібен повний інтерактивний сеанс терміналу від імені іншого користувача — для системного адміністрування, тестування поведінки програми під іншим обліковим записом або доступу до облікового запису служби — Linux надає два основних інструменти: su та sudo.
Використання su (Switch User)
Команда su замінює вашу поточну ідентичність користувача на іншу:
su - usernameПрапор - (також написаний як -l або --login) важливий: він завантажує повне середовище входу цільового користувача, включаючи його домашній каталог, PATH, профіль оболонки та змінні середовища. Без прапора - ви успадковуєте більшість вашого поточного середовища, що може спричинити тонку та заплутану поведінку — особливо при запуску скриптів або служб.
Щоб перемкнутися безпосередньо на root:
su -> Примітка безпеки: На багатьох сучасних дистрибутивах Linux пароль облікового запису root за замовчуванням відключений (особливо в системах на основі Ubuntu). У цих випадках su на root не вдасться, і sudo — це правильний підхід.
Використання sudo -i (Рекомендується для оболонок Root/Admin)
sudo -iЦе дає вам оболонку входу root, еквівалентну su -, але автентифікується за допомогою ваших власних привілеїв sudo замість вимагання пароля root. Це рекомендований підхід на більшості сучасних дистрибутивів, тому що:
- Це уникає необхідності спільного використання або знання пароля root
- Усі дії реєструються через журнал аудиту sudo
- Це поважає вашу конфігурацію sudoers та обмеження
Перемикання на іншого користувача з оболонкою входу через sudo
sudo -iu usernameЦе поєднує -i (оболонка входу) та -u (цільовий користувач), даючи вам чисте середовище входу як вказаний користувач — без необхідності знати пароль цього користувача.
Запуск однієї команди від імені іншого користувача
Часто вам не потрібен повний інтерактивний сеанс — вам просто потрібно виконати одну команду з іншою ідентичністю. Це найпоширеніший та найбезпечніший шаблон для підвищення привілеїв.
Використання sudo -u
sudo -u username whoamisudo -u postgres psqlДругий приклад надзвичайно поширений в адмініструванні баз даних — перемикання на системного користувача postgres для доступу до PostgreSQL без автентифікації паролем.
Запуск команди з чистим середовищем входу
sudo -iu username command_hereЦе забезпечує запуск команди з повним середовищем цільового користувача, а не зі змінних вашого поточного сеансу.
Запуск команди від імені Root
sudo systemctl restart nginxЦе стандартний шаблон для адміністративних завдань: запуск однієї привілейованої команди без відкриття оболонки root.
Зміна користувача, від якого запускається служба (systemd)
На практично всіх сучасних дистрибутивах Linux systemd керує службами. Для безпеки кожна служба повинна запускатися під виділеним непривілейованим обліковим записом користувача, а не root. Запуск служб від імені root — це значний ризик безпеки — якщо служба скомпрометована, зловмисник отримує доступ root до всієї системи.
Це особливо важливо на Dedicated Servers та виробничих середовищах VPS, де одночасно можуть запускатися кілька служб.
Перевірка поточної конфігурації служби
systemctl cat myservice.serviceШукайте директиви User= та Group= у розділі [Service]:
[Service]
User=www-data
Group=www-dataПереопалення користувача служби (безпечний метод)
Замість редагування оригінального файлу модуля (який може бути перезаписаний при оновленні пакету), використовуйте systemctl edit для створення переопалення drop-in:
sudo systemctl edit myservice.serviceЦе відкриває редактор, де ви додаєте:
[Service]
User=myuser
Group=mygroupЗбережіть файл, потім застосуйте зміни:
sudo systemctl daemon-reload
sudo systemctl restart myservice.serviceПеревірка того, що служба запускається від імені правильного користувача
systemctl status myservice.serviceps -eo user,pid,cmd | grep myserviceПеревірка користувача будь-якого запущеного процесу
ps -eo user,pid,cmd | grep nginxps -p <PID> -o user,group,cmd> Важливо: Linux не дозволяє вам змінювати користувача вже запущеного процесу на місці. Ви повинні перезапустити процес (або налаштувати менеджер служб для його запуску від імені правильного користувача), щоб зміна вступила в силу.
Зміна власності файлів за допомогою chown
Власність файлів — це основна частина моделі дозволів Linux. Після міграцій, розгортань, резервних копій або відновлень власність може опинитися призначена неправильному користувачу — спричиняючи помилки доступу заборонено, розірвані веб-програми або недоступні дані. Команда chown — це ваш основний інструмент для виправлення цього.
Це поширене завдання при налаштуванні середовищ Shared Web Hosting або розгортанні веб-програм на VPS.
Зміна власника файлу
sudo chown username file.txtЗміна як власника, так і групи
sudo chown username:groupname file.txtРекурсивна зміна власності (використовуйте з обережністю)
sudo chown -R username:groupname /var/www/siteПрапор -R застосовує зміну рекурсивно до всіх файлів та підкаталогів. Використовуйте це обережно — застосування його до неправильної шляху (наприклад, / або /etc) може зламати вашу цілу систему.
Збереження символічних посилань
sudo chown -h username:groupname symlinkБез -h, chown слідує символічним посиланням та змінює власність цільового файлу, а не самого символічного посилання. Використовуйте -h коли ви конкретно хочете змінити власність символічного посилання.
Попередній перегляд власності перед внесенням змін
Для великих дерев каталогів завжди переглядайте перед застосуванням рекурсивного chown:
find /path -maxdepth 2 -printf '%u:%g %pn' | headЦе показує поточного власника та групу для двох верхніх рівнів дерева каталогів, дозволяючи вам підтвердити обсяг зміни перед фіксацією.
Підтвердження вашої поточної ідентичності
Перед внесенням змін завжди перевіряйте, хто ви і в якому контексті ви працюєте. Це запобігає випадковим змінам, зробленим під неправильним обліковим записом.
Перевірка вашого поточного користувача
whoamiОтримання повної інформації про ідентичність (користувач, групи, UID)
idПриклад виводу:
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(docker)Перегляд того, хто увійшов до системи
whowПеревірка оригінального користувача при використанні sudo
Коли ви підвищуєте привілеї за допомогою sudo, дві змінні середовища є релевантними:
echo $USER # The current effective user (root)
echo $SUDO_USER # The original user who invoked sudo (e.g., alice)Ця різниця важлива в скриптах — $SUDO_USER говорить вам, хто насправді запустив команду.
Модифікація атрибутів облікового запису користувача
Іноді «змінити користувача» означає модифікувати сам обліковий запис: перейменувати його, змінити його UID або коригувати членство в групах. Це постійні, системні зміни, які можуть вплинути на входи, дозволи файлів та доступ до служб.
> Найкраща практика: Перед внесенням змін облікового запису переконайтеся, що користувач вийшов і жодні процеси не запускаються під цим обліковим записом.
Перейменування користувача (зміна імені користувача)
sudo usermod -l newname oldnameЦе змінює ім’я входу, але не автоматично перейменовує домашній каталог. Щоб також перемістити та перейменувати домашній каталог:
sudo usermod -d /home/newname -m newnameЯкщо користувач має первинну групу з тим же ім’ям, що й його старе ім’я користувача (що є стандартним на більшості дистрибутивів), також оновіть ім’я групи:
sudo groupmod -n newname oldnameЗміна UID користувача
sudo usermod -u 2001 username> Критично: Після зміни UID всі файли, раніше належні старому UID, будуть виглядати як належні невідомому числовому ID. Ви повинні виправити це негайно:
sudo find / -user oldUID -exec chown -h username {} ;Замініть oldUID на попередній числовий UID. Ця команда шукає в усій файловій системі файли зі старим UID та переназначає їх новому імені користувача.
Додавання користувача до групи
Найпоширеніший випадок використання — надання доступу sudo користувачу:
Debian/Ubuntu:
sudo usermod -aG sudo usernameRHEL / AlmaLinux / Rocky Linux:
sudo usermod -aG wheel usernameПрапор -a критичний — він додає користувача до групи без видалення його з існуючих груп. Пропуск -a замінить усе членство в групах лише вказаною групою.
Перевірка членства в групі
id usernameШвидка довідка
Ось консолідована довідка для всіх операцій перемикання та керування користувачами, розглянутих у цьому посібнику:
