Ansible'ı ~ 3 yıldır sürekli büyüyen linux sistemleri sürüsünü yönetmek için kullanıyorum. Soruma dalmadan önce bir bağlam belirlemem gerekiyor.
Günlük işimin bir parçası olarak, hepsi tek bir girişim / inkübatör şirketi çatısı altında faaliyet gösteren çeşitli şirketler için sistem tasarımı, kurulumu ve bakımı yapıyorum. Portföy şirketlerimiz arasında çok fazla çapraz tozlaşma vardır ve bu nedenle, sadece A, B ve C kullanıcılarının X şirketinin sistemlerine erişmesi gerektiğini söyleyemeyiz. Ayrıca Y şirketinin sistemlerine de erişmeleri gerekebilir. Bu, her şirketin sorumlu ortamının farklı bir git deposunda yaşadığı için karmaşıktır. Bu, kullanıcıları farklı şirket sistemlerine dağıtmak için çok sayıda kod çoğaltması olduğu anlamına gelir . Kullanıcıları belirli bir şirketin sistemlerine dağıtmak için bu gibi kod bloklarını kopyalayıp yapıştıracağım:
- 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
Yönetmek için <5 kullanıcım olduğunda bu işe yaradı, ancak kullanıcı tabanı büyüdükçe, anahtar döndürme, yeni parolalar, vb. İle işleri güncel tutmak gittikçe daha zahmetli hale geliyor.
Backstory ve bağlam belirlendiğinde sorum şu:
Merkezi bir kimlik doğrulama sistemi (LDAP, vb.) Kullanmanın bir seçenek olmadığını varsayarsak, çeşitli duyarlı oyun kitaplarının tüketebileceği merkezi bir kullanıcı veritabanı oluşturmakla nasıl başa çıkabilirim? Kullanıcıların, kullanıcı adlarının, parola karmasının ve genel anahtarların tek bir merkezi listesini tutabilmek ve ardından kullanıcıları (ana bilgisayar başına grup üyelikleriyle) her şirketin ana bilgisayarlarına dağıtabilmek isterim.
Bir çeşit oyun yapısı öngörüyorum:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
... her kullanıcının kullanıcı kimliği, karması ve ortak anahtarı merkezi listeden alınır ve her zamanki gibi konuşlandırılır.
Peki, hangi seçeneklerim var? Bunu bir süredir gündemde tutuyorum ve zaten yaptığımdan daha iyi bir şey bulamadım. Kullanıcı veritabanımı tutmak için özel bilgiler dosyasıyla bir şeyler yapabilir miyim?