15%

所有托管服务节省 15%

测试您的技能,并获得任何托管计划的折扣

使用代码:

Skills
开始使用
02.01.2026

如何在Linux中更改用户?

在Linux中,“更改用户”这个短语可以描述几种不同的操作——一些是临时的、基于会话的,另一些是永久的、系统范围的。由于Linux是一个多用户操作系统,它提供了多种切换身份和权限的方法,具体取决于您想要实现的目标:管理服务器、以有限权限运行应用程序、修复文件访问问题或重组用户帐户。

在Linux中更改“用户”根据上下文可能意味着几种不同的事情:

    • 在shell中切换到另一个帐户(例如,从john切换到root)
      当您需要以另一个用户身份进行交互式终端会话时使用——通常用于系统管理或测试某些在不同帐户环境下的行为。
    • 以另一个用户身份运行单个命令
      当您只需要提升权限或不同身份来完成一项任务(例如重启服务或运行数据库命令)而不完全切换会话时,这是理想的选择。
  • 更改服务/进程的默认登录用户
    服务(Web服务器、数据库、应用程序)通常应在专用的非root用户下运行以确保安全。更改服务用户会影响进程的运行方式及其可以访问的内容。
  • 更改文件和目录的拥有者
    文件所有权控制访问。如果权限错误——在迁移、恢复或部署后很常见——您可以通过重新分配所有权来“更改用户”,以便正确的帐户可以读取/写入文件。
  • 更改用户身份属性(用户名、UID、组)
    这属于帐户管理:重命名用户、更改其UID或调整组成员资格(例如授予sudo访问权限)。这些更改可能会影响登录、权限和服务访问。

本指南涵盖所有这些场景,展示何时使用每种方法、如何安全地执行以及应避免哪些错误——这样您就可以自信地更改用户,而不会破坏权限、服务或访问。

切换到另一个用户(交互式shell)

su(切换用户)

su - username
  • -(或-l)加载目标用户的完整登录环境:主目录、PATH、shell配置文件。

  • 没有-,您将保留当前环境中的许多内容(可能会造成混淆)。

切换到root:

su -

安全提示:在许多发行版中,su需要目标用户的密码(例如,root密码),这通常是禁用的。

sudo -i(适用于root/admin shell)

sudo -i

为您提供一个root登录shell(类似于su -),使用您的sudo权限而不是root密码。

使用登录shell切换到另一个用户:

sudo -iu username

以另一个用户身份运行单个命令(非交互式)

sudo -u

sudo -u username whoami
sudo -u postgres psql

以干净的登录类环境运行:

sudo -iu username

以root身份运行命令

sudo systemctl restart nginx

更改正在运行的进程的“有效用户”(高级现实)

在大多数实际场景中,Linux允许您“更改用户”已经在运行的进程。相反,您通常会:

  • 在正确的用户下重新启动进程

  • 或使用服务管理器(systemd)定义用户

要检查哪个用户正在运行某个进程:

ps -eo user,pid,cmd | grep nginx

或者:

ps -p <PID> -o user,group,cmd

更改服务以哪个用户身份运行(systemd)

大多数生产Linux使用systemd。服务应以专用的、无特权的用户身份运行。

检查服务配置:

systemctl cat myservice.service

查找:

  • User=

  • Group=

示例覆盖(安全方法):

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

更改文件所有权(更改文件的“用户”)

chown(所有者更改)

更改所有者:

sudo chown username file.txt

更改所有者和组:

sudo chown username:groupname file.txt

递归(小心):

sudo chown -R username:groupname /var/www/site

保留符号链接(避免更改链接目标):

sudo chown -h username:group symlink

高级提示:对于大型树,先预览:

find /path -maxdepth 2 -printf '%u:%g %pn' | head

更改您当前的shell身份与更改帐户本身

确认您是谁

whoami
id

确认谁已登录

who
w

查看哪个用户通过sudo运行当前shell

echo $USER
echo $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后,修复文件所有权:

sudo find / -user oldUID -exec chown -h username {} ;

将用户添加到组(例如,sudo)

sudo usermod -aG sudo username # Debian/Ubuntu
sudo usermod -aG wheel username # RHEL/Alma/Rocky

验证:

id username

快速“备忘单”

切换用户:

su - user
sudo -iu user

以另一个用户身份运行命令:

sudo -u user command

运行root shell:

sudo -i

更改文件所有者:

sudo chown -R user:group /path

更改帐户详细信息:

sudo usermod -l new old
sudo usermod -d /home/new -m new
sudo usermod -aG
sudo user
15%

所有托管服务节省 15%

测试您的技能,并获得任何托管计划的折扣

使用代码:

Skills
开始使用