Một hệ thống phân phối khóa công khai SSH


26

Chúng tôi có nhiều hệ thống khác nhau được quản lý bởi nhiều người. Chúng tôi đã chọn sử dụng xác thực khóa công khai SSH để truy cập các hệ thống đó. Điều này hoạt động rất tốt, vì không cần quản lý hoặc chia sẻ mật khẩu tài khoản quản trị, không cần nhớ mật khẩu cho các hệ thống khác nhau (chỉ có cụm từ mật khẩu đến khóa riêng của bạn), không cần tương tác (nhập mật khẩu) với mọi lệnh từ xa .

Vấn đề là, các khóa công khai được cài đặt trên hệ thống cần phải được quản lý bằng cách nào đó. Mọi người đến và đi, các khóa có thể bị xâm phạm, thay đổi trách nhiệm (một người được ủy quyền vào một hệ thống hôm nay có thể được phép truy cập vào một hệ thống khác vào ngày mai). Hiện tại chúng tôi quản lý nó bằng cách chỉnh sửa thủ công các tệp ~ / .ssh / ủy quyền trên mọi tài khoản cần điều đó, nhưng đó là rất nhiều công việc và dễ xảy ra lỗi.

Có công cụ sẵn sàng nào để quản lý khóa công khai trong kịch bản như vậy không? Bạn có giải pháp riêng của bạn? Hay đó là toàn bộ ý tưởng quản lý hệ thống theo cách này còn thiếu sót?


Tôi thực sự không thể trả lời câu hỏi của bạn nhưng khi tôi đọc nó, tôi chỉ có thể nghe thấy nó hét lên vì một loại hệ thống cơ sở dữ liệu.
John Gardeniers

Thật vậy, tôi có thể thấy một nơi dành cho cơ sở dữ liệu trên 'phụ trợ' (server máy chủ khóa '), mặc dù tôi muốn giới hạn quyền truy cập cơ sở dữ liệu ở đó và có các khóa được phân phối trên kênh SSH. Không mở bất kỳ kênh liên lạc nào khác trên các hệ thống được quản lý. Trong thực tế, tôi cảm thấy có khả năng tự thực hiện công cụ / hệ thống như vậy, mặc dù tôi thích thứ gì đó sẵn sàng và được chứng minh là hiệu quả.
Jacek Konieczny

Câu trả lời:


18

Như đã đề cập bởi pulegium, bất kỳ phần mềm quản lý cấu hình chung nào như Puppet , Chef , Bcfg2 hoặc cfengine đều có thể hoàn thành nhiệm vụ.

Vì tệp ủy quyền không quá phức tạp, bạn cũng có thể sử dụng rsync hoặc (D) SCM như git hoặc hg để quản lý tệp này. Bạn có tệp "chính" trên một trong các máy chủ của mình và phân phát tệp qua rsync / git / hg / Lỗi. Trên mọi máy chủ khác, bạn chạy một công việc định kỳ lấy định kỳ bản sao chính (nếu nó đã được thay đổi) và sao chép nó vào đúng vị trí cục bộ. Heck, điều này thậm chí sẽ hoạt động với HTTP hoặc FTP thuần.

Điểm mấu chốt là: Có một bản sao "chính" của tệp ủy quyền của bạn và cập nhật nó. Hãy để "máy khách" (các máy tính cần có tệp ủy quyền hiện tại) tải nó từ máy chủ chính của bạn và triển khai nó cục bộ.


1
Chúng tôi thoải mái sử dụng con rối để quản lý ~ 200 máy chủ Linux (khóa pub chỉ là một tệp để thực thi như một thuộc tính của người dùng).
ForgeMan

1
Tôi sẽ chấp nhận câu trả lời này vì dường như tôi sẽ không khá hơn. Dường như các lựa chọn đối với tôi là: 1. Giữ mọi thứ như hiện tại 2. Xây dựng chuỗi công cụ riêng để quản lý các tệp ủy quyền 3. Sử dụng một số công cụ chung, hiện có để quản lý máy chủ, như Puppet hoặc Chef, mặc dù những công cụ đó có vẻ quá lớn đối với nhiệm vụ đơn giản này. 4. Sử dụng cơ chế xác thực / ủy quyền khác (như Kerberos) Mặc dù đây cũng là công cụ quá phức tạp cho một nhiệm vụ đơn giản Cảm ơn.
Jacek Konieczny

hệ thống này an toàn như kênh mà bản sao chính được kéo.
yrk

1
Ansible là một hệ thống CM rất nhẹ, có một mô-đun để xử lý các tệp chính được ủy quyền qua ssh. Xem ansible.cc/docs/modules.html# trái phép
RS

11

Có một bản vá có sẵn cho OpenSSH cho phép nó sử dụng các khóa công khai từ máy chủ LDAP, nhưng điều này chỉ thực sự có ý nghĩa nếu kiểm tra xác thực / tài khoản của bạn cũng được thực hiện đối với máy chủ LDAP đó (đó là cách môi trường của tôi được thiết lập). Ngoài ra, nó chỉ an toàn như cấu hình LDAP của bạn (vì vậy bạn muốn sử dụng SSL & khóa xác minh).

Xem http://code.google.com.vn/p/openssh-lpk/ để biết bản vá và biết thêm chi tiết. Tôi không biết bất kỳ HĐH nào có bản vá này theo mặc định, nhưng nếu bạn đang chạy FreeBSD thì đó là bản vá tùy chọn nếu bạn sử dụng OpenSSH từ các cổng.


1
Ngẫu nhiên sử dụng pam_ldap cũng cho phép bạn giải quyết vấn đề "ai đó được phép truy cập máy A hôm nay có thể không được phép truy cập vào ngày mai" - hãy đọc pam_ldap nếu bạn quan tâm đến khía cạnh đó ...
voretaq7

5

tôi chạy một giải pháp rất dễ, tương tự với quy tắc tường lửa

ví dụ tập tin hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

phân phối.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

đó là toàn bộ ma thuật :-)


