Hướng Dẫn Cấu Hình OpenSSH Server Để Ngăn Chặn Đăng Nhập Bằng Password Trên Linux
Chào các bạn,
Trong bài viết này, mình xin chia sẻ một mẹo nhỏ nhưng hữu ích về cách cấu hình OpenSSH Server (sshd) trên Linux để chỉ cho phép đăng nhập qua identity key, nhằm nâng cao tính bảo mật cho VPS của bạn.
Giới Thiệu Vấn Đề
Mới đây, mình đã thuê một VPS trên dịch vụ cloud và phải tạo mật khẩu cho người dùng, mặc dù mình đã thêm key pair. Điều này đồng nghĩa với việc mình có thể SSH vào server bằng mật khẩu hoặc key. Tuy nhiên, để tăng cường bảo mật, mình không muốn cho phép đăng nhập bằng mật khẩu mà chỉ muốn sử dụng key.
Các Bước Thực Hiện
Bước đầu tiên mà mình thực hiện là mở file cấu hình sshd tại /etc/ssh/sshd_config
và comment dòng thiết lập PasswordAuthentication
như sau:
#PasswordAuthentication yes
Sau khi thực hiện xong, mình đã restart lại dịch vụ sshd với command sau:
sudo systemctl restart sshd
Thế nhưng, điều bất ngờ xảy ra: mình vẫn có thể đăng nhập bằng mật khẩu. Để tìm hiểu nguyên nhân, mình đã kiểm tra giá trị hiện tại của thuộc tính PasswordAuthentication
với command:
sudo sshd -T | grep -i PasswordAuthentication
Và kết quả là:
passwordauthentication yes
Tìm Hiểu Nguyên Nhân
Nguyên nhân cho tình huống này xuất phát từ dòng cấu hình:
Include /etc/ssh/sshd_config.d/*.conf
Điều này có nghĩa là cấu hình không chỉ được load từ file /etc/ssh/sshd_config
mà còn được load từ tất cả các file có đuôi .conf
trong thư mục /etc/ssh/sshd_config.d
.
Mình đã kiểm tra thư mục này và phát hiện có một số file khác, cụ thể là:
ls /etc/ssh/sshd_config.d/
100-allowsshrsa.conf 50-cloud-init.conf
Và chính file 50-cloud-init.conf
là nguyên nhân khiến mình vẫn có thể login bằng password với nội dung:
PasswordAuthentication yes
Lưu ý: Nội dung file cấu hình và số lượng file có thể khác nhau tùy theo hệ điều hành hoặc bản phân phối Linux.
Giải Pháp
Thay vì sửa file 50-cloud-init.conf
(để tránh xung đột), mình quyết định tạo một file cấu hình mới để thiết lập PasswordAuthentication
thành no
. Mục tiêu là để override cấu hình trong file 50-cloud-init.conf
.
Để làm điều này, mình tạo một file mới có tên là 1000-customize.conf
với nội dung sau:
PasswordAuthentication no
Theo quy tắc chú thích tên file, file bắt đầu bằng số lớn hơn 50
sẽ có ưu tiên cao hơn (vd : 1000
> 50
).
Kiểm Tra Kết Quả
Sau khi tạo file mới, mình thực hiện kiểm tra lại:
sudo sshd -T | grep -i PasswordAuthentication
Kết quả sẽ là:
passwordauthentication no
Giờ thì đã đến lúc restart service sshd một lần nữa:
sudo systemctl restart sshd
Kết Luận
Để kết thúc bài viết này, mình muốn nhấn mạnh một số điểm quan trọng:
- Cấu hình không chỉ được đặt trong file
/etc/ssh/sshd_config
mà còn có thể được thêm hoặc sửa đổi thông qua các file trong thư mục/etc/ssh/sshd_config.d
. - Các cài đặt có thể được override. Cài đặt mới sẽ ghi đè lên cài đặt cũ.
- Điều này không chỉ áp dụng cho OpenSSH mà còn cho nhiều dịch vụ khác như Nginx, PostgreSQL.
Hy vọng rằng những thông tin trên sẽ giúp ích cho bạn trong việc cấu hình OpenSSH Server an toàn và hiệu quả hơn!
source: viblo