Как изменить пользователя в 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 ко всей системе.
Это особенно важно на выделенных серверах и производственных окружениях 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 — это ваш основной инструмент для исправления этого.
Это распространенная задача при настройке окружений общего веб-хостинга или развертывании веб-приложений на 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Краткая справочная шпаргалка
Вот консолидированная справка для всех операций переключения пользователей и управления, охватываемых в этом руководстве:
| Задача | Команда |
|---|---|
| Переключение на другого пользователя (оболочка входа) | su - username |
| Переключение на другого пользователя через sudo | ###PPT_NOTR_74_CODE |
