Tôi đã sử dụng Ansible, để thành công lớn, trong 3 năm nay để quản lý một hệ thống linux ngày càng phát triển. Trước khi đi sâu vào câu hỏi của tôi, tôi cần đặt ra một số bối cảnh.
Là một phần của công việc hàng ngày của tôi, tôi làm thiết kế hệ thống, triển khai và bảo trì cho các công ty khác nhau, tất cả đều hoạt động dưới sự bảo trợ của một công ty liên doanh / ươm tạo. Có rất nhiều sự thụ phấn chéo giữa các công ty danh mục đầu tư của chúng tôi và do đó, chúng tôi không thể nói rằng chỉ người dùng A, B và C mới cần truy cập vào hệ thống của công ty X. Họ cũng có thể cần truy cập vào hệ thống của công ty Y. Điều này phức tạp bởi thực tế là môi trường ansible của mỗi công ty sống trong một kho git khác nhau. Điều này có nghĩa là có rất nhiều mã trùng lặp để triển khai người dùng đến các hệ thống khác nhau của công ty. Tôi kết thúc việc sao chép / dán các khối mã như thế này để triển khai người dùng đến các hệ thống của một công ty nhất định:
- 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
Điều này hoạt động tốt khi tôi có <5 người dùng để quản lý, nhưng khi cơ sở người dùng phát triển, nó sẽ ngày càng trở nên khó chịu hơn để giữ mọi thứ được cập nhật với xoay vòng khóa, mật khẩu mới, v.v.
Với bối cảnh và bối cảnh được đặt ra, với câu hỏi của tôi:
Giả sử rằng việc sử dụng một hệ thống xác thực tập trung (LDAP, v.v.) không phải là một tùy chọn, làm thế nào tôi có thể giải quyết việc tạo một cơ sở dữ liệu người dùng tập trung mà nhiều sách phát khác nhau có thể tiêu thụ? Tôi rất thích có thể duy trì một danh sách trung tâm gồm người dùng, uids, băm mật khẩu và khóa chung, sau đó có thể triển khai người dùng (với tư cách thành viên nhóm trên mỗi máy chủ tùy chỉnh) cho mỗi máy chủ của công ty.
Tôi đang hình dung một số loại cấu trúc chơi như:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
... Trong đó mỗi uid, hàm băm và khóa chung của mỗi người dùng sẽ được lấy từ danh sách trung tâm và được triển khai như bình thường.
Vì vậy, tôi có những lựa chọn nào? Tôi đã nghiên cứu vấn đề này khá lâu và không thể tìm ra thứ gì tốt hơn những gì tôi đã làm. Tôi có thể làm gì đó với tệp sự kiện tùy chỉnh để giữ cơ sở dữ liệu người dùng của mình không?