Đang tải bài học…
Nội dung sẽ hiển thị khi tải xong.
Nội dung sẽ hiển thị khi tải xong.
Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.
Server có IP công khai bị dò mật khẩu SSH chỉ vài phút sau khi bật. Đăng nhập bằng key và tắt mật khẩu loại bỏ gần như toàn bộ kiểu tấn công này. Đây cũng là bước bắt buộc trước khi mở bất kỳ port nào trên VPS lab.
.ssh khiến key bị từ chối âm thầm.Private key ở lại máy bạn, public key đặt trên server. Khi đăng nhập, server thách thức client chứng minh đang giữ private key tương ứng với một dòng trong authorized_keys. Private key không bao giờ rời máy bạn.
sshd rất khắt khe về quyền. Nếu ~/.ssh hoặc authorized_keys ghi được bởi người khác, sshd bỏ qua key (StrictModes). Triệu chứng là bị hỏi mật khẩu dù đã có key. Lý do thật chỉ nằm trong log của server.
Drop-in thay vì sửa file gốc. /etc/ssh/sshd_config include các file /etc/ssh/sshd_config.d/*.conf theo thứ tự tên. Với sshd, giá trị gặp đầu tiên thắng, nên file tên 10-... được ưu tiên hơn 50-redhat.conf hay 50-cloud-init.conf.
Trên máy của bạn (không phải VM):
ssh-keygen -t ed25519 -f ~/.ssh/kdc_lab -C "kdc-lab"
ssh-copy-id -i ~/.ssh/kdc_lab.pub <user>@<ip-của-vm>
ssh -i ~/.ssh/kdc_lab <user>@<ip-của-vm> 'echo key OK'
| Lệnh / tùy chọn | Ý nghĩa |
|---|---|
ssh-keygen | Tạo cặp private/public key; giữ private key trên laptop. |
-t ed25519 | Chọn thuật toán key. |
-f ~/.ssh/kdc_lab | Chọn tên file private key; public key có thêm .pub. Nếu file đã có, không xác nhận ghi đè trừ khi bạn muốn thay key. |
-C "kdc-lab" | Gắn comment để nhận biết key. -C hoa khác -c thường. |
ssh-copy-id -i ...pub | Cài public key được chỉ định vào authorized_keys trên server. |
ssh -i ...kdc_lab | Chọn private key dùng để đăng nhập; -i có nghĩa tùy lệnh, ở đây nhận file private key. |
'echo key OK' | Lệnh được SSH chạy ở VM sau khi đăng nhập, rồi kết thúc phiên. |
passwd <user> đặt mật khẩu user trên VM; sudo -v xác thực/cập nhật phiên quyền sudo mà chưa chạy lệnh quản trị khác. Thay <user> và <ip-của-vm> bằng giá trị thật.
Phải thấy key OK mà không bị hỏi mật khẩu đăng nhập. Chưa được thì dừng lại, chưa tắt mật khẩu.
VPS chỉ có tài khoản root: trước tiên tạo user quản trị (
useradd -m -G wheel <user>,passwd <user>), copy key cho user đó, thửsudo -v, rồi mới làm tiếp.
scp ~/.ssh/kdc_lab.pub <user>@<ip-của-vm>:/tmp/kdc_lab.pub
Trên VM:
sudo useradd -m kdc-deploy
sudo install -d -m 700 -o kdc-deploy -g kdc-deploy /home/kdc-deploy/.ssh
sudo install -m 600 -o kdc-deploy -g kdc-deploy /tmp/kdc_lab.pub /home/kdc-deploy/.ssh/authorized_keys
sudo restorecon -Rv /home/kdc-deploy/.ssh
rm /tmp/kdc_lab.pub
install -m 600 -o kdc-deploy -g kdc-deploy <nguồn> <đích> copy file và đặt quyền, owner, group trong cùng thao tác. Khi không có -d, install ở đây copy file. restorecon -Rv khôi phục SELinux context theo policy: -R đi qua thư mục con, -v in thay đổi. rm /tmp/kdc_lab.pub xóa bản public key tạm trên VM; private key vẫn ở laptop.
restorecon gán lại SELinux context đúng cho file vừa tạo. Thiếu bước này, SELinux có thể chặn sshd đọc authorized_keys.
Từ máy của bạn: ssh -i ~/.ssh/kdc_lab kdc-deploy@<ip-của-vm>.
sudo tee /etc/ssh/sshd_config.d/10-kdc-hardening.conf <<'EOF'
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
EOF
sudo sshd -t && sudo systemctl reload sshd
sudo sshd -T | grep -Ei '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin) '
sshd là chương trình dịch vụ SSH: -t chỉ kiểm tra cú pháp/key, -T in cấu hình hiệu lực. && chỉ chạy lệnh reload nếu bước kiểm tra trước đó thành công. systemctl reload yêu cầu dịch vụ nạp lại cấu hình mà không dừng toàn bộ dịch vụ khi được hỗ trợ. grep -Ei gộp -E (regex mở rộng) và -i (bỏ qua hoa/thường); ^ giới hạn đầu dòng, các dấu | trong mẫu chọn một trong ba tên cấu hình.
sshd -t kiểm tra cú pháp trước khi reload. sshd -T in cấu hình hiệu lực: đây là evidence đúng, không phải nội dung file bạn vừa viết.
Từ một terminal mới trên máy của bạn:
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password <user>@<ip-của-vm>
ssh -o <tên>=<giá-trị> đặt tùy chọn cho riêng lần kết nối này. PubkeyAuthentication=no tắt thử public key; PreferredAuthentications=password chỉ thử phương thức mật khẩu. Lệnh cố ý cần thất bại sau hardening; không dùng nó làm lệnh đăng nhập hằng ngày.
Kết quả mong đợi: Permission denied (publickey...). Giữ nguyên phiên dự phòng cho đến khi đăng nhập bằng key vẫn thành công.
sudo ls -la /home/kdc-deploy/.ssh
sudo sshd -T | grep -Ei '^(passwordauthentication|permitrootlogin) '
systemctl is-active sshd
ls -la gộp -l (chi tiết) với -a (hiện cả tên bắt đầu bằng dấu chấm). Với lỗi xác thực, sudo journalctl -u sshd -n 30 xem 30 dòng log gần nhất của unit SSH: -u chọn unit, -n chọn số dòng. Nếu vào trình xem phân trang, nhấn q để thoát.
Chọn server và bấm Kiểm tra kết quả.
sudo journalctl -u sshd -n 30 trên server. Thường gặp: bad ownership or modes, SELinux context sai, hoặc dán public key bị xuống dòng./etc/ssh/sshd_config nhưng không có tác dụng: một file trong sshd_config.d/ đã đặt giá trị trước. Dùng sshd -T để biết giá trị cuối cùng.Unit là ssh.service (có alias sshd). Không cần restorecon vì Ubuntu dùng AppArmor. Ubuntu 24.04 dùng socket activation: sau khi đổi cấu hình, chạy sudo systemctl restart ssh.