如何在Linux中更改用户?
在Linux中,“更改用户”这个短语可以描述几种不同的操作——一些是临时的、基于会话的,另一些是永久的、系统范围的。由于Linux是一个多用户操作系统,它提供了多种切换身份和权限的方法,具体取决于您想要实现的目标:管理服务器、以有限权限运行应用程序、修复文件访问问题或重组用户帐户。
在Linux中更改“用户”根据上下文可能意味着几种不同的事情:
- 在shell中切换到另一个帐户(例如,从john切换到root)
当您需要以另一个用户身份进行交互式终端会话时使用——通常用于系统管理或测试某些在不同帐户环境下的行为。 - 以另一个用户身份运行单个命令
当您只需要提升权限或不同身份来完成一项任务(例如重启服务或运行数据库命令)而不完全切换会话时,这是理想的选择。
- 在shell中切换到另一个帐户(例如,从john切换到root)
- 更改服务/进程的默认登录用户
服务(Web服务器、数据库、应用程序)通常应在专用的非root用户下运行以确保安全。更改服务用户会影响进程的运行方式及其可以访问的内容。 - 更改文件和目录的拥有者
文件所有权控制访问。如果权限错误——在迁移、恢复或部署后很常见——您可以通过重新分配所有权来“更改用户”,以便正确的帐户可以读取/写入文件。 - 更改用户身份属性(用户名、UID、组)
这属于帐户管理:重命名用户、更改其UID或调整组成员资格(例如授予sudo访问权限)。这些更改可能会影响登录、权限和服务访问。
本指南涵盖所有这些场景,展示何时使用每种方法、如何安全地执行以及应避免哪些错误——这样您就可以自信地更改用户,而不会破坏权限、服务或访问。
切换到另一个用户(交互式shell)
su(切换用户)
-(或-l)加载目标用户的完整登录环境:主目录、PATH、shell配置文件。
没有-,您将保留当前环境中的许多内容(可能会造成混淆)。
切换到root:
安全提示:在许多发行版中,su需要目标用户的密码(例如,root密码),这通常是禁用的。
sudo -i(适用于root/admin shell)
为您提供一个root登录shell(类似于su -),使用您的sudo权限而不是root密码。
使用登录shell切换到另一个用户:
以另一个用户身份运行单个命令(非交互式)
sudo -u
以干净的登录类环境运行:
以root身份运行命令
更改正在运行的进程的“有效用户”(高级现实)
在大多数实际场景中,Linux不允许您“更改用户”已经在运行的进程。相反,您通常会:
在正确的用户下重新启动进程
或使用服务管理器(systemd)定义用户
要检查哪个用户正在运行某个进程:
或者:
更改服务以哪个用户身份运行(systemd)
大多数生产Linux使用systemd。服务应以专用的、无特权的用户身份运行。
检查服务配置:
查找:
User=Group=
示例覆盖(安全方法):
添加:
应用:
验证:
更改文件所有权(更改文件的“用户”)
chown(所有者更改)
更改所有者:
更改所有者和组:
递归(小心):
保留符号链接(避免更改链接目标):
高级提示:对于大型树,先预览:
更改您当前的shell身份与更改帐户本身
确认您是谁
确认谁已登录
查看哪个用户通过sudo运行当前shell
更改用户名、UID、组(帐户修改)
重命名用户(用户名)
还移动/重命名主目录:
更新组名(可选):
更改UID(高级;影响文件所有权)
更改UID后,修复文件所有权:
将用户添加到组(例如,sudo)
验证:
快速“备忘单”
切换用户:
以另一个用户身份运行命令:
运行root shell:
更改文件所有者:
更改帐户详细信息:
