【问题标题】:Safely setup Ubuntu vm with Terraform and Cloud-init使用 Terraform 和 Cloud-init 安全地设置 Ubuntu vm
【发布时间】:2021-05-24 04:37:31
【问题描述】:

为了个人使用(和乐趣),我正在尝试设置一个我想在其上托管我的网站的虚拟机(在 docker 容器中运行的 Nginx、Django 和 Postgres)。我正在尝试学习如何以安全的方式使用 Terraform 和 Cloud init 设置服务器。

我当前的 cloud-init 代码:

#cloud-config
groups:
  - docker
users:
  - default
  # the docker service account
  - name: test
    shell: /bin/bash
    home: /home/test
    groups: docker
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh_import_id: None
    lock_passwd: true
    ssh-authorized-keys:
      - ssh-rsa my_public_ssh_key
package_update: true
package_upgrade: true
packages:
  - git
  - sudo
  - apt-transport-https
  - ca-certificates
  - curl
  - gnupg-agent
  - software-properties-common
runcmd:
  # install docker following the guide: https://docs.docker.com/install/linux/docker-ce/ubuntu/
  - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  - sudo apt-get -y update
  - sudo apt-get -y install docker-ce docker-ce-cli containerd.io
  - sudo systemctl enable docker
  # install docker-compose following the guide: https://docs.docker.com/compose/install/
  - sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  - sudo chmod +x /usr/local/bin/docker-compose
power_state:
  mode: reboot
  message: Restarting after installing docker & docker-compose

虚拟机是 Ubuntu 20.04 从技术上讲,我希望“测试”用户能够从我的 git 存储库中提取最新代码并使用 docker-compose (重新)部署网站(在 /home/test/website 中)。用户是否可能没有 sudo 权限(我不想让它具有提升的权限)。其次:如何使用单独的 SSH 密钥创建一个 root 帐户(这样设置是否安全)?

生成 VM 的 Terraform 代码。

resource "scaleway_instance_server" "app_server" {
  type     = var.instance_type
  image    = "ubuntu-focal"
  name     = var.instance_name
  enable_ipv6 = true

  tags = [ "FocalFossa", "MyUbuntuInstance" ]

  root_volume {
    size_in_gb = 20
    delete_on_termination = true
  }

  lifecycle {
    create_before_destroy = true
  }

  ip_id = scaleway_instance_ip.public_ip.id

  security_group_id = scaleway_instance_security_group.www.id

  # cloud init: setup
  cloud_init = file("${path.module}/cloud-init.yml")
}

非常感谢您的帮助。

【问题讨论】:

  • 您能否提供一个可重现的 TF 代码来创建实例并使用您当前的 cloud-init?
  • 我已经添加了 Terraform 代码,但它并没有那么特别..

标签: docker ubuntu terraform cloud-init


【解决方案1】:

用户是否可能没有 sudo 权限(我不想让它拥有提升的权限)。

由 cloud-init 运行的任何东西都以 root 身份运行,包括 bootcmd/runcmd 命令。要以其他用户身份运行,您可以在 runcmd 中使用 sudo

sudo -u test whoami >> /var/tmp/run_cmd

test 写入/var/tmp/run_cmd

其次:如何使用单独的 SSH 密钥创建 root 帐户(这样设置是否安全)?

您的users 部分将如下所示。

users:
  - default
  # the docker service account
  - name: test
    shell: /bin/bash
    home: /home/test
    groups: docker
    sudo: ALL=(ALL) NOPASSWD:ALL
    lock_passwd: true
    ssh-authorized-keys:
      - ssh-rsa my-public-key
  - name: root
    ssh-authorized-keys:
      - ssh-rsa root-public-key
disable_root: false

安全吗?我认为这是有争议的,但默认情况下禁用 root 登录是有原因的。应该可以 ssh 进入默认用户,然后 sudo su 以满足您的 root 访问需求。

另外,仅供参考,您配置中的 ssh_import_id: None 在 cloud-init 日志中引发异常,因为它试图为用户 None 导入 ssh id。

【讨论】:

  • 我实际上的意思是我希望用户能够在 cloud-init 初始化 VM 后运行 docker。问题是:用户可以在没有提升权限的情况下运行 docker(因此没有超级用户权限)。第二个问题:我是否需要具有完全权限的 root 用户(在通过 cloud-init 设置 VM 之后)?
猜你喜欢
  • 2021-11-19
  • 2019-06-17
  • 2016-11-25
  • 1970-01-01
  • 2017-01-19
  • 2022-10-02
  • 2020-06-03
  • 2022-01-14
  • 2020-05-02
相关资源
最近更新 更多