在 Linux 中创建新用户时,我们可以选择使用 adduser 或 useradd 命令。那么,useradd 和 adduser 的区别是什么呢?实际使用的时候应该用哪一个比较好呢?下面我们来详细看一下。

2AHMRJ4 futuristic sci-fi space war ship hangar tunnel corridor with reflective glass windows 3d illustration background wallpaper

adduser 和useradd 命令的区别

useradd 命令是内置的 Linux 命令,在任何 Linux 系统中都可用。然而,使用这种低级别的工具创建用户是比较繁琐的,因为默认情况下,它不会创建主目录和用户密码。

adduser 不是标准的 Linux 命令,它本质上是一个 perl 脚本,在后台调用 useradd 命令。这个高级实用程序在 Linux 中创建用户的时候效率更高,它提供了创建主目录、设置密码以及其他一些参数的选项。

下面我们来详细看一下。

useradd 命令

我们在《使用 useradd 命令在 Linux 中添加新用户》中介绍过useradd的用法,大家感兴趣的可以看一下。现在我们再来看下其 useradd 的默认用法,你使用过如下命令吗?

useradd new_user

这个命令默认不是创建一个完整的用户,即使为其设置了密码,但还需要使用其他选项。它会在 /etc/passwd 文件中添加以下内容:

我们在《Linux 中查看所有用户的三种方法》提到过 /etc/passwd 文件(如果不清楚的话大家可以再看一下)。这样看起来,用户似乎是创建成功了,但实际用的话,会发现某些地方不对劲。

首先,在 /etc/passwd 文件中,该新建用户的第二个字段中包含 "x",这意味着在 /etc/shadow 中,密码是一个占位符,由于还没有设置密码,所以这个用户将无法登录。

第二个问题,该用户没有主目录,即 /home/test 不存在。即使设置了密码,如果用户登录的话,也会发生错误。因为 Linux 可能会阻止没有主目录的用户登录。最有可能的情况是,用户即使可以登录系统,也只是在文本模式下,但是不允许其创建他的主目录。

第三个问题,其登录的默认 shell 是 sh,而不是bash,bash 是大多数 Linux 发行版上的默认 shell。

以上问题,可以在 /etc/login.defs 中修改。

adduser 命令

adduser 命令在某些 Linux 发行版上不可用,在某些 Linux 中,它是 useradd 的一个软连接,在另外一些 Linux 系统中,它是一个 perl 脚本

adduser 命令是一个交互式高级实用程序,它以 useradd 为后台,且自动配置 /etc/login.defs。在基于 Debian 的系统中,man 手册中都会建议使用它而不是 useradd 命令。 使用 adduser 命令创建用户,它会引导你输入一系列的参数,如下图:

输入参数,回车,之后系统会创建一个完整的用户账户,包含主目录。如此,新用户就可以正常登录了。 要使用 useradd 实现相同的功能,其命令类似于:

sudo useradd -d /home/test -m -s/bin/bash \ -c FullName,Phone,OtherInfo test && passwd test

上述命令中的 -c 选项可以删掉,其后面用逗号分割的内容是要添加到 /etc/passwd 中的内容。即便如此,useradd 命令还是比 adduser 额外多了两个选项需要输入。 adduser 命令有一个可用的选项列表,如下是我们列出的一些最常用的(有关更多的信息,大家可参考帮助信息或者 man 手册)。

    1. system:添加系统用户。默认情况下,系统用户位于 nogroup 组中。要将系统用户添加到一个现有组中,需要使用 –gid 或 –ingroup 选项;

    1. home DIR:使用 DIR 作为主目录而不是默认的目录。如果需要,可以创建目录,并复制系统框架文件;

    1. shell SHELL:使用 SHELL 来代替默认的;

    1. ingroup GROUP:将用户的所属组设置为 GROUP;

  1. add_extra_groups:将新用户添加到配置文件中定义的额外组。

adduser 的配置文件可以允许我们设置一些创建用户时所要使用的默认值,比如:

    1. 默认 shell

    1. 主目录

    1. 所属组

  1. 添加额外组
Logo

更多推荐