添加用户是 Linux 中最基本的操作之一,但最常用的 useradd 命令在不同 Linux 发行版可能有着不同的行为,而方便好用的 adduser 命令不是所有 Linux 发行版都自带。

深入了解 useradd 命令可以帮助我们更好地管理 Linux 系统。

useradd 命令

useradd [选项] <用户名>

只有 root 用户或者拥有 sudo 权限的用户可以使用 useradd 命令来创建新用户。

创建新用户时,useradd 根据执行命令时所提供的选项和 /etc/default/useradd 文件中的默认值来创建新用户。

但在不同的 Linux 发行版上 /etc/default/useradd 文件中的内容有所不同,这就导致 useradd 命令在不同的 Linux 发行版上可能有着不同的执行结果。

此外,useradd 命令还会读取 /etc/login.defs 文件。其中包含诸如密码过期策略、系统用户和一般用户的 UID 范围等等。

简简单单创建一个新用户

sudo useradd <用户名>

当不提供任何选项时,useradd 命令根据 /etc/default/useradd 文件中的默认值来创建新用户。

执行后,useradd 命令自动在 /etc/passwd/etc/shadow/etc/group/etc/gshadow 中添加相应项。

但 useradd 命令只会创建新用户而不会为其设置密码,要想以新用户的身份登录,还需要为其设置一个密码。

$ sudo passwd <用户名>
New password: 
Retype new password: 
passwd: password updated successfully

创建拥有家目录的新用户

使用 -m (--create-home) 选项来创建拥有家目录 (/home/<用户名>) 的新用户

sudo useradd -m <用户名>

该选项将创建新用户的家目录 (/home/<用户名>) 并将 /etc/skel 目录下的文件复制至新用户的家目录。

$ sudo ls -la /home/hydrotho/
total 12
drwx------ 2 hydrotho hydrotho  62 Jan  1 10:10 .
drwxr-xr-x 4 root     root      32 Jan  1 10:10 ..
-rw-r--r-- 1 hydrotho hydrotho  21 Nov 22 03:31 .bash_logout
-rw-r--r-- 1 hydrotho hydrotho  57 Nov 22 03:31 .bash_profile
-rw-r--r-- 1 hydrotho hydrotho 141 Nov 22 03:31 .bashrc

创建新用户并将其添加至多个用户组

Linux 系统中的用户组分为主用户组和附加用户组。一个用户可以属于一个主用户组并同时属于零或多个附加用户组。

在 Linux 系统的日常使用中,我们往往不直接使用 root 用户而是使用一般用户,但又时常需要 root 权限来执行一些操作。此时,我们往往使用 sudo 命令来临时提权。

为了让一般用户拥有使用 sudo 命令的权限,我们可以使用 -G (--groups) 选项将其添加至 wheel 组。

sudo useradd -G wheel <用户名>

有些 Linux 发行版没有 wheel 用户组,取而代之的是 sudo 用户组。

我们可以使用 id 命令查看当前用户的信息。

$ id
uid=1001(hydrotho) gid=1001(hydrotho) groups=1001(hydrotho),998(wheel)

创建新用户时指定默认 Shell

默认情况下,新用户的默认 Shell 由 /etc/default/useradd 文件中的值来指定,可能是 /bin/sh 或者 /bin/bash。若想要指定默认 Shell,可以使用 -s (--shell) 选项。

sudo useradd -s /bin/bash <用户名>

若想要确认当前用户所使用的 Shell,可执行

$ echo $SHELL
/bin/bash

修改 useradd 命令的默认值

在上文中多次提到,若 useradd 命令的选项缺省,将使用 /etc/default/useradd 文件中的默认值来创建新用户。

那么,我们能不能修改 useradd 命令的默认值,使得在创建用户时更加统一且快捷呢?答案是肯定的。

查看当前 useradd 命令的默认值

$ useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

修改默认 Shell 为 /bin/bash

sudo useradd -D -s /bin/bash

adduser 命令

useradd 是添加用户的底层工具,而 adduser 则是一个用 Perl 编写的 useradd 的交互式前端工具。然而并不是所有 Linux 发行版都自带 adduser,抑或是可以直接安装 adduser。

adduser 的使用极其简单,跟随提示即可。

$ sudo adduser hydrotho
Adding user `hydrotho' ...
Adding new group `hydrotho' (1001) ...
Adding new user `hydrotho' (1001) with group `hydrotho' ...
Creating home directory `/home/hydrotho' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for hydrotho
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y

总结

useradd 虽然需要记住一些选项和考量一些细节,但其功能强大,并且更适合批量脚本操作。

adduser 虽然使用简单,但其交互式的特性注定其无法用于批量管理,并且无法深度自定义创建用户的其他参数。

日常使用中,其实只要使用下面这条命令就能应对大部分的使用场景。

sudo useradd --groups wheel --create-home --shell /bin/bash <用户名>

有些 Linux 发行版没有 wheel 用户组,取而代之的是 sudo 用户组。
请注意根据 Linux 发行版的不同,自行替换。