Thứ hai, 24/03/2014 | 00:00 GMT+7

Cách xác thực người dùng với server SSH bằng Monkeysphere trên VPS Ubuntu

Việc quản lý số lượng lớn các khóa và server SSH có thể rất khó khăn khi tổ chức của bạn phát triển. Việc xác định chính xác các khóa hợp lệ và xóa các khóa không hợp lệ trong toàn tổ chức có thể chứa đầy lỗi và gây ra những hậu quả lớn đối với bảo mật server của bạn.

Ngoài ra, khi có thay đổi server , đôi khi user của bạn sẽ nhận được cảnh báo về việc không thể cài đặt tính xác thực của server của bạn. Hầu hết user sẽ không kiểm tra lại dấu fingerprint chính của server trước khi kết nối, cho phép ai đó có khả năng giả mạo server và thực hiện một cuộc tấn công trung gian.

Một dự án có tên là Monkeysphere đã được tạo ra để giải quyết những vấn đề này. Nó thực hiện điều này bằng cách tận dụng các khóa GPG và mô hình web tin cậy để xác thực thông tin đăng nhập của server và cung cấp khả năng quản lý user dễ dàng.

Trong hướng dẫn trước, ta đã thảo luận về cách cài đặt Monkeysphere để xác thực server cho user . Ta sẽ tiếp tục nơi ta đã dừng lại trong hướng dẫn này, nơi ta sẽ tìm hiểu cách xác thực user với server của ta tự động, chỉ dựa trên các khóa GPG của họ và sự tin tưởng của administrator server của ta đối với những user này. Điều này sẽ cho phép ta tạo các file xác thực sử dụng tiếng Anh thuần túy thay vì chủ yếu là thông tin mật mã.

Hướng dẫn này sẽ giả định bạn có cài đặt mà ta đã bỏ qua trong hướng dẫn trước (server.example.com, admin.example.com, client.example.com với các mối quan hệ tin cậy cần thiết được cài đặt ). Bắt đầu nào.

Tạo Chứng nhận Danh tính trên Server SSH

Bước đầu tiên hướng tới việc cho phép server SSH của ta tự động xác thực user của ta với server là cài đặt một trình xác nhận danh tính. Người xác nhận danh tính chỉ đơn giản là một người mà ta chỉ định là tin cậy trong việc cài đặt danh tính của user .

Trong hầu hết các trường hợp, lựa chọn đơn giản và hợp lý là yêu cầu administrator server xác định những user có thể đăng nhập. Ta sẽ đi theo lộ trình này. Bạn cũng có thể tạo nhiều hơn một công cụ xác nhận danh tính nếu tình huống của bạn yêu cầu phân phối trách nhiệm đó.

Hãy bắt đầu bằng cách lấy lại dấu fingerprint của admin-user của ta . Trên máy tính của administrator , ta có thể sử dụng cùng một lệnh GPG mà ta đã sử dụng trong hướng dẫn cuối cùng để lấy toàn bộ file tham chiếu:

gpg --with-colons --fingerprint admin@fakedomain.com 

, ta đang tìm kiếm dòng kết quả giống như sau:

<pre>
fpr :::::::::: <span class = “highlight”> A61256B85307B7ED9AD8D93E9E06881E49E95F19 </span>:
</pre>

Phần được đánh dấu màu đỏ là những gì ta cần ở đây.

Trên server SSH (server.example.com), ta sẽ thêm khóa này làm trình xác nhận danh tính. Bạn có thể thực hiện việc này bằng lệnh :

<pre>
Monkeysphere-Authentication add-Idectifier A61256B85307B7ED9AD8D93E9E06881E49E95F19
</pre>

Monkeysphere sau đó sẽ lấy thông tin GPG phù hợp từ các server và lưu trữ trong keyring của riêng nó. Nó sẽ đánh dấu khóa này là khóa có thể xác minh danh tính của những user khác.

Tạo khóa con xác thực cho user SSH

Bây giờ ta đã cài đặt rằng administrator server của ta có thể xác định user nào là hợp lệ , ta cần thực hiện một chút công việc ở phía client .

Mỗi client phải tạo một khóa con GPG sẽ được sử dụng để xác thực thực tế. Trong khi khóa GPG công khai được sử dụng để xác định user , khóa con được sử dụng cho quy trình đăng nhập thực tế.

Lệnh monkeysphere chứa một lệnh con cho phép bạn dễ dàng tạo khóa con xác thực. Trên ứng dụng client của bạn, hãy nhập:

monkeysphere gen-subkey 

Một khóa phụ sẽ được tạo và thêm vào khóa GPG local của bạn dưới khóa chính của bạn.

Ta cần reload thay đổi khóa lên server để server SSH của ta có thể sử dụng khóa con này để tạo file xác thực nội bộ cho user được đề cập. Khóa ta cần xuất bản là khóa chính của ta , khóa này chứa thay đổi khóa phụ. Để lấy thông tin chính, hãy nhập:

<pre>
gpg –list -key client@fakedomain.com
</pre>
<pre>
pub 2048R / <span class = “highlight”> 87791BD0 </span> 2014-03-14
khách hàng uid < client@fakedomain.com >
phụ 2048R / 3294D31D 2014-03-14
phụ 2048R / 0FECF512 2014-03-14
</pre>

Phần được đánh dấu là ID khóa mà ta sẽ sử dụng để gửi đến server . Sử dụng ID này để gửi khóa trở lại server :

gpg --keyserver pool.sks-keyservers.net --send-key 87791BD0 

Như vậy, khóa con của ta đã có sẵn trên server (có thể mất một chút thời gian để phổ biến), ta có thể cấu hình server SSH của bạn để tạo file xác thực bằng khóa này.

Tạo file xác thực trên server SSH

Bây giờ ta cần tạo các file xác thực thực tế. Tệp xác thực Monkeysphere có hai loại riêng biệt.

Các file cấp user là những file mà ta nên tương tác để cài đặt policy xác thực. Đây là những đơn giản, thẳng về phía trước, các file tiếng Anh đơn giản rằng chỉ cần xác định người theo tên và email (như đã commit để GPG) ai sẽ được phép đăng nhập. Những file này nằm trong folder con trong folder chính của user , giống như SSH thường xuyên authorized_keys các file .

Các file này sau đó được Monkeysphere sử dụng để tạo các file xác thực mà SSH có thể hiểu được bằng cách sử dụng các khóa con được liên kết với từng user hợp lệ mà ta đã tạo ở trên. Monkeysphere tạo các file xác thực cho mỗi user trong folder /var/lib/monkeysphere/authorized_keys khỉsphere / allow_keys.

Ta sẽ tạo các folder và file trên server SSH trong phần này.

Bắt đầu bằng cách chuyển đến folder chính của mọi user bạn muốn cấu hình quyền truy cập. Vì ta cần đăng nhập bằng các quyền quản trị để đạt được điều này, hãy cài đặt quyền truy cập cho user root của ta . Trong folder chính, tạo một folder ẩn được gọi là .monkeysphere :

cd /root mkdir .monkeysphere 

Monkeysphere yêu cầu một số quyền nhất định đối với các folder và file cấp user để chúng được coi là hợp lệ. Cụ thể, nó yêu cầu không có quyền ghi cho bất kỳ ai ngoài chủ sở hữu file hoặc folder .

Hãy đặt các quyền folder để phù hợp với schemas này và sau đó ta hãy chuyển sang folder :

chmod 755 .monkeysphere cd .monkeysphere 

Trong folder này, ta cần tạo một file được gọi là authorized_user_ids . Đây là file xác thực cấp user . Tạo nó bằng editor của bạn:

nano authorized_user_ids 

Trong file này, ta chỉ cần liệt kê những user , theo tên và email, chính xác như họ có trong GPG. Vì vậy, để xem định dạng ta cần sử dụng, ta có thể nhập lại định dạng này trên client của bạn :

<pre>
gpg –list -key client@fakedomain.com
</pre>
<pre>
quán rượu 2048R / 87791BD0 2014-03-14
uid <span class = “highlight”> client < client@fakedomain.com > </span>
phụ 2048R / 3294D31D 2014-03-14
phụ 2048R / 0FECF512 2014-03-14
</pre>

Vì vậy, đây là tất cả những gì ta phải nhập vào file này:

client <client@fakedomain.com> 

Nếu ta muốn thêm những người khác, ta chỉ cần thêm họ một người trên mỗi dòng:

client <client@fakedomain.com> admin <admin@fakedomain.com> 

Đây là dễ dàng hơn để đọc và quản lý hơn lớn authorized_keys file . Các file đó có xu hướng lỗi thời và rất khó để biết liệu khóa cũ có còn hợp lệ hay không. Với phương pháp này, thật dễ dàng để có thể tự hỏi mình "liệu Bob có nên truy cập vào máy này không?" Nếu không, chỉ cần xóa tên của anh ta.

Lưu file khi bạn hoàn tất.

Bây giờ, ta cần nhớ loại bỏ quyền ghi từ bất kỳ ai không phải là chủ sở hữu:

chmod 644 authorized_user_ids 

Lặp lại quy trình này cho mọi user bạn muốn cấu hình quyền truy cập từ xa.

Tạo file xác thực nội bộ

Bây giờ ta đã có các file xác thực cấp user , ta có thể tạo file xác thực nội bộ của bạn một cách dễ dàng.

Tất cả những gì ta phải làm là đưa ra lệnh này:

monkeysphere-authentication update-users 

Bạn nên chạy lệnh này sau khi thực hiện bất kỳ thay đổi nào đối với file xác thực cấp user .

Nếu bạn chỉ muốn cập nhật một user cụ thể, bạn có thể thêm tên của họ làm đối số:

monkeysphere-authentication update-users root 

Hãy xem những file nào được tạo ra bởi quy trình này. Ta cần đến folder lưu trữ những thứ này:

cd /var/lib/monkeysphere/authorized_keys 

Bên trong, bạn sẽ thấy một file cho từng user trên hệ thống mà bạn đã cấu hình quyền truy cập. Một lưu ý nhỏ cho điều này là mỗi user trong file xác thực cấp user cần phải có một khóa con được liên kết có sẵn trên mạng server khóa GPG công khai.

ls 

demouser  root 

Nếu ta xem các file , ta sẽ thấy một khóa giống như sau:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD0CdVIlUptYdZBz/0pn+7XIa2jdzy/VnayAZDXhFdHDTZU0hB8MDGHC9yjUrn9RCMj2NWD3Ls7JjqVAzmRsUn56UwyCJt8/GVmHpeIhYzmUAUjMaaMnjBG3Nhdpm9rsnJt0XVUvOu9oxrvTWYH6ZCVNwsY1O7aX/kQWnaXQW6/B6oiQJ76feZyoLEBR8D/nbxGTtNlkEMcTMTylHN0jHLACJy483SFUkSjHneNK9gNFoxTlUyF/ZBo5+Bo8Uld4iAyhaW7Di4HzfUJzvebZYX1Z1O0yS/db8anSJoZX90MLt7eIFsixuDMS3m31dsX26RI71tJGihvzF0fUsUPDg17 MonkeySphere2014-03-22T13:14:31 client <client@fakedomain.com> 

Như bạn thấy , đây là cơ bản là một bình thường authorized_keys nhập cảnh. Mặc dù vậy, ta đã tóm tắt điều này để quản lý user dễ dàng hơn và cho phép user cập nhật động các khóa của họ thông qua GPG.

Bạn cũng có thể thấy các dòng bổ sung trong file này không liên quan đến bất kỳ mục nhập nào bạn đã thực hiện trong file authorized_user_ids quyền_người_dùng_dịch. Điều này là do, theo mặc định, Monkeysphere gắn bất kỳ mục nhập nào mà nó tìm thấy trong các file authorized_keys hiện có vào cuối file được tạo. Điều này nhằm giúp bạn chuyển đổi giữa hai hệ thống và cho những user không thể chuyển đổi vì bất kỳ lý do gì.

Bây giờ ta đã tạo các file ủy quyền mới này, ta cần cập nhật cấu hình của SSH daemon để xem các file này thay vì các file trong folder của mỗi user .

Mở file cấu hình bằng editor (đảm bảo bạn đang chọn sshd_config , không phải ssh_config ):

nano /etc/ssh/sshd_config 

Trong file này, hãy tìm và sửa đổi tham số AuthorizedKeysFile hoặc tạo nó nếu nó không tồn tại. Đặt giá trị này:

AuthorizedKeysFile /var/lib/monkeysphere/authorized_keys/%u 

Lưu file khi bạn hoàn tất.

Bây giờ, ta chỉ cần khởi động lại daemon SSH để thay đổi diễn ra:

service ssh restart 

Cấu hình ứng dụng client để gửi khóa GPG để xác thực

Bây giờ, server của ta đã hoàn toàn được cấu hình để chấp nhận khóa con GPG mà ta đã tạo để xác thực.

Ta cần cấu hình ứng dụng client của bạn để kết nối bằng thông tin này thay vì password hoặc khóa RSA thông thường. Monkeysphere thực hiện điều này thông qua việc sử dụng trình ssh-agent , được sử dụng để lưu trữ chi tiết xác thực cho các kết nối SSH trong một khoảng thời gian dài.

Ta có thể dùng thử mà không cần khởi động tác nhân bằng cách sử dụng lệnh một lần như sau:

ssh-agent sh -c 'monkeysphere subkey-to-ssh-agent && ssh server.example.com' 

Điều này sẽ hoạt động và sau khi bạn đã nhập password của bạn cho khóa GPG, bạn có thể kết nối với server mà không cần nhập bất kỳ password nào cho account của server .

Tuy nhiên, có lẽ rất đáng để bắt đầu một phiên đại lý. Bạn có thể làm điều đó trong shell hiện tại của bạn bằng lệnh :

eval $(ssh-agent) 

Để bắt đầu tự động điều này mỗi khi ta đăng nhập, ta có thể thêm nó vào file ~/.bash_profile của khách hàng:

echo 'eval $(ssh-agent)' >> ~/.bash_profile 

Dù bằng cách nào, sau đó ta cần thêm khóa con GPG của bạn vào SSH agent để nó có thể sử dụng nó để xác thực. Làm điều này bằng lệnh :

monkeysphere subkey-to-ssh-agent 

Bạn sẽ phải nhập password khóa GPG của bạn , nhưng điều này sẽ chỉ được yêu cầu một lần mỗi phiên.

Ta có thể thấy rằng nó đã được chấp nhận bằng lệnh :

ssh-add -l 

2048 2a:1a:1d:52:32:e5:f4:45:b2:a3:ff:d0:c0:6e:69:f6 client <client@fakedomain.com> (RSA) 

Như vậy, ta có thể đăng nhập mà không bị nhắc về bất kỳ điều gì vào bất kỳ account nào mà ta có quyền truy cập bằng cách sử dụng khóa con GPG của bạn :

ssh server.example.com 

Kết luận

Sau khi cài đặt Monkeysphere trên cơ sở hạ tầng của bạn , bạn sẽ có một cách bền vững để quản lý tương tác giữa server và con người cho tổ chức của bạn . Phương pháp này có thể xử lý các administrator server tham gia và rời khỏi tổ chức vì tất cả xác thực cấp user đều bằng tiếng Anh đơn giản. Ngoài ra, bạn sẽ không phải lo lắng về việc kẻ tấn công cố gắng giả mạo quyền truy cập vào server của bạn.

<div class = “author”> Bởi Justin Ellingwood </div>


Tags:

Các tin liên quan

Cách xác thực danh tính server SSH với Monkeysphere trên VPS Ubuntu
2014-03-24
Cách thiết lập DNSSEC trên server DNS BIND ủy quyền
2014-03-19
Cách thiết lập DNSSEC trên server DNS BIND ủy quyền
2014-03-19
Cách cài đặt TrueCrypt (CLI) trên Linux
2014-03-17
Cách sử dụng Công cụ IPRoute2 để quản lý cấu hình mạng trên VPS Linux
2014-03-11
Cách sử dụng các lệnh và mở rộng lịch sử Bash trên VPS Linux
2014-03-05
Giới thiệu về Bảo mật VPS Linux của bạn
2014-03-04
Cách đọc và đặt các biến Môi trường và Hệ vỏ trên VPS Linux
2014-03-03
Cách đọc và đặt các biến Môi trường và Hệ vỏ trên VPS Linux
2014-03-03
Cách sử dụng cd, pwd và ls để khám phá hệ thống tệp trên server Linux
2014-02-28