# Change username (简体中文)

翻译状态： 本文是英文页面 Change_username 的翻译，最后翻译时间：2013-03-07，点击这里可以查看翻译后英文页面的改动。

操作得当的话，在Arch（或其他Linux发行版）中更改用户名是安全的，并且很简单。你可以更改用户所属的组。按照以下步骤进行，可以保留受影响用户的UID和GID，而不会搞乱你已经设置好的文件权限。

## 步骤

警告: 确保你不是使用你要修改的用户名登录，同时按下(`Ctrl`+`Alt`+`F1`)打开一个新的终端，使用root用户登录，或用其他用户登录后使用su命令登录为root用户。

### 更改登录名

这只会修改用户的登录名字。

    # usermod -l newname oldname

### 更改用户的主目录

以下命令将会更改用户username的主目录为`/my/new/home`。

    # usermod -d /my/new/home username

### 更改用户的主目录并移动目录里的内容

移动用户username的主目录，并设置新的主目录为`/my/new/home`。

    # usermod -md /my/new/home username;

### 更改组名

更改用户所属的组名：

    # groupmod -n newname oldname

注意: 这会更改组的名字，但GID不变。

更多信息请参阅usermod和groupmod的man pages。

### 使用`/etc/passwd`手动更改

尽可能使用上面提到的方法修改用户名及其主目录，不过对于想了解黑箱里都进行了什么操作的朋友，可以用一下方式修改。

#### `/etc/passwd`文件的格式

文件的每一行都遵从指定的格式，每行分七个部分，用英文冒号“:”分开。

    <登录名>:<密码>:<UID>:<GID>:<全名/注释>:<主目录>:<用户命令解释器>

警告: 直接在文件`/etc/passwd`里设置<密码>区域是不安全的。密码应该使用passwd命令（由root）更改！

- <登录名>不能为空，而且要符合标准的*NIX命名规则。
- <密码>应该是一个加密的密码，不过可以使用一个小写的"x"（不带括号）表示密码保存在`/etc/shadow`文件里。
- 每个用户和组有一个对应的UID和GID（用户ID和组ID）。Arch里面，第一个非root用户的默认UID是1000，后续创建的用户UID也应大于1000，特定用户的GID应该属于指定的首要组，组的ID数值列在`/etc/group`文件里。
- <全名/注释>用于服务里，比如finger。这个部分可以留空。
- <主目录>用于登录命令设置`$HOME`环境变量。某些服务的用户主目录设置为"/"是安全的，但不建议普通用户设置为此目录。
- <用户命令解释器>是用户默认登录的shell，通常是Bash，还可选择其他的命令解释器，默认是"/bin/bash"（不带括号），如果你用的是别的shell，在这里设置其路径，此部分是可选的，可留空。

示例：

    jack:x:1001:100:Jack Smith,some comment here,,:/home/jack:/bin/bash

示例分解说明：用户登录名为jack，密码保存在`/etc/shadow`，UID为1001，首要组的ID是100 (users组)，全名Jack Smith并加了一些注释，主目录是`/home/jack`，使用Bash作为默认shell。

## 注意事项

- 如果要使用sudo，请更新文件`/etc/sudoers`把新的用户（以root登录使用visudo命令）添加进去。
- 如果修改了`~/.bashrc`的PATH环境变量，并把新的用户添加进去。
- 同样的，记得更改配置文件`/etc/rc.local`或者任何配置文件里用到的，放在旧的用户主目录里的脚本或者挂载点。
- 我不得不重复Firefox拼写校正里的步骤，否则更改用户名后拼写校正就不再起作用了。
- 更改用户名后，我不得不重新安装Thunderbird扩展（Enigmail）。
- 系统（桌面快捷方式，脚本等）里使用了旧的用户主目录的地方，都需要进行修改。要在脚本中避免这样的问题，可以使用`~`或`$HOME`变量来表示主目录。

Category:

- Security (简体中文)