Là một vị trí trung tâm cho ủy quyền_key là một ý tưởng tốt?


29

Tôi đang trong quá trình định cấu hình máy chủ đám mây để chạy ngăn xếp sau: Ruby, Hành khách, Apache; trong Ubuntu 10.04 (Lucid Lynx).

Trong quá trình muốn làm cho máy chủ dễ quản lý hơn, tôi thiết lập các khóa RSA rootwww-datađể tôi có thể sshvào máy chủ. Điều tôi không thích là www-data's .sshmục ngồi trong /var/wwwđó là thiết lập thư mục mặc định cho apache. Lo lắng của tôi là nếu apache không được cấu hình đúng thì .sshthư mục có thể bị lộ.

Tôi đã xem qua các giải pháp để di chuyển các ~/.ssh/authorized_keystập tin vào một vị trí trung tâm bằng cách thay đổi AuthorizedKeysFiletrong /etc/ssh/sshd_config. Điều này đi kèm với 2 ưu điểm: Một vị trí duy nhất cho các phím và không phải lo lắng về cấu hình apache xấu. Con lừa duy nhất mà tôi có thể nghĩ đến là bây giờ mọi người dùng đều có sẵn để đăng nhập trên máy chủ (rõ ràng là con dao hai lưỡi của tệp khóa trung tâm.)

Có bất cứ điều gì mà tôi đã bỏ lỡ trong cấu hình này? Có phải tôi đã phơi bày bản thân quá mức, hay đây là một giải pháp tốt hơn so với các authorized_keystệp riêng lẻ ?

Tôi xanh khi nói đến quản lý máy chủ, nhưng tôi hoàn toàn sẵn sàng để bị gọi là tên xấu khi làm điều xấu. : D


1
Ít nhất các khóa công khai bị lộ (chỉ đọc) trên internet không phải là rủi ro lớn nhất ... (Nó có thể cho phép kẻ tấn công xem liệu chúng có thể đăng nhập vào máy chủ bằng một khóa riêng mà chúng có được ở nơi khác không, nhưng nó sẽ không 'không cho phép họ đăng nhập bằng cách lấy được ...) (Vấn đề nghiêm trọng là nếu có id_rsatệp ~/.sshvà họ quản lý để đọc nó)
Gert van den Berg

Câu trả lời:


51

Tất cả các tệp khóa có thể được tập trung trong cùng một thư mục và không được trộn lẫn trong cùng một tệp.

Chỉ cần thiết lập sshd_configtệp như thế này:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

Trên máy chủ của bạn:

  • Khóa dữ liệu www sẽ có trong /etc/ssh/authorized_keys/www-data
  • khóa gốc sẽ ở trong /etc/ssh/authorized_keys/root

Về quyền truy cập, các cài đặt này được sshd chấp nhận:

/etc/ssh/authorized_keysđược sở hữu bởi root:rootvà có chế độ 755. Các tệp chính được sở hữu root:rootvà có chế độ 644.

Các chế độ khác có thể hoạt động nhưng tôi chưa thử nghiệm chúng.


3
+1, nhưng tôi sẽ không thiết lập các bit khác. Đặt quyền sở hữu các tệp% u cho người dùng để điều này không cần thiết.
Aaron Copley

1
Giải pháp tốt cho vấn đề người dùng độc hại có thể thêm nhiều khóa công khai hơn vào ~ / .ssh / ủy quyền của họ để cấp quyền truy cập cho người khác.
bbaassssiiee

Tôi vừa xác nhận rằng chế độ 600 cho tệp khóa được ủy quyền của người dùng không hoạt động; nó cần phải ở chế độ 644
Luis E.

@bbaassssiiee Điều này TUYỆT ĐỐI KHÔNG giải quyết vấn đề đó. Họ chỉ có thể chia sẻ khóa riêng của mình với bất kỳ ai mà họ muốn cấp quyền truy cập (tất nhiên khả năng này có thể được giảm nhẹ, nhưng câu trả lời này hoàn toàn bằng không để giảm thiểu nó)
DylanYoung 15/11/18

1
@DylanYoung Tôi thừa nhận chia sẻ khóa riêng là có thể. Nhưng với chattr tôi có thể thu hồi quyền truy cập ghi vào các tệp ủy quyền để tôi có thể phân phối riêng chúng, bảo vệ một dòng duy nhất trong mỗi tệp.
bbaassssiiee

15

Nói chung, tôi sẽ không làm những gì bạn đang đề xuất. Nó phá vỡ các giả định phổ biến (như ~/.ssh/authorized_keyslàm việc cho người dùng của bạn và giới thiệu các vấn đề bạn đã đề cập trong câu hỏi của mình. Nếu bạn thấy các vấn đề rõ ràng trước khi thực hiện, điều đó có nghĩa là giải pháp của bạn không lý tưởng.

Bảo mật thông minh Tôi cũng nghĩ rằng đó là ý tưởng TERRIBLE để mọi người chia sẻ tài khoản dịch vụ: Ngay bây giờ, chỉ có bạn và bạn biết bạn là người thực hiện các thay đổi. Trong 5 năm khi bạn có 5 quản trị viên, bạn sẽ muốn biết ai đã thay đổi điều gì và tìm hiểu nhật ký kiểm toán để xem ai đã sử dụng chìa khóa nào khi là nỗi đau của hoàng gia.
Bạn nên để mọi người đăng nhập như chính họ và sử dụng sudohoặc một cái gì đó tương tự để leo thang đặc quyền của họ và làm bất cứ điều gì họ cần làm.


Nếu bạn vẫn muốn tập trung các khóa SSH, tôi khuyên bạn nên xem xét một hệ thống triển khai như Puppet hoặc radmind để quản lý / phân phối các authorized_keystệp vào các ~user/.ssh/thư mục thích hợp (hoặc hack một giải pháp tự trồng tại nhà mà SCP đặt chúng vào vị trí).
Như bạn mở rộng đến nhiều máy chủ bạn có thể muốn nhìn vào để patch LDAP Public Key cho các phiên bản cũ của OpenSSH (hoặc AuthorizedKeysCommandchỉ thị và một kịch bản thích hợp trong phiên bản mới hơn của OpenSSH) cũng vì vậy bạn có thể tập trung người dùng của bạn và không phải phân phối các khóa của họ trên mạng của bạn, nhưng điều đó có thể sẽ khá xa đối với bạn.


1
+1 cho đối số chia sẻ. Nói ngắn gọn vì tôi mất một chút thời gian để nhận ra hàm ý của nó: Không nên có thư mục ~ www-data / .ssh, do đó không có rủi ro bảo mật bởi trình duyệt web.
thiton

Cảm ơn vì bạn đã phản hồi! Nếu tôi hiểu bạn chính xác. Tôi phải có không phải rootvà cũng không www-datathể truy cập qua một khoá ssh là đúng?
Gavin Miller

1
Có một ~www-data/.sshthư mục không phải là một điều tồi tệ (với các quyền phù hợp thì đó không phải là một rủi ro đáng kể), nhưng nếu bạn sẽ sử dụng ~www-data/.sshthì tốt nhất là không nên có webroot của bạn ~www-data(di chuyển webroot hoặc di chuyển www-datathư mục chính của nó). Sự khác biệt của người dùng là đối số lớn hơn IMHO - Tôi biết nếu tôi thấy jsmithđăng nhập tôi biết đó là John Smith. Nếu tôi thấy www-datađăng nhập, tôi cần phải đào thêm để tìm ra đó là ai.
voretaq7

Lý do tại sao tôi cần khóa ssh cho dữ liệu www là vì tôi đang sử dụng Beanstalk (SCM & công cụ triển khai) để thực hiện các triển khai trên SFTP. Sau đó tôi có nên tạo một tài khoản riêng cho Beanstalk để thực hiện ftp'ing không? Điều gì sẽ là giải pháp tốt nhất ở đó?
Gavin Miller

1
Cách nó là trên hầu hết các hệ thống AuthorizedKeysFiletrong /etc/ssh/sshd_configmặc định %h/.ssh/authorized_keys. Đây %hlà một giữ chỗ cho thư mục nhà. Điều gì giữ bạn khỏi thiết lập nó /some/folder/ssh_keys_by_user/%h/hoặc thậm chí /root/ssh_keys/%u. Bạn thậm chí có thể cung cấp cho người dùng tương ứng quyền truy cập ghi vào tệp cá nhân của anh ta ở đó (và chỉ anh ta) liên kết tệp với vị trí chuẩn (với ln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys) và không phá vỡ các giả định đã nói ở trên.
con-f-sử dụng
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.