Debian中useradd无法添加用户的原因及解决方法

文章目录

  • 文章简介
  • 前言
  • 一、 重现问题
    • 1. 直接使用useradd 添加用户
  • 二、 分析原因
  • 三、 解决方案
    • 1. 直接使用图形界面操作, 不使用Shell
    • 2. 使用 adduser 命令
    • 3. 使用 useradd -m < usenamer> 命令
  • 四、拓展知识
    • 1. 删除用户的方法
    • 2. adduser 依旧无法添加用户的解决方法
      • 1. 使用"--allow-bad-names"选项来绕过这个检查
      • 2. 重新配置 NAME_REGEX
  • 总结
  • 参考资料

文章简介

本文讲述了在Debian系统中添加用户的方法。 并且说明了使用useradd无法添加用户的原因及解决方法。 同时,顺便介绍了删除用户的方法,以及adduser 依旧无法添加用户的解决方法。

前言

众所周知,Linux是一个不断更新的系统, 并且衍生了很多不同的发行版本。 但是由于不同开发人员对系统的理解都不一样, 所以不同操作系统的Shell都略微存在差异。
比如在Debian1中,使用useradd 是无法添加用户的。 因为它无法在 /home/ 下生成对应目录。 即便其在 /ect/passwd 文件中有记录, 这依然是一个被禁用的用户。
对于解决该问题, 一共有三种方法:

  1. 直接使用图形界面操作, 不使用Shell
  2. 使用 adduser 命令
  3. 使用 useradd -m < usenamer > 命令
    提示:<username>是用户名的意思。 比如你的名字叫 xiaoming, 那就用 xiaoming 替换<username>

请不要着急, 接下来我会一一你介绍。 并且我不会只告诉你解决方法, 我也会告诉你,他之所以这样做的原因。 所以接下来我会分析问题, 如果你只是想要知道解决方法的话, 可以直接跳过。


一、 重现问题

1. 直接使用useradd 添加用户

比如这里我们添加新用户xiaoming (小明)。
提示:在Debain中, 即便在管理员模式下, 想要使用具有危险性的指令, 依旧需要在前面加sudo。
提示:以下命令均在root模式下进行

 sudo useradd xiaoming 

运行完该指令后, 按理来说此时应该在 /home 目录下存在 xiaoming 目录。 但是实际上并没有:
在这里插入图片描述
在这里插入图片描述

二、 分析原因

使用命令cat /etc/passwd2 查看用户添加情况。

cat /etc/passwd

结果: (* 号代表涉及隐私内容, 不便公开。)************************************************************************************************************************************************************************************************************************************************************************************
xiaoming:x :1001:1003::/home/xiaoming:/bin/sh

由此可见,账户 xiaoming 已经添加到了系统文件 /etc/passwd 中, 但是却没有形成目录。 这不符合常理, 所以下一步我们查看图形界面的情况是什么样的:终端输入 gnome-control-center 就可以打开系统设置。

gnome-control-center

点击:用户 —> 其他用户, 找到刚刚创建好的 xiaoming 。 点进去一探究竟。
在这里插入图片描述
结果发现该账户被禁用了:
在这里插入图片描述
考虑到这种结果, 结合命令useradd不需要输入密码的操作, 我们可以合理的推测, 系统开发人员是认为useradd命令不安全, 所以禁止了该命令的使用。 其结果就是, 该命令无法创建家目录, 即便系统文件承认了该用户, 进入图形界面的设置也可以发现该用户被禁用了。 所造成的结果就是使用 useradd 无法正常的创建用户。

三、 解决方案

1. 直接使用图形界面操作, 不使用Shell

终端输入 gnome-control-center 打开系统设置。

gnome-control-center

点击:用户 —> 添加用户。 然后你会看到这个:在这里插入图片描述
接下来怎么做, 就不用我多说了吧。。。

2. 使用 adduser 命令

sudo adduser <username>

3. 使用 useradd -m < usenamer> 命令

