【问题标题】:Create user with option --disabled-password by Ansible使用 Ansible 的选项 --disabled-password 创建用户
【发布时间】:2016-08-18 08:52:01
【问题描述】:

在 Ubuntu 14.04 上,我使用禁用密码创建用户,例如:

sudo adduser --disabled-password myuser

我需要对 Ansible user 模块做同样的事情

--禁用密码

缺少 Ansible 文档中的类似选项。有人可以帮助我,我怎样才能使用用户模块获得相同的结果?

【问题讨论】:

  • 我怀疑省略 user 模块的密码参数是你想要的。

标签: ubuntu passwords ansible


【解决方案1】:

user 模块使用useradd 命令under the hood.
如果你省略了 user 模块的 password 参数,ansible 会调用 useradd 而没有 -p 标志。
useradd 的手册页状态:

-p, --password 密码
crypt(3) 返回的加密密码。默认是禁用密码。

这正是 OP 所需要的。

adduser --disabled-password test1- user: name=test2 state=present 的比较:

# grep test /etc/shadow
test1:*:17031:0:99999:7:::
test2:!:17031:0:99999:7:::
# passwd -S test1
test1 L 08/18/2016 0 99999 7 -1
# passwd -S test2
test2 L 08/18/2016 0 99999 7 -1

正如您在这两种情况下看到的那样,密码都被锁定了。

【讨论】:

  • 我通过 ansible 用户模块创建了一个用户,但没有指定密码,当我在该用户上运行 chage -l 时,它显示他们的密码将在一年内过期。因此,如果您以这种方式创建用户,您的 ssh 进程可能会在不存在的密码过期的一年内失败,特别是如果您使用不知道如何处理密码重置提示的程序以编程方式连接到用户。
  • 从 ansible 2.11 开始,存在一个 passwd_expire_max 参数,可以设置为 -1 以避免禁用密码仍然过期的问题。
  • 此答案的test1test2 之间存在细微差别。在我的机器上(debian 11): - test2 帐户即使用于 ssh 公钥身份验证也被锁定。 - test1 将能够使用公钥认证通过 ssh 登录
【解决方案2】:

从 Ansible 2.6 开始,user 模块具有选项 password_lock,它将运行 usermod -L (Linux)、pw lock (FreeBSD) 或 usermod -C (?):

usermod -L:

锁定用户的密码。这放了一个“!”在加密密码前,有效禁用密码。

pw lock:

pw 实用程序支持简单的用户密码锁定机制;它通过将字符串 *LOCKED* 添加到 master.passwd 中密码字段的开头来防止成功验证。

所以你可以使用:

- name: Create password locked user
  user:
    name: myuser
    state: present
    password_lock: yes

【讨论】:

  • 我需要创建不使用密码的系统帐户,所以我可以在没有密码提示的情况下进行su - username。如果我理解正确,这将创建锁定的用户帐户,我将无法登录或无法登录?
  • @32cupo 这只会阻止用户使用密码登录,它仍然可以通过 SSH 密钥或其他用户的 su 登录。
猜你喜欢
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
相关资源
最近更新 更多