Как изменить пользователя в Linux: полное руководство
Linux — это многопользовательская операционная система по своей природе, и управление идентификацией пользователей — один из самых фундаментальных навыков, которым должен овладеть любой системный администратор. Независимо от того, управляете ли вы окружением VPS Hosting, настраиваете веб-сервер или устраняете проблемы с разрешениями файлов после развертывания, понимание того, как переключаться между пользователями в Linux, является необходимым.
Фраза «смена пользователя» в Linux на самом деле охватывает несколько отдельных операций, каждая со своими инструментами, рисками и лучшими практиками:
- Переключение на другую учетную запись в оболочке (например, с
johnнаroot) для интерактивного сеанса - Запуск одной команды от имени другого пользователя без полного переключения сеансов
- Изменение пользователя, от имени которого запускается служба или процесс — критично для усиления безопасности
- Изменение владельца файлов и каталогов — необходимо после миграций, восстановлений или развертываний
- Изменение атрибутов учетной записи пользователя — переименование пользователей, изменение UID или корректировка членства в группах
Это руководство охватывает все эти сценарии в деталях, объясняя, когда использовать каждый подход, как это делать безопасно и какие ошибки избегать — чтобы вы могли уверенно управлять пользователями Linux без нарушения разрешений, служб или доступа.
Переключение на другого пользователя (интерактивная оболочка)
Когда вам нужен полный интерактивный сеанс терминала от имени другого пользователя — для администрирования системы, тестирования поведения приложения под другой учетной записью или доступа к учетной записи сервиса — Linux предоставляет два основных инструмента: su и sudo.
Использование su (переключение пользователя)
Команда su заменяет вашу текущую идентификацию пользователя на другую:
su - usernameФлаг - (также записывается как -l или --login) важен: он загружает полную среду входа целевого пользователя, включая его домашний каталог, PATH, профиль оболочки и переменные окружения. Без флага - вы наследуете большую часть вашего текущего окружения, что может привести к тонким и запутанным проблемам — особенно при запуске скриптов или сервисов.
Для прямого переключения на root:
su -> Примечание безопасности: На многих современных дистрибутивах Linux пароль учетной записи root отключен по умолчанию (особенно в системах на основе Ubuntu). В этих случаях su на root не будет работать, и sudo — правильный подход.
Использование sudo -i (предпочтительно для оболочек root/администратора)
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 и production VPS окружениях, где одновременно могут работать несколько сервисов.
Проверка текущей конфигурации сервиса
systemctl cat myservice.serviceИщите директивы User= и Group= в секции [Service]:
[Service]
User=www-data
Group=www-dataПереопределение пользователя сервиса (безопасный метод)
Вместо редактирования исходного файла unit (который может быть перезаписан при обновлении пакета), используйте 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Получите полную информацию об идентификации (пользователь, группы, UIDs)
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Краткая справка
Вот консолидированная справка для всех операций переключения пользователей и управления, описанных в этом руководстве:
| Задача | Команда | |
|---|---|---|
| Переключиться на другого пользователя (login shell) | su - username | |
| Переключиться на другого пользователя через sudo | sudo -iu username | |
| Открыть root shell | sudo -i | |
| Выполнить команду от другого пользователя | sudo -u username command | |
| Выполнить команду от postgres | sudo -u postgres psql | |
| Проверить текущего пользователя | whoami | |
| Проверить полную идентификацию и группы | id | |
| Проверить исходного вызывающего sudo | echo $SUDO_USER | |
| Изменить владельца файла | sudo chown username file | |
| Изменить владельца и группу файла | sudo chown username:group file | |
| Рекурсивное изменение владельца | sudo chown -R username:group /path | |
| Предпросмотр владельца директории | find /path -maxdepth 2 -printf '%u:%g %pn' | |
| Изменить пользователя сервиса (systemd) | sudo systemctl edit myservice.service | |
| Перезагрузить systemd после изменений | sudo systemctl daemon-reload | |
| Проверить пользователя процесса | `ps -eo user,pid,cmd | grep service` |
| Переименовать пользователя | sudo usermod -l newname oldname | |
| Переместить домашнюю директорию | sudo usermod -d /home/newname -m newname | |
| Изменить UID | sudo usermod -u 2001 username | |
| Исправить владельца после изменения UID | sudo find / -user oldUID -exec chown -h username {} ; | |
| Добавить пользователя в группу sudo | sudo usermod -aG sudo username | |
| Проверить членство в группе | id username |
Резюме
Управление пользователями в Linux — это не одна операция, а семейство связанных задач, каждая со своими инструментами и последствиями:
- Используйте
sudo -iu usernameдля интерактивных сеансов от имени другого пользователя (предпочтительнееsuв современных системах) - Используйте
sudo -u username commandдля запуска отдельных команд с другой идентификацией - Используйте
systemctl editдля безопасного изменения пользователя, от имени которого запускается сервис systemd - Используйте
chownдля исправления владельца файлов после развертывания, миграции или проблем с разрешениями - Используйте
usermodдля постоянных изменений учетной записи — переименование, изменение UID и управление группами
Понимание этих различий помогает избежать распространенных ошибок, таких как нарушение разрешений сервиса, блокировка доступа к файлам или случайное предоставление чрезмерных привилегий.
Если вы управляете инфраструктурой на базе Linux — будь то веб-сервер, база данных или пользовательский стек приложений — правильно настроенная среда хостинга значительно упрощает управление пользователями. AlexHost предлагает гибкие панели управления VPS и VPS с cPanel, которые дают вам полный доступ root наряду с интуитивным интерфейсом управления, чтобы вы могли с уверенностью применить все из этого руководства.
на всех хостинговых услугах