对于一个加入域的Linux实例,在启动时,如何配置sudoers、fstab和用户登录等配置?我可以使用User data吗?

0

【以下的问题经过翻译处理】 大家好,我一直在尝试简化将一个Linux实例加入我的域的过程。目前,我仍然需要手动处理许多配置,但我希望能够自动化这些工作,包括以下内容:

  1. 从我的目录服务实现中限制登录到AWS Delegated Administrators组
  2. 将AWS Delegated Administrators组添加到sudoers文件中(是否有更好的方法实现此功能?应该使用/etc/sudoers.d文件夹吗?这看起来是比较干净的做法,但我找不到有关如何配置此文件夹的文档。
  3. 安装cifs-utils
  4. 配置登录Banner
  5. 在某些情况下,配置fstab文件

我认为3、4和5可以通过userdata文件轻松完成,但我不清楚如何为1和2配置所有必要的文件。例如,为了正确允许AWS Delegated Administrators组登录系统,需要配置以下文件:

  • /etc/pam.d/login
  • /etc/pam.d/sshd
  • /etc/security/access.conf

我找到的文档显示,我需要更新pam.d文件以允许登录组/用户名中包含空格。

我认为这些操作是把一个Linux实例加入域的相当基本的配置步骤,因此如果能够标准化这些操作是非常好的,比如在一个SSM文档中运行。或者如果在选择域加入时可以在实例启动过程中设置动态选项,那将是更好的。

profile picture
专家
已提问 5 个月前40 查看次数
1 回答
0

【以下的回答经过翻译处理】 你描述的可以使用user-data实现,但是需要写一些复杂脚本而且并不优雅,但是确实可以实现。

然而,如果你不介意的话,我想推荐使用Packer https://www.packer.io/

为什么呢?因为使用packer,你可以构建常称为Golden AMI的黄金镜像,可以在部署实例时推送和使用这样的AMI。现在,配置管理的设置可以使用Packer所谓的“Provisioners”来实现,下面是你可能会感兴趣的Provisioner的示例,并且如果你真的想要一个简洁的方式来配置AMI中的各种配置的话,可以使用Ansible作为Provisioner,并利用Ansible的Playbooks或Roles来定义你的任务。

  "variables": {
    "aws_access_key": "{{env `AWS_ACCESS_KEY_ID`}}",
    "aws_secret_key": "{{env `AWS_SECRET_ACCESS_KEY`}}",
    "region": "us-east-1"
  },
  "builders": [
    {
      "access_key": "{{user `aws_access_key`}}",
      "secret_key": "{{user `aws_secret_key`}}",
      "type": "amazon-ebs",
      "profile": "default",
      "region": "{{user `region`}}",
      "instance_type": "t2.micro",
      "ssh_username": "centos",
      "source_ami" : "ami-0affd4508a5d2481b",
      "ami_name": "centos-aws-demo-{{timestamp}}",
      "ami_description":"CentOS Linux 7 x86_64 HVM EBS ENA 2002_01 with docker",
      "run_tags" : {
        "Name" : "packer-builder-docker",
        "Tool" : "Packer",
        "Author" : "DavidCaballero"
      },
      "tags": {
        "Name": "centos-aws-demo"
      }
    }
  ],
  "provisioners": [
    {
      "type": "file",
      "source": "./welcome.txt",
      "destination": "/home/centos/"
    },
    {
      "type": "shell",
      "inline": ["ls -al /home/centos", "cat /home/centos/welcome.txt"]
    },
    {
      "type": "shell",
      "script": "./docker_install.sh"
    },
    {
      "type": "ansible",
      "playbook_file": "./playbooks/hostname.yml"
    }
  ]
}```
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则