深入了解 Useradd 命令
添加用户是 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 发行版的不同,自行替换。