5

Tôi hiện đang kiểm tra SSH KeyDB . Nó có nghĩa là để làm chính xác điều đó, quản trị vai trò, máy chủ và người dùng, phân phối khóa người dùng, thu thập khóa máy chủ, vv Nó thậm chí còn có một cái gì đó gọi là "địa điểm".

Tôi chưa làm việc hết và tôi không chắc nó có hoạt động tốt không. Tuy nhiên, mã này nằm trong python và dường như khá dễ quản lý, do đó, không quá khó để loại bỏ nó và khiến nó hoạt động.


1

Tôi không chắc ý của bạn là gì, tôi cũng không biết liệu bạn có muốn thay đổi hay không, nhưng Kerberos là droid bạn đang tìm kiếm. Điều đó sẽ giải quyết vấn đề của bạn một cách thanh lịch, và sẽ xác thực cả người và máy.


1

Bạn có hai (thường biến thành 3) vấn đề khác nhau mà bạn đang cố gắng giải quyết:

  • Xác thực (Bạn là ai?)
  • Ủy quyền (Bạn có được phép truy cập máy chủ này không?)
  • Kiểm toán (Bạn đã làm gì?)

Xác thực khóa công khai là một cách ok để xác thực đôi khi, nhưng hoàn toàn không cho phép địa chỉ. Tôi không thích auth khóa công khai, vì nó rất dễ thỏa hiệp (đặc biệt là nội bộ) trừ khi bạn có một số kiểm soát tốt tại chỗ.

Đó là nơi các giải pháp như Kerberos phát huy tác dụng. Trong thế giới Windows, Active Directory giải quyết vấn đề này. Trong thế giới Unix, có rất nhiều sự lựa chọn, đó là cả điều tốt và điều xấu.

Tôi sẽ kiểm tra dự án RedIP FreeIPA , đây là một gói phần mềm giúp dễ dàng khởi động hệ thống Kerberos / LDAP / DNS giống như AD.


Tôi hiểu sự khác biệt giữa xác thực, ủy quyền và kiểm toán. Và 'ủy quyền' của SSH cung cấp cả dữ liệu xác thực và ủy quyền. Nó là xa hoàn hảo, nhưng nó là đơn giản. Và sự đơn giản thường là một lợi thế lớn, cũng trong bảo mật. Kerberos, với cơ sở hạ tầng phức tạp của nó có thể bảo mật thất bại theo nhiều cách hơn so với ssh với các tệp ủy quyền của nó. Mặc dù, điều đó không có nghĩa là cái này hay cái kia an toàn hơn.
Jacek Konieczny

Quản lý tập tin ủy quyền là np cho một số ít máy chủ, nhưng bạn nhanh chóng đạt đến điểm không thể quản lý. Tôi đã không cố nói rằng đó là một giải pháp "xấu". Tương tự như vậy, sự phức tạp trong Kerberos là không phù hợp cho hai máy chủ ... nhưng việc đầu tư vào thiết kế / thực hiện kerberos đáng giá trong một môi trường lớn hơn.
duffbeer703

1

Bạn có thể sử dụng Bcfg2 với tài khoản bcfg2 để phân phối authorized_keys. Khi được thêm tiền thưởng, bạn sẽ có khả năng kiểm soát người dùng và nhóm.

Bcfg2 cũng cho phép bảo trì miễn phí /etc/ssh/ssh_known_hostsvới SSHbase .


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.