AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Qual é o estado da arte atual para gerenciamento de usuários com Ansible?

  • 772

Eu tenho usado o Ansible, com grande sucesso, por cerca de 3 anos para gerenciar um grupo cada vez maior de sistemas Linux. Antes de mergulhar na minha pergunta, preciso definir algum contexto.

Como parte do meu trabalho diário, faço design, implantação e manutenção de sistemas para várias empresas que operam sob a égide de um único empreendimento/empresa incubadora. Há muita polinização cruzada entre as empresas de nosso portfólio e, como tal, não podemos dizer que apenas os usuários A, B e C precisarão de acesso aos sistemas da empresa X. Eles também podem precisar de acesso aos sistemas da empresa Y. Isso é complicado pelo fato de que o ambiente ansible de cada empresa reside em um repositório git diferente. Isso significa que há muita duplicação de código para implantar usuários em diferentes sistemas da empresa. Acabo copiando/colando blocos de código como este para implantar usuários nos sistemas de uma determinada empresa:

- 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

Isso funcionou bem quando eu tinha <5 usuários para gerenciar, mas à medida que a base de usuários cresce, torna-se cada vez mais oneroso manter as coisas atualizadas com rotação de chaves, novas senhas etc.

Com a história de fundo e o contexto definidos, vamos à minha pergunta:

Supondo que usar um sistema de autenticação centralizado (LDAP, etc.) não seja uma opção, como eu poderia criar um banco de dados de usuários centralizado que vários playbooks ansible poderiam consumir? Eu adoraria ser capaz de manter uma lista central de usuários, uids, hashes de senha e chaves públicas e, em seguida, poder implantar os usuários (com associações de grupos personalizadas por host) para os hosts de cada empresa.

Estou imaginando algum tipo de estrutura de jogo como:

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

...onde o uid, hash e chave pública de cada usuário seriam extraídos da lista central e implantados como de costume.

Então, que opções eu tenho? Eu tenho refletido sobre isso por um bom tempo e não consegui pensar em nada melhor do que o que já estou fazendo. Eu poderia fazer algo com um arquivo de fatos personalizado para manter meu banco de dados de usuários?

linux ansible
  • 1 1 respostas
  • 709 Views

1 respostas

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

    Você precisa separar suas jogadas e seus dados.

    Tenho um único repositório com todas as minhas funções, fatos etc. que são implantados em uma ampla variedade de sistemas de clientes. Garanto que todas as funções são reutilizáveis ​​e livres de dados. Em host_vars/fqdn.ymlou group_vars/customer_name.ymldefino os dados exclusivos desse cliente ou sistema remoto.

    A maioria das minhas funções são expandidas ao longo do tempo conforme necessário e, em vez de fazer tudo o from roles/foo/main.ymlque tenho roles/foo/debian-foo.ymle roles/foo/openbsd-foo.ymlque só são incluídas quando o sistema operacional ou outra condição corresponde.

    Simplificado, roles/adduser/main.ymlpoderia incluir isto:

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

    e group_vars/ACME.ymlpoderia incluir isto:

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

    No seu caso, pode ser bom ter ambientes ansible separados em cada repositório git, desde que a pasta de funções seja um submódulo compartilhado idêntico em todos os seus clientes.

    • 8

relate perguntas

  • Protegendo um novo servidor Ubuntu [fechado]

  • (Soft) RAID 6 no Ubuntu 7.10, devo migrar para 8.10?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve