useradd 不允许用户登录

useradd 不允许用户登录

在 Ubuntu 14.04.2 LTS 上执行以下命令:

adduser fu

然后输入密码bar并按下Enter所有其他问题,创建一个允许我登录并具有以下特征的用户/etc/passwd

fu:x:1002:1002:,,,:/home/fu:/bin/bash

但是,这样做:

useradd fu --password bar --groups adm,cdrom,sudo,dip,plugdev,lpadmin --shell /bin/bash --create-home

創造/etc/passwd

fu:x:1002:1002::/home/fu:/bin/bash

不允许我登录并且添加--user-group也无济于事......

正如我所需要的useradd(用于 Docker 脚本)我该怎么办?

PS 我已经看过/usr/sbin/adduser了,但是我perl不清楚要添加哪些参数才能adduser具有相同的功能useradd

答案1

问题#1:

用户输入中的逗号/etc/passwd只是用户信息的字段分隔符,例如“全名”,“房间号”,“工作电话”和“家庭电话”,因此我猜省略它们与空白字段相同;

问题 #2:

来自值得信赖的man页面useradd

[...]
       -p- 密码密码
           返回的加密密码墓穴(3)默认为
           禁用密码。

           笔记:不建议使用此选项,因为密码(或
           列出进程的用户将可以看到加密密码。

           您应该确保密码符合系统密码
           政策。
[...]

这意味着所期望的密码useradd是一个已经加密的密码(从我通过的测试判断SHA-512):实际上,作为选项的参数传递的字符串-p在中以纯文本形式写入/etc/shadow,并且登录后从这里读取的密码应该是加密的。

因此,最直接的解决方案是使用passwd以下命令设置密码:

echo -e 'bar\nbar' | passwd fu

如果你不能使用passwd,那么子 shell 中的这个 python 命令作为-p选项的参数应该执行以下操作:

python -c 'import crypt; print crypt.crypt("bar", "$6$'$(< /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32)'")'

指令分解

python -c 'import crypt; print crypt.crypt("<string>", "$<encryption_type>$<encryption_salt>")'

*<string> = 要加密的字符串;<encryption_type> = 加密类型;<encryption_salt> = 加密盐

Crypts<string>使用<encryption type><encryption_salt>使用crypt()库调用

在这种情况下:

  • <string>= bar,要加密的密码
  • <encryption_type>= 6SHA-512
  • <encryption_salt>= < /dev/urandom tr -dc 'a-zA-Z0-9' | head -c 32,随机 32 个字符串

答案2

这可能不起作用,因为您的密码bar未加密。手册页指出useradd

The encrypted password, as returned by crypt(3).

Stack Overflow 上的问题有一些答案可能会对您的脚本有所帮助,因为问题询问有关添加用户和密码。

由于根据用户评论,该问题的已接受答案没有更新,因此我将在此重现解决方案:

echo -e "bar\nbar\n" | passwd fu

该命令将把用户的密码更改fubar。当然,需要使用 useradd 创建用户。

另一个解决方案是使用chpasswd,正如第二高投票率的答案所建议的那样:

echo fu:bar | chpasswd

我已经测试了这两种解决方案,并且它们都有效。

已编辑删除adduser信息并指出链接问题中的哪些建议确实有效。

相关内容