sudo useradd -m <usenamer>

这里的 -m 表示创建用户时同时创建用户的家目录。


四、拓展知识

1. 删除用户的方法

此时我们已经成功添加的一个新用户, 但是后续由于各种原因你可能会想要删掉它。 这样我们就有必要学习一下在Debian中删除用户的方法了。
需要注意的是,Debian 删除用户的指令也和绝大多数Linux不同! 如果只是使用常规的 sudo userdel < username> 命令,会发现只是删除了 /etc/passwd 中的信息,其中家目录一样无法删除(也可以简单地理解为删除失败)。
以小明为例, 以下是彻底删除用户的方法:

sudo deluser --remove-homne xiaoming

也就是:sudo deluser --remove-homne < username>

2. adduser 依旧无法添加用户的解决方法

当你看到我上面的内容之后, 自信满满的决定添加用户。 但是却发现使用adduser 依旧无法添加用户, 这大概率是由于你的用户名不合规。 出于我也不知道的原因,Debian 将用户名做了规范(也许是出于安全原因, 比如防止内存泄露之类的。。。)。
比如你如果这么添加用户:

sudo adduser Tom

结果:adduser:请输入一个和配置变量 NAME_REGEX 的正则表达式相匹配的用户名。
使用"–allow-bad-names"选项来绕过这个检查或者重新配置
或重新配置 NAME_REGEX。

可以发现结果非常的惊喜呀! 不出所料, 没有添加成功。 至于解决方法, 其实终端已经告诉你了, 接下来我将为你翻译一下终端说的话:(解决该问题有两种方法)

1. 使用"–allow-bad-names"选项来绕过这个检查

sudo adduser --allow-bad-names Tom

这样就可以正常添加用户了。

2. 重新配置 NAME_REGEX

如果你觉得第一种方法太low了, 想要尝试一点更高端的玩法。 或者说你有很多用户需要添加, 并且需要添加的用户名字都是违规的, 那么这是为了方便省事, 采取第二种方法也不失为一种好的选择!
第二种方法我们需要进入到系统内部文件, 可能会有一点麻烦。 并且还需要一点正则表达式的基础(不会也没关系, 照抄我的也行):

vim /etc/adduser.conf

打开之后, 你会发现一堆配置文件。 我们的任务是需要找到 NAME_REGEX 正则表达式。(vim下的内容查找方法不做讲解, 不会的可自行查找):
找到以下内容, 进行修改:

#NAME_REGEX="^ [a-z][-a-z0-9_]*$?$

修改为以下: 提示:^[A-Za-z]+$ 代表只能输入由26个英文字母组成的字符串
在这里插入图片描述
然后保存修改后的文件。 此时我们可以测试一下是否成功, 还是输入刚刚的命令:

sudo adduser Tom

结果:
在这里插入图片描述
这样一来, 这就成功了!

总结

以上就是这篇文章的所有内容了。 在这篇文章中, 我们分析了Debian中useradd无法添加用户的原因, 同时分享了解决方法。 一共分享了三种解决方法:

  1. 直接使用图形界面操作, 不使用Shell
  2. 使用 adduser 命令
  3. 使用 useradd -m < usenamer > 命令

同时在扩展知识中, 介绍了Debian(Linux)删除用户的方法、adduser 无法添加的解决方法(也就是用户名违规的解决方法)。同时在解决用户名违规时, 我们分享的两种解决方法:

  1. 使用"–allow-bad-names"选项来绕过这个检查
  2. 重新配置 NAME_REGEX

(希望我的分享对你有帮助! 祝愿你每天幸福、快乐。)


参考资料

https://www.debian.org/doc/manuals/debian-reference/ch01

https://www.debian.org/doc/user-manuals

https://blog.csdn.net/xuemoyao/article/details/8033138

https://blog.csdn.net/Arider/article/details/114757656


  1. Debian的版本有很多, 无法保证所有版本都会有该问题。 ??

  2. /etc/passwd 文件记录着用户的基础信息。 ??