Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux OS

Как изменить пользователя в 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 whoami
sudo -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.service
ps -eo user,pid,cmd | grep myservice

Проверка пользователя любого запущенного процесса

ps -eo user,pid,cmd | grep nginx
ps -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)

Посмотрите, кто вошел в систему

who
w

Проверьте исходного пользователя при использовании 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 username

RHEL / AlmaLinux / Rocky Linux:

sudo usermod -aG wheel username

Флаг -a критичен — он добавляет пользователя в группу без удаления его из существующих групп. Пропуск -a заменит все членства в группах только указанной группой.

Проверка членства в группе

id username

Краткая справка

Вот консолидированная справка для всех операций переключения пользователей и управления, описанных в этом руководстве:

ЗадачаКоманда
Переключиться на другого пользователя (login shell)su - username
Переключиться на другого пользователя через sudosudo -iu username
Открыть root shellsudo -i
Выполнить команду от другого пользователяsudo -u username command
Выполнить команду от postgressudo -u postgres psql
Проверить текущего пользователяwhoami
Проверить полную идентификацию и группыid
Проверить исходного вызывающего sudoecho $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,cmdgrep service`
Переименовать пользователяsudo usermod -l newname oldname
Переместить домашнюю директориюsudo usermod -d /home/newname -m newname
Изменить UIDsudo usermod -u 2001 username
Исправить владельца после изменения UIDsudo find / -user oldUID -exec chown -h username {} ;
Добавить пользователя в группу sudosudo 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 наряду с интуитивным интерфейсом управления, чтобы вы могли с уверенностью применить все из этого руководства.