1 背景
通过命令useradd
进行了用户的创建,并且同时赋值了密码:
arduino
[root@instance-jgzzg4xl home]# useradd -g developer -u 1020 -p 985211_rev songj
[root@instance-jgzzg4xl home]# ll
total 8
drwx------ 4 jiangms jiangms 4096 Aug 19 14:45 jiangms
drwx------ 2 songj developer 4096 Oct 31 11:26 songj
尝试登录:
自己检查了登录名,以及主机ip,又检查了密码输入是否错误,发现上述三者均没有问题,那么问题出在哪儿了呢?我们来回顾一下useradd
的常用命令参数的基础知识。
2 useradd
常用命令参数
基本语法:
css
useradd [选项] 用户名
常用选项
-c
:为新用户添加注释信息,通常用户填写用户的全名或其他描述-d
:指定用户的家目录。如果不指定,系统会使用默认的家目录路径,通过是/home/user
。-m
:自动创建用户的家目录,如果家目录不存在的话-s
:指定用户登录后使用的shell-g
:只用用户的主组。如果组不存在,useradd
会尝试创建这个组-G
:指定用户所属的一个或多个附加组-u
:指定用户的UID(用户id),如果不指定系统会自动分配一个未被使用的UID-o
:允许为新用户指定一个已经存在的UID,及时它与另一个用户的UID相同。-r
:创建一个系统用户
上述参数中提请大家注意的有如下几点:
-u
和-g
参数如果不指定,默认从1000开始,系统用户和系统组的UID均为1-999范围区间-r
参数在创建系统用户时是必须指定的参数,即第1点中提到的uid在1-999范围区间的用户;若创建普通用户,则可不加该参数-p
参数指定用户登录的密码,但是该密码如果是明文设置,则会失效。这也是我在文首遇到的无法登录的情况。
3 解决办法
通过在命令参数-p
处,我们知道了,密码是需要密文设置,如果明文设置,密码设置会生效,如下:
csharp
[root@instance-jgzzg4xl ~]# cat /etc/shadow
...
linc:123456:20031:0:99999:7:::
但是这种情况下,在客户端(比如说xshell等)登录时,客户端是需要密文登录的,因此出现了我们上文中无法登录的情况。解决办法不止一种,这里用一种相对较简单的方式来处理:
css
passwd [用户名]
结果:
sql
[root@instance-jgzzg4xl home]# passwd linc
Changing password for user linc.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
这样一来,我们就保证了用户的密文密码的问题,就解决了明文的用户无法登录的问题了,看来一切症结还是在基础知识上。