环境:Ubuntu22.04Server版,XSHELL7免费版连接
问题:root用户用useradd命令创建用户,并设定密码:

然后su切换到新建的用户,切不过去:

只好退出了:

用新建的用户登录,提示如下错误:

断开连接,再次用新建的用户登录,不提示这个错误了,但还是登不上去:

经过学习得知, useradd命令创建用户,如果不加参数,不会指定用户的家目录、shell版本和密码。而我刚刚用-m参数自动创建了家目录,但是没有指定shell版本。
用-s参数指定shell版本,就可以了:

因此用useradd命令创建用户,应该在创建时指定用户的家目录、shell版本。
需要注意两点:
1、useradd创建用户时什么也没指定,查看/etc/passwd,系统会默认在其信息中标注其家目录和shell版本:

不过系统虽然标注上了,但是新建的用户还是没有家目录:

自然也没法切换过去:
如前所述,创建用户时没有用-s指定shell版本,虽然在/etc/passwd中系统会标注其shell版本 ,但还是无法正常切换:
![]()

useradd命令另一个比较常用的选项是-d,如果创建用户时想指定一个已存在的目录做其家目录,用这个参数。如果再加上-m,表示指定的目录若不存在,就自动创建:

但是这样,该目录的所属用户和所属组不会自己变成新建的用户和其所在组:

如果要更改,用chown改:

另外adduser命令也可以创建用户,而且系统会自动指定其家目录、shell版本、并自动要求创建其密码。相应地,删除用户可以使用userdel、deluser两个命令。我备注的参考资料的作者写的很详细,可以直接看那篇文章。这里只补充一下,deluser命令的两个参数选项:
--remove-home:删除用户时一并删除其家目录和邮件池
--remove-all-files:从系统中删除用户拥有的所有文件
从man手册中看到,当使用了--remove-all-files后,--remove-home就不起作用了:

另外即便用户的家目录不是属于该用户的,删除时使用--remove-home,也会把该目录一起删掉:


参考资料:wq_0708,Ubuntu创建用户