Change username (简体中文)
操作得当的话,在Arch(或其他Linux发行版)中更改用户名是安全的,并且很简单。你可以更改用户所属的组。按照以下步骤进行,可以保留受影响用户的UID和GID,而不会搞乱你已经设置好的文件权限。
Contents
步骤
更改登录名
这只会修改用户的登录名字。
# 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
更多信息请参阅usermod和groupmod的man pages。
使用/etc/passwd
手动更改
尽可能使用上面提到的方法修改用户名及其主目录,不过对于想了解黑箱里都进行了什么操作的朋友,可以用一下方式修改。
/etc/passwd
文件的格式
文件的每一行都遵从指定的格式,每行分七个部分,用英文冒号“:”分开。
<登录名>:<密码>:<UID>:<GID>:<全名/注释>:<主目录>:<用户命令解释器>
- <登录名>不能为空,而且要符合标准的*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
变量来表示主目录。