Cloud-init 如何强加通过 cloud init 定义的用户设置?

Posted

技术标签:

【中文标题】Cloud-init 如何强加通过 cloud init 定义的用户设置?【英文标题】:How does Cloud-init impose user settings, defined through cloud init? 【发布时间】:2022-01-16 22:19:16 【问题描述】:

致所有 Cloud-init 专家:

最近,我一直在尝试使用 cloud-init 的用户帐户创建和管理功能。

我想禁止 root ssh 登录并创建另一个不需要 sudo 密码的 sudo 用户。

我确实得到了想要的结果,但我不知道它是如何实现的。

示例 config.cfg:

users:
   - name: root
#     lock_passwd: false
   - default
   - name: user_name
     gecos: Non-root User
     primary_group: nr_user
     groups: nr_user,sudo,wheel
     lock_passwd: false
     passwd: $6$rounds=4096$e0Ju.HuWxqWs....JeEzX/XGGave2jhi1
     sudo: ["ALL=(ALL) NOPASSWD:ALL"]

disable_root: true
disable_root_opts: no-port-forwarding,no-agent-forwarding,no-X11-forwarding

我通常应该通过/etc/ssh/sshd_config 限制root ssh 登录,将:PermitRootLogin yes 更改为PermitRootLogin no。 我通常会添加一行,如下所示:user_name ALL=(ALL) NOPASSWD:ALL 到 /etc/sudoers,如果我想要一个不需要每次都输入密码的 sudoer。

但我没有看到这样的变化。

除此之外,root ssh 被禁用并且应该使用另一个用户的自定义消息让我想知道它是如何实现的? cloud-init 是否会旋转一个模块来监控用户的使用情况并即时应用设置?

【问题讨论】:

【参考方案1】:

SSH 自定义消息

SSH 自定义消息写入/root/.ssh/authorized_keys。在 ubuntu 系统上,它应该包含类似

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="echo 'Please login as the user \"ubuntu\" rather than the user \"root\".';echo;sleep 10;exit 142"

后跟默认用户的授权密钥。

这是通过 SSH 模块完成的。见the documentation和来源here和here

须藤

cloud-init 自动为默认用户创建一个sudo: ["ALL=(ALL) NOPASSWD:ALL"]。任何用户 sudo 定义都会写入/etc/sudoers.d/90-cloud-init-users。对于您的云配置,它应该类似于

# Created by cloud-init v. 21.4 on Mon, 13 Dec 2021 14:37:19 +0000

# User rules for user_name
user_name ALL=(ALL) NOPASSWD:ALL

# User rules for ubuntu
ubuntu ALL=(ALL) NOPASSWD:ALL

您可以看到默认用户 here 的(模板化)定义

【讨论】:

非常感谢!我对 python 不是很了解,你能确认一下 - 这个 cc_set_passwords 模块与 ssh 键混淆,这就是 root ssh 登录被禁用的原因。 cc_ssh 模块,和我粘贴的那行一样。 command="echo...; exit 142 部分在您尝试连接并将您踢出时运行该命令。 cc_set_passwords 和 ssh 密钥或其位置不相关。

以上是关于Cloud-init 如何强加通过 cloud init 定义的用户设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重启的情况下重新运行 cloud-init

如何在 Terraform 上使用 cloud-init 初始化实例

在 cloud-init 过程中显示 scp 的进度

如何使用 cloud-init 和 Terraform 设置主机名?

在本地KVM中使用cloud-init

在 Azure VM 上使用 cloud-init 挂载数据磁盘失败