除了更广泛的命令之外useradd
,基于 Debian 的系统还包含一个附加adduser
命令,它为添加用户和一些相关任务提供了更高级别的界面。其他 SE 站点上有各种问题/答案,详细介绍了这些命令之间的基本差异,例如:
- 服务器故障 -“useradd”和“adduser”有什么区别?
- 超级用户 -“adduser”和“useradd”有什么区别?
- 询问 Ubuntu -adduser 和 useradd 有什么区别?
大多数答案本质上说,它adduser
为交互式添加用户提供了更好的界面,但没有详细说明adduser
运行时与useradd
.所以:
- 什么是
adduser
做什么而useradd
不是做什么? - 我需要使用哪些命令才能产生相同的结果?
答案1
首先,各自的手册页片段突出显示了两个命令之间的差异,并给出了一些有关正在发生的情况的指示。为了adduser
:
adduser 和 addgroup 根据命令行选项和 /etc/adduser.conf 中的配置信息将用户和组添加到系统中。它们是 useradd、groupadd 和 usermod 程序等低级工具的更友好的前端,默认情况下选择符合 Debian 策略的 UID 和 GID 值、创建具有骨架配置的主目录、运行自定义脚本和其他功能。
然后对于useradd
:
useradd 是一个用于添加用户的低级实用程序。在 Debian 上,管理员通常应该使用 adduser(8)。
进一步调查adduser
表明,它是一个 perl 脚本,为以下命令提供高级接口,从而提供以下命令的一些功能:
useradd
groupadd
passwd
- 用于添加/更改用户密码。gpasswd
- 用于添加/更改组密码。usermod
- 用于更改各种用户相关参数。chfn
- 用于添加/更改用户持有的附加信息。chage
- 用于更改密码到期信息。edquota
- 用于更改磁盘使用配额。
该命令的基本运行adduser
如下:
adduser username
这个简单的命令将执行许多操作:
- 创建名为 的用户
username
。 - 创建用户的主目录(默认为
/home/username
并将文件复制到/etc/skel
其中)。 - 创建一个与用户同名的组并将用户放入其中。
- 提示用户输入密码。
- 提示用户输入更多信息。
该useradd
程序可以完成大部分任务,但是默认情况下它不会这样做,并且需要其他选项。一些信息需要更多命令:
useradd -m -U username
passwd username
chfn username
请注意,adduser
确保创建的 UID 和 GID 符合Debian 政策。创建普通用户似乎useradd
没问题,前提是UID_MIN
/ UID_MAX
in/etc/login.defs
符合 Debian 政策。但问题是 Debian 为系统用户 UID 指定了一个特定范围,该范围似乎仅在 中受支持/etc/adduser.conf
,因此天真地添加系统用户useradd
而不在正确范围内指定 UID/GUID 可能会导致严重问题。
另一个常见用途adduser
是简化将用户添加到组的过程。在这里,以下命令:
adduser username newgroup
相当于以下usermod
命令:
usermod -a -G newgroup username
在这种情况下的主要缺点usermod
是,忘记传递附加选项(即-a
:)最终会在将用户添加到“newgroup”之前从所有组中删除用户(即:-G
单独意味着“替换为”)。
但在这里使用的一个缺点adduser
是您一次只能指定一组。
答案2
我遇到的一个显着差异(并且在此处的答案中没有看到)是创建系统用户的含义。
useradd --system
似乎暗示--shell /bin/bash
,而adduser --system
暗示--shell /usr/sbin/nologin
,这就是我想要的。
因此,如果我既不需要 shell,又不需要主目录,我可以使用用户添加像这样
useradd --system --shell /usr/sbin/nologin foo
这导致例如以下条目/etc/passwd
foo:x:994:991::/home/foo:/usr/sbin/nologin
或者使用添加用户像这样
adduser --system --no-create-home foo
这导致例如以下条目/etc/passwd
foo:x:110:65534::/home/foo:/usr/sbin/nologin
另外,adduser
不创建组(用户 110 在组 65534 中,又名没有组)。这接受的答案还提到了有关 (G)UID 的风险,所以我肯定会坚持添加用户。
来源:在 Raspberry Pi 操作系统(基于 Debian Buster)上测试。
答案3
这添加用户默认情况下,命令还会为系统用户创建一个 /home/user 目录,但您无法使用用户添加命令。 useradd 只为普通用户添加主目录,而不是系统用户。
答案4
系统管理员可以使用 useradd 执行任何可以使用 adduser 执行的操作。这里指出,您不能使用 useradd 为系统用户创建 /home/user 目录,但是您绝对可以通过修改 /etc/skel 中包含的文件来创建 /home/user 目录。 /etc/skel 包含最初用于填充新用户主目录的文件集。