如何安全地为用户重命名?

我在安装Ubuntu时拼错了用户名,如果可能的话,我想改名。如何安全地更改我的用户名?

2这个回答可能仍然有效。 - Takkat
谢谢,@takkat。你已经得到一个关于如何重命名用户的好的正式答案。但是我相信我在这里得到的Jo-Erlend的建议更安全 :-) - Ivan
如果你对用户的操作不多,我肯定会选择Jo-Erlends的方法。我有其他人在脑海中,他们可能会来这里寻求更复杂的解决方案。重命名用户并非一项简单的任务。 - Takkat
3个回答

安全地?根本不要重命名。相反,(确保用户首先退出登录)使用正确的用户名创建一个新用户,将旧的主目录重命名为新用户名,并将文件夹的所有权 -R 更改为新用户。
这假设您没有使用加密的主目录。这需要一些不同的步骤,但由于我自己没有这样做过,所以我会把它留给其他人来处理。

使用usermod命令的方法如下:
usermod -l newname currentname

我最近遇到了这个问题,并找到了解决方案。
  1. 备份与用户和组相关的文件

    sudo cp /etc/passwd ~/passwd.bak
    sudo cp /etc/group ~/group.bak
    sudo cp /etc/subuid ~/subuid.bak
    sudo cp /etc/subgid ~/subgid.bak
    sudo cp /etc/gshadow ~/gshadow.bak
    sudo cp /etc/shadow ~/shadow.bak
    
  2. 我们需要进入“恢复模式”(启动时按下Shift,在GRUB中选择“Ubuntu高级选项”,选择“Ubuntu,带有Linux...(恢复模式)”)

  3. 选择root 转到根shell提示符以访问root shell
  4. 在被询问时输入您的主要用户(通常GID = 1000,属于sudo组)密码

    按Enter进行维护
    (或按Control-D继续):
    
  5. 重新挂载所有文件系统为读写模式

    mount -o rw,remount /
    mount -o rw,remount /home
    
  6. 将用户从old_user重命名为new_user,重命名用户名称的注释(/etc/passwd中的第5个字段)并移动其主目录

    OLDNAME="old_user"
    NEWNAME="new_user"
    usermod -l $NEWNAME $OLDNAME -c $NEWNAME -d /home/$NEWNAME  -m
    
  7. 将用户组从old_user重命名为new_user

    groupmod $OLDNAME -n $NEWNAME
    
  8. /etc/subgid/etc/subuid中将old_user替换为new_user

    sed -i "s/$OLDNAME/$NEWNAME/g" /etc/subuid
    sed -i "s/$OLDNAME/$NEWNAME/g" /etc/subgid
    
  9. 重新启动系统,然后使用new_user名称和旧密码登录。可选择使用passwd更改密码

  10. 如果一切顺利-删除备份的文件:

    sudo rm ~/passwd.bak ~/group.bak ~/subuid.bak ~/subgid.bak \
    ~/gshadow.bak ~/shadow.bak
    
注意:您可以在它们的man页上了解有关usermodgroupmod使用选项的信息。