文章目录
- 文章简介
- 前言
- 一、 重现问题
-
- 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 文件中有记录, 这依然是一个被禁用的用户。
对于解决该问题, 一共有三种方法:
- 直接使用图形界面操作, 不使用Shell
- 使用 adduser 命令
- 使用 useradd -m < usenamer > 命令
提示:<username>是用户名的意思。 比如你的名字叫 xiaoming, 那就用 xiaoming 替换<username>
请不要着急, 接下来我会一一你介绍。 并且我不会只告诉你解决方法, 我也会告诉你,他之所以这样做的原因。 所以接下来我会分析问题, 如果你只是想要知道解决方法的话, 可以直接跳过。
一、 重现问题
1. 直接使用useradd 添加用户
比如这里我们添加新用户xiaoming (小明)。
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_]*$?$
修改为以下:
然后保存修改后的文件。 此时我们可以测试一下是否成功, 还是输入刚刚的命令:
sudo adduser Tom
结果:
这样一来, 这就成功了!
总结
以上就是这篇文章的所有内容了。 在这篇文章中, 我们分析了Debian中useradd无法添加用户的原因, 同时分享了解决方法。 一共分享了三种解决方法:
- 直接使用图形界面操作, 不使用Shell
- 使用 adduser 命令
- 使用 useradd -m < usenamer > 命令
同时在扩展知识中, 介绍了Debian(Linux)删除用户的方法、adduser 无法添加的解决方法(也就是用户名违规的解决方法)。同时在解决用户名违规时, 我们分享的两种解决方法:
- 使用"–allow-bad-names"选项来绕过这个检查
- 重新配置 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
-
Debian的版本有很多, 无法保证所有版本都会有该问题。 ??
-
/etc/passwd 文件记录着用户的基础信息。 ??