Thứ tư, 26/03/2014 | 00:00 GMT+7

Cách điều chỉnh cấu hình SSH Daemon của bạn trên VPS Linux

SSH là cách chính để kết nối với các server Linux và Unix từ xa thông qua dòng lệnh. Nó cung cấp một kết nối an toàn mà bạn có thể sử dụng để chạy lệnh, tương tác với hệ thống và thậm chí tạo tunnel cho lưu lượng truy cập không liên quan.

Hầu hết user đều biết những điều cơ bản về cách bắt đầu và kết nối với server từ xa bằng một lệnh như:

<pre>
ssh <span class = “highlight”> tên user </span> @ <span class = “highlight”> remote_server </span>
</pre>

Tuy nhiên, có nhiều tùy chọn khác mà bạn có với việc cấu hình daemon SSH của bạn có thể hữu ích cho việc tăng cường bảo mật, quản lý kết nối user , v.v. Ta sẽ thảo luận một số tùy chọn mà bạn có để kiểm soát chi tiết hơn quyền truy cập SSH của bạn .

Ta sẽ giới thiệu những khái niệm này trên version VPS Ubuntu 12.04, nhưng bất kỳ bản phân phối Linux hiện đại nào cũng phải hoạt động theo kiểu tương tự.

Khám phá file cấu hình SSHD

Nguồn chính của cấu hình cho chính trình SSH nằm trong file /etc/ssh/sshd_config . Lưu ý file này khác với file ssh_config , chỉ định các giá trị mặc định phía client .

Mở file ngay bây giờ với các quyền quản trị:

sudo nano /etc/ssh/sshd_config 

Bạn sẽ thấy một file có khá nhiều tùy chọn và, hy vọng (tùy thuộc vào phân phối của bạn), sẽ có rất nhiều comment . Mặc dù hầu hết các bản phân phối thực hiện khá tốt việc cài đặt các mặc định lành mạnh, nhưng vẫn có chỗ để cải tiến và tùy chỉnh.

Hãy xem qua một số tùy chọn đã được cài đặt trong file của ta trên Ubuntu 12.04:

Cổng và giao thức

  • Cổng 22 : Điều này chỉ định cổng mà daemon SSH sẽ tìm kiếm các kết nối. Theo mặc định, hầu hết các client và server hoạt động trên cổng 22, nhưng việc thay đổi cổng này thành một cổng khác có thể làm giảm số lần đăng nhập SSH “từng ổ” của user độc hại.

  • Giao thức 2 : SSH đã trải qua hai version giao thức. Trừ khi bạn đặc biệt cần hỗ trợ các client chỉ có thể hoạt động trên giao thức 1, bạn nên để nguyên trạng thái này.

Key và tách

  • HostKey / etc / ssh / ssh_ host : Những dòng này chỉ định các khóa server cho server . Các khóa này được sử dụng để xác định server để kết nối client . Nếu client đã giao tiếp với server trước đây, họ có thể sử dụng khóa này để xác thực kết nối mới.

  • UsePrivilegeSepilities yes : Tùy chọn này cho phép SSH sinh ra các quy trình con chỉ có các quyền cần thiết cho các nhiệm vụ của chúng. Đây là một tính năng an toàn để cô lập các quy trình trong trường hợp bị khai thác bảo mật.

  • KeyRegenerationInterval và ServerKeyBits : Các tùy chọn này ảnh hưởng đến khóa server được tạo cho giao thức SSH 1. Bạn không cần phải lo lắng về điều này nếu bạn yêu cầu các kết nối của bạn tuân theo giao thức 2.

Ghi log và hạn chế

  • SyslogFacility và LogLevel : Các tùy chọn này chỉ định cách hoạt động sẽ được ghi lại. Tùy chọn đầu tiên dành cho mã cơ sở để ghi log thông báo và tùy chọn thứ hai cho biết mức độ log , hoặc số lượng chi tiết, để ghi log .

  • LoginGraceTime 120 : Điều này cho biết số giây mà server đợi trước khi ngắt kết nối với client nếu không có đăng nhập thành công.

  • PermitRootLogin yes : Tùy chọn này cho phép hoặc từ chối khả năng SSH bằng account root . Vì account root là account mà kẻ tấn công biết là có trên server và vì nó cung cấp quyền truy cập không hạn chế vào máy, nên nó thường là account được nhắm đến cao. Bạn nên đặt cài đặt này thành “no” sau khi bạn cấu hình account regular user với các quyền sudo.

  • Nghiêm ngặt có : Điều này cho SSH biết để bỏ qua các file cấu hình cấp user nào không có quyền chính xác. Nếu user đặt file cấu hình của họ ở chế độ có thể đọc được trên toàn thế giới, điều này có ý nghĩa bảo mật. Sẽ an toàn hơn nếu từ chối quyền truy cập cho đến khi điều này được khắc phục.

  • Bỏ quaRhosts và RhostsRSAAuthentication : Chúng chỉ định xem xác thực kiểu rhost có được chấp nhận hay không. Đây là cú pháp giao thức 1 không áp dụng cho giao thức 2.

  • HostbasedAuthentication no : Đây là version giao thức 2 ở trên. Về cơ bản, điều này cho phép xác thực dựa trên server của client kết nối. Điều này thường chỉ được chấp nhận đối với các môi trường biệt lập, vì có thể giả mạo thông tin nguồn. Bạn có thể chỉ định thông tin server lưu trữ trong file /etc/ssh/shosts.equiv hoặc file /etc/hosts.equiv .Điều này nằm ngoài phạm vi của hướng dẫn này.

  • PermitEmptyPasswords no : Tùy chọn này hạn chế quyền truy cập SSH cho các account không có password khi cho phép xác thực password . Đây có thể là một rủi ro bảo mật lớn và bạn hầu như không bao giờ nên thay đổi nó.

  • ChallengeResponseAuthentication : Dòng này bật hoặc tắt loại xác thực phản hồi thách thức có thể được cấu hình thông qua PAM. Điều này nằm ngoài phạm vi của hướng dẫn này.

Trưng bày

  • X11Chuyển tiếp có : Điều này cho phép bạn chuyển tiếp giao diện user đồ họa X11 cho các ứng dụng trên server tới client . Điều này nghĩa là bạn có thể bắt đầu một chương trình đồ họa trên server và tương tác với nó trên client . Máy khách phải có sẵn hệ thống cửa sổ X. Bạn có thể cài đặt chúng trên OS X và bất kỳ máy tính để bàn nào Linux sẽ có khả năng này.

  • X11DisplayOffset 10 : Đây là phần bù cho số hiển thị sshd cho chuyển tiếp X11. Sự bù đắp này cho phép các cửa sổ X11 được tạo SSH tránh xung đột với server X hiện có.

  • PrintMotd no : Điều này chỉ định rằng bản thân daemon SSH không được đọc và hiển thị thông báo của file ngày. Tuy nhiên, điều này đôi khi được đọc bởi chính shell, vì vậy bạn cũng có thể cần phải sửa đổi các file tùy chọn shell của bạn .

  • PrintLastLog yes : Điều này yêu cầu trình SSH in ra thông tin về lần cuối cùng bạn đăng nhập.

Kết nối và Môi trường

  • TCPKeepAlive yes : Điều này chỉ định xem các thông điệp lưu giữ TCP có được gửi đến client hay không. Điều này có thể giúp server nhận ra khi có sự cố và kết nối sẽ bị ngắt. Nếu tùy chọn này bị vô hiệu hóa, các kết nối sẽ không bị ngắt khi có sự cố mạng ngắn, điều này có thể tốt, nhưng nó cũng nghĩa là user có thể bị ngắt kết nối và tiếp tục khóa tài nguyên.

  • AcceptEnv LANG LC_ * : Tùy chọn này cho phép bạn chấp nhận các biến môi trường nhất định từ client . Trong trường hợp cụ thể này, ta đang chấp nhận các biến ngôn ngữ, có thể giúp phiên shell hiển thị đúng cho client .

  • Hệ thống con sftp / usr / lib / openssh / sftp-server : Hệ thống này cấu hình các hệ thống con bên ngoài được dùng với SSH. Ví dụ này chỉ định một server SFTP và đường dẫn để thực thi nó.

  • UsePAM yes : Điều này chỉ định rằng PAM (Mô-đun xác thực có thể cắm được) sẽ có sẵn để hỗ trợ user xác thực.

Điều này sẽ xử lý các tùy chọn được bật mặc định trên máy Ubuntu 12.04 của ta . Tiếp theo, hãy nói về một số tùy chọn khác có thể hữu ích cho bạn để cài đặt hoặc sửa đổi.

Các tùy chọn SSHD khác

Có khá nhiều tùy chọn khác mà ta có thể đặt cho daemon SSH của bạn . Một số trong số này có thể hữu ích ngay lập tức cho bạn, trong khi những người khác có thể chỉ hữu ích trong những trường hợp cụ thể. Ta sẽ không xem xét mọi tùy chọn ở đây, nhưng sẽ xem xét một số tùy chọn hữu ích.

Lọc user và group

Một số tùy chọn cho phép bạn kiểm soát chính xác user nào sẽ có khả năng đăng nhập thông qua SSH. Các lựa chọn này nên được coi là loại trừ lẫn nhau. Ví dụ: tùy chọn AllowUsers ngụ ý rằng tất cả user khác đều bị từ chối quyền truy cập.

  • AllowGroups : Tùy chọn này cho phép bạn chỉ định tên của các group trên server . Chỉ những user là thành viên của một trong những group này mới có khả năng đăng nhập. Điều này tạo danh sách trắng các group cần có quyền truy cập.

  • AllowUsers : Tùy chọn này tương tự như tùy chọn ở trên, nhưng nó chỉ định user cụ thể được phép đăng nhập. Mọi user không có trong danh sách này sẽ không thể đăng nhập. Điều này hoạt động như một danh sách trắng của user .

  • DenyGroups : Tùy chọn này cài đặt blacklist các group không được phép đăng nhập vào hệ thống. User thuộc các group này sẽ không được phép truy cập.

  • DenyUsers : Đây là blacklist dành cho user . Nó chỉ định cụ thể user nào không được cấp quyền truy cập để đăng nhập thông qua SSH.

Ngoài ra, có một số tùy chọn hạn chế khác có sẵn. Chúng được dùng cùng với bất kỳ tùy chọn nào ở trên:

  • Đối sánh : Tùy chọn này cho phép kiểm soát chi tiết hơn nhiều đối với những người có thể xác thực trong những trường hợp nào. Nó chỉ định một tập hợp các tùy chọn khác sẽ được sử dụng khi một user hoặc group cụ thể kết nối. Ta sẽ thảo luận chi tiết hơn về vấn đề này sau.

  • RevokedKeys : Điều này cho phép bạn chỉ định danh sách các public key bị thu hồi. Điều này sẽ ngăn không cho các khóa được liệt kê được sử dụng để đăng nhập vào hệ thống.

sự lựa chọn hỗn hợp

Có một số tùy chọn mà ta có thể sử dụng để cấu hình lưu lượng mạng mà daemon SSH sẽ chú ý đến:

  • AddressFamily : Tùy chọn này chỉ định loại địa chỉ bạn sẽ chấp nhận các kết nối. Theo mặc định, giá trị là “bất kỳ”, nhưng bạn có thể đặt “inet” cho địa chỉ IPv4 hoặc “inet6” cho địa chỉ IPv6.

  • ListenAddress : Tùy chọn này cho phép bạn yêu cầu trình SSH lắng nghe trên một địa chỉ và cổng cụ thể. Theo mặc định, daemon sẽ lắng nghe tất cả các địa chỉ được cấu hình cho máy này.

Các loại tùy chọn khác có sẵn là những tùy chọn được sử dụng để cài đặt xác thực dựa trên certificate , tùy chọn giới hạn kết nối như ClientAliveCountMaxClientAliveInterval và các tùy chọn như ChrootDirectory , được dùng để khóa user đã đăng nhập vào một môi trường chroot cụ thể, được cấu hình trước .

Hạn chế đăng nhập của user

Ta đã đề cập ở trên một số công cụ bạn có để hạn chế quyền truy cập vào user và group . Ta hãy đi vào chi tiết hơn một chút ở đây.

Cú pháp cơ bản nhất để sử dụng những cái này là như sau:

AllowUsers demouser fakeuser madeupuser 

Như bạn thấy , ta có thể chỉ định nhiều user được phân tách bằng dấu cách trong mỗi lệnh này.

Ta cũng có thể sử dụng thẻ đại diện và phủ định các mục nhập. Ví dụ: nếu ta muốn cho phép tất cả mọi người trừ user "john" đăng nhập, ta có thể thử thông tin như sau:

AllowUsers * !john 

Ví dụ cụ thể này có thể sẽ được diễn đạt tốt hơn với dòng DenyUsers :

DenyUsers john 

Ta cũng có thể sử dụng một ? để khớp chính xác một ký tự. Ví dụ, ta có thể sử dụng:

AllowUsers ?im 

Điều này sẽ cho phép đăng nhập từ các account như “tim”, “jim” hoặc “vim”.

Tuy nhiên, ta có thể nhận được cụ thể hơn. Trong cả hai thông số kỹ thuật user , ta có thể sử dụng biểu mẫu user@hostname để hạn chế thông tin đăng nhập vào các vị trí nguồn khách hàng cụ thể. Ví dụ, bạn có thể có thông tin như :

AllowUsers demouser@host1.com fakeuser 

Điều này sẽ cho phép “ user giả mạo” đăng nhập từ mọi nơi, nhưng sẽ chỉ cho phép “ user làm giả” đăng nhập từ một server cụ thể.

Ta cũng có thể giới hạn quyền truy cập trên cơ sở từng server bên ngoài file sshd_config thông qua shell bọc TCP. Điều này được cấu hình thông qua các file /etc/hosts.allow/etc/hosts.deny .

Ví dụ: ta có thể hạn chế quyền truy cập cụ thể dựa trên lưu lượng SSH bằng cách thêm các dòng như thế này vào file hosts.allow :

sshd: .example.com 

Giả sử rằng ta có một dòng đồng hành trong file hosts.deny trông giống như sau:

sshd: ALL 

Điều này sẽ hạn chế đăng nhập chỉ với những người đến từ example.com hoặc domain phụ.

Sử dụng tùy chọn đối sánh để thêm ngoại lệ

Ta có thể kiểm soát các tùy chọn của bạn hơn nữa bằng cách sử dụng các tùy chọn "đối sánh". Các tùy chọn đối sánh hoạt động bằng cách chỉ định một mẫu tiêu chí sẽ quyết định liệu các tùy chọn tiếp theo có được áp dụng hay không.

Ta bắt đầu đối sánh bằng cách sử dụng tùy chọn Match và sau đó chỉ định các cặp key-value tiêu chí. Các khóa khả dụng là “ User ”, “ Group ”, “ Server lưu trữ” và “Địa chỉ”. Ta có thể phân tách các tiêu chí bằng dấu cách và tách các mẫu (user1, user2) bằng dấu phẩy. Ta cũng có thể sử dụng các thẻ đại diện và phủ định:

Match User !demouser,!fakeuser Group sshusers Host *.example.com 

Dòng trên sẽ chỉ phù hợp nếu user không phải là demouser hoặc fakeuser , nếu user thành viên của group sshusers , và nếu họ đang kết nối từ example.com hoặc domain phụ.

Tiêu chí "Địa chỉ" có thể sử dụng ký hiệu mặt nạ mạng CIDR .

Các tùy chọn tuân theo đặc tả Match được áp dụng có điều kiện. Phạm vi của các tùy chọn có điều kiện này là cho đến cuối file hoặc cho đến thông số kỹ thuật đối sánh tiếp theo. Do đó, bạn nên đặt các giá trị mặc định của bạn ở đầu file và đặt các ngoại lệ của bạn ở cuối file .

Do khối điều kiện này, các tùy chọn trong một kết quả khớp thường được thụt vào để cho biết rằng chúng chỉ được áp dụng ở trận đấu ở trên. Ví dụ: điều kiện ở trên có thể có một khối bên dưới nó như thế này:

Match User !demouser,!fakeuser Group sshusers Host *.example.com     AuthorizedKeysFile /sshusers/keys/%u     PasswordAuthentication yes     X11Forwarding     X11DisplayOffset 15 

Bạn chỉ có quyền truy cập vào một tập hợp con các tùy chọn khi xử lý các thông số kỹ thuật đối sánh. Để xem danh sách đầy đủ, hãy xem trang người đàn ông sshd_config :

man sshd_config 

Tìm kiếm phần “Đối sánh” để xem danh sách các tùy chọn có sẵn.

Kết luận

Như bạn thấy, bạn có thể điều chỉnh nhiều giá trị ở phía server của SSH sẽ ảnh hưởng đến khả năng user đăng nhập và chất lượng trải nghiệm của họ. Đảm bảo kiểm tra cẩn thận các thay đổi trước khi triển khai trên diện rộng để phát hiện lỗi và đảm bảo các hạn chế của bạn không vô tình ảnh hưởng đến quá ít hoặc quá nhiều user .

Làm quen với file /etc/ssh/sshd_config là bước đầu tiên tuyệt vời để hiểu cách kiểm soát cẩn thận quyền truy cập vào server của bạn. Đây là một kỹ năng quan trọng đối với bất kỳ administrator hệ thống Linux nào.

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


Tags:

Các tin liên quan

Cách xác thực người dùng với server SSH bằng Monkeysphere trên VPS Ubuntu
2014-03-24
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