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

How does Cloud-init impose user settings, defined through cloud init?

致所有 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: $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 yesPermitRootLogin no。 我通常会添加一行,如下所示:user_name ALL=(ALL) NOPASSWD:ALL to /etc/sudoers,如果我想要一个不需要每次都输入密码的 sudoer。

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

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

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 and source here and 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