AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 787518
Accepted
EEAA
EEAA
Asked: 2016-07-02 20:49:40 +0800 CST2016-07-02 20:49:40 +0800 CST 2016-07-02 20:49:40 +0800 CST

使用 Ansible 进行用户管理的当前最新技术是什么?

  • 772

我一直在使用 Ansible 并取得了巨大的成功,大约 3 年了,用于管理不断增长的 linux 系统群。在深入探讨我的问题之前,我需要设置一些上下文。

作为我日常工作的一部分,我为各种公司进行系统设计、部署和维护,这些公司都在一个风险/孵化器公司的保护伞下运营。我们的投资组合公司之间有很多交叉授粉,因此,我们不能说只有用户 A、B 和 C 需要访问公司 X 的系统。他们可能还需要访问 Y 公司的系统。由于每家公司的 ansible 环境都存在于不同的 git 存储库中,这使情况变得复杂。这意味着将用户部署到不同公司的系统时存在大量代码重复。我最终复制/粘贴这样的代码块,以将用户部署到某个公司的系统:

- name: add several users
  user: >
    name={{ item.name }}
    state=present
    groups={{ item.groups }}
    uid={{ item.uid }}
    password={{ item.password }}
    shell=/bin/bash
  with_items:
    - { name: 'user1', groups: 'ssh-access,sudo', uid: '501', password: '<redacted>' }
    - { name: 'user2', groups: 'ssh-access,sudo', uid: '502', password: '<redacted>' }
  tags: users

- name: authorized_keys - user1 
  action: authorized_key user=user1 key="{{ lookup('file', 'pubkeys/user1') }}" manage_dir=yes
  tags:
    - pubkeys
    - users

- name: authorized_keys - user2 
  action: authorized_key user=user2 key="{{ lookup('file', 'pubkeys/user2') }}" manage_dir=yes
  tags:
    - pubkeys
    - users

当我有一个 <5 个用户要管理时,这工作正常,但随着用户群的增长,通过密钥轮换、新密码等来保持最新状态变得越来越繁重。

设置了背景故事和背景,继续我的问题:

假设使用集中式身份验证系统(LDAP 等)不是一种选择,我该如何解决创建各种 ansible playbook 可以使用的集中式用户数据库的问题?我希望能够维护一个包含用户、uid、密码哈希和公钥的中央列表,然后能够将用户(具有自定义的每个主机组成员资格)部署到每个公司的主机。

我正在设想某种游戏结构,例如:

- name: Deploy users
  user_management:
    - { name: "user1", groups: "sudo" }
    - { name: "user1", groups: "sudo" }

...每个用户的 uid、哈希和公钥将从中央列表中提取并照常部署。

那么,我有哪些选择?我已经考虑了很长一段时间,并且无法想出比我已经在做的更好的事情。我可以使用自定义事实文件来保存我的用户数据库吗?

linux ansible
  • 1 1 个回答
  • 709 Views

1 个回答

  • Voted
  1. Best Answer
    Alex Holst
    2016-07-02T23:37:23+08:002016-07-02T23:37:23+08:00

    你需要将你的剧本和你的数据分开。

    我有一个单一的存储库,其中包含我所有的角色、事实等,可以部署到广泛的客户系统中。我确保所有角色都是可重用的并且没有数据。在host_vars/fqdn.yml或group_vars/customer_name.yml我定义该客户或远程系统独有的数据。

    我的大部分角色都会根据需要随着时间的推移而扩展,而不是做from roles/foo/main.yml我拥有的一切,roles/foo/debian-foo.yml并且roles/foo/openbsd-foo.yml只在操作系统或其他条件匹配时才包括在内。

    简化,roles/adduser/main.yml可以包括:

    - user: name={{ item.name }} ...
      with_items:
      - customer_users
    

    并group_vars/ACME.yml可能包括:

    customer_users:
    - name: sausage
       uid: 32153
    - name: beans
       uid: 1024
    

    在您的情况下,只要角色文件夹是所有客户都相同的共享子模块,在每个 git 存储库中都有单独的 ansible 环境可能是可以的。

    • 8

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve