运维日记011 - Ubuntu下更改初始用户名的方法

来源:互联网 发布:人工智能会毁灭人类 编辑:程序博客网 时间:2024/05/20 11:24

运维日记011 - Ubuntu下更改初始用户名的方法

引子

Ubuntu每两年一次发布的LTS版本都会倍加引人关注,因为LTS版本有长达五年的支持周期,对于我等不是太喜欢折腾尝鲜而是希望几年之内不用重装系统的用户颇有吸引力。不久前Ubuntu16.04.1已经发布了。按照以往的使用经验,今年4月份发布的Ubuntu16.04一定是bug多多(因为可能赶工期而测试不足),满足不了作为主力生产工具的要求,但是16.04.1就不一样了,修改了大量bug之后就会稳定很多。所以今日一有闲,我就忙不迭下载下来安装到我的电脑上。但是安装的时候一不小心,在创建用户这一步骤把用户名填错了,当然这样使用起来也不会有任何问题,但我作为一个强迫症患者是绝不允许这样将就的。下面的问题来了,怎么更改用户名呢?

实战

假如我们在安装Ubuntu的过程中创建的用户为sailer,我们以把用户名sailer改为sailor这一操作过程为例:

  • 方案一:删除用户再重建新用户

首先查看一下,当前用户属于哪些用户组。因为在系统安装过程中由安装程序创建的用户会被加入到若干组中。而如果用户不在这些组中,该用户登入桌面后可能有些操作会受限,如无法执行sudo操作,无法自动挂载光盘或者移动硬盘,无法播放声音等等。所以我们先查看一下当前用户属于哪些组,记下来。

$ groupssailer adm cdrom sudo dip plugdev lpadmin sambashare

接下来要把当前用户删除,但是当前用户是无法删除自己的,即使sudo也不行。例如:

$ sudo userdel saileruserdel: user sailer is currently used by process 5046

所以,当前用户必须退出系统,用另一个用户(如root用户)登陆并执行userdel操作。但Ubuntu安装过程中是不指定root用户密码的,所以默认状态下root用户无法登陆。因此必须先设定root用户密码:

$ sudo passwd

然后当前用户退出系统,CTRL+ALT+F1打开一个字符终端,用root用户登陆,然后删除刚才的用户,顺带着把该用户的主目录也删掉吧:

# userdel sailer# rm -rf /home/sailer

接着创建新的用户,并为之设定密码:

# useradd sailor# passwd sailor

这时你创建的新用户仅仅会属于用户的私有组,最后我们还需要把这个用户加入到第一步记下来的若干组中去:

# usermod -G adm,cdrom,sudo,dip,plugdev,lpadmin,sambashare sailor

reboot,完事大吉!

  • 方案二:修改与用户和组相关的配置文件

这种方法更加本质,直接修改与用户和组相关的几个配置文件。其实userdel、useradd、passwd等命令本质上也是修改这几个文件。Linux下没有直接更改用户名的命令工具,或者有这样的工具但我不知道,但即使有这样的工具,其本质也是修改这几个配置文件。

同方案一一样,首先还是查看一下,当前用户属于哪些用户组,并记下来。然后设置root用户密码。接着以root用户身份打开/etc/passwd文件,这个文件设置了当前系统的所有用户相关信息。

$ su -# vim /etc/passwd... ...sailer:x:1000:1000:sailer,,,:/home/sailer:/bin/bash

这个文件每行对应着一个用户,每行由冒号分割为7个字段,其含义分别为:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

这里我们找到我们需要修改的用户,将该行的用户名更改一下即可,另外把用户的主目录最好也改一下,让主目录与用户名相同(这样符合强迫症患者的习惯)。而用户的uid和gid都无需改动。例如上面的passwd文件我们改成这个样子:

# vim /etc/passwd... ...sailor:x:1000:1000:sailor,,,:/home/sailor:/bin/bash

修改一下用户的主目录的目录名:

# mv /home/sailer /home/sailor

用户的登陆密码其实并不存放在/etc/passwd文件中,而是在/etc/shadow文件中。打开它:

# vim /etc/shadow... ...sailer:$6$tDOxH2en$Neyhp/0oRtJk7kjxX.L3OAkcVIiyxNt8P/rsoo5aeTMQbjG5rSNwsXs3BR15qJ6mNedU47h2YFepMAVG9uMyx0:17035:0:99999:7:::

这个文件存放了用户的密码(经过加密)还有密码的失效时间等一些信息。同passwd文件一样,每行对应一个用户,每行以冒号分割为若干字段,其中第一个字段为用户名。找到我们要修改的用户名,直接改之。经过前面两步,其实用户名已经改好了,而密码还是原来的密码,原来的用户的uid和gid也不变。最后我们还需要把这个用户加入到若干组中去。打开/etc/group文件:

# vim /etc/group... ...sudo:x:27:sailer... ...plugdev:x:46:sailer... ...sailer:x:1000:

这个文件每行对应一个用户组,其格式为“组名:组密码占位符:组ID:组内用户列表”。另外Linux下有一个私有组概念,即每创建一个用户,系统会自动创建一个与用户同名的组,该组为该用户的主组(或称私有组)。用户除了属于与自己同名的主组外,还会属于其他组,这些组称为用户的附加组。

刚才我们修改了用户名,那么用户所属的私有组的组名也应该一并修改(当然不改也不会有任何问题,私有组和附加组并无实质区别,但我们是强迫症嘛,所以改之),找到要修改的组名sailer,改为sailor。原sailer用户属于若干个附加组中,如sudo组、plugdev组等,我们将这些组的组内成员列表的sailer改为sailor。改完后是如下效果:

# vim /etc/group... ...sudo:x:27:sailor... ...plugdev:x:46:sailor... ...sailor:x:1000:

与passwd文件对应一个shadow文件用于存储用户登陆密码类似,group文件也对应一个gshadow文件用于存放用户组的密码。其实用户组密码对于我们这种桌面应用环境来说根本用不着,但作为强迫症患者还是要把系统修改完美。我们打开这个文件看一下:

# vim /etc/gshadowsaned:!::davfs2:!::sailer:!::

同样每行对应一个组,格式为:“组名:密码:组管理者:组内用户列表”,其中密码字段为”!”表示没有密码。这里我们只需要将组名sailer改为sailor就行了。

好了,到这里才算大功告成了!

  • 方案三:两条命令搞定

首先设置root用户密码,sailer用户退出系统,以root用户登陆。

# usermod -l sailor -md /home/sailor sailer# groupmod -n sailor sailer

解释一下,usermod命令更改用户名的格式:
usermod -l New_Login_Name, -md Home_Directory Old_Login_Name
-md即”move和directory”,表示要修改用户登陆的主目录。
group修改用户组名的格式为:
groupmod -n NewName OldName

尾声

Windows用户最大的困惑是知其然而不知其所以然,而Linux能让你知其所以然,在这个小插曲中我们就可以深刻体会到这一点。假如你手边有Windows7,你可以尝试一下更改用户名是怎么样一个过程。

0 0
原创粉丝点击