Gần như VPS mới nào cũng bắt đầu giống nhau: bạn đăng nhập bằng root, cài vài thứ, và một tháng sau vẫn đang là root. Mọi chuyện ổn cho đến khi một script bạn dán vào xóa nhầm thư mục. Thiết lập một người dùng thường với sudo chỉ mất năm phút, và thứ tự quan trọng hơn cả các lệnh — làm sai thứ tự là bạn tự khóa mình ở ngoài.
Đây là trình tự an toàn cho Ubuntu 22.04/24.04 và Debian 12.
1. Tạo người dùng
Với quyền root:
adduser deploy
usermod -aG sudo deploy
adduser hỏi mật khẩu và vài thông tin tùy chọn (cứ nhấn Enter bỏ qua). Hãy chọn một mật khẩu thật: bạn sẽ gõ nó khi dùng sudo. Trên image Debian tối giản, chạy apt install -y sudo trước nếu thiếu lệnh này.
2. Cấp khóa SSH của bạn
Cách dễ nhất là sao chép các khóa được ủy quyền của root, giữ đúng quyền sở hữu:
rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy
Nếu bạn thích làm thủ công:
mkdir -p /home/deploy/.ssh
cp /root/.ssh/authorized_keys /home/deploy/.ssh/
chown -R deploy:deploy /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
chmod 600 /home/deploy/.ssh/authorized_keys
Quyền truy cập sai là lý do kinh điển khiến đăng nhập bằng khóa thất bại mà không báo gì. SSH bỏ qua file authorized_keys mà người dùng khác có thể ghi vào.
3. Kiểm tra trước khi thay đổi bất cứ gì
Giữ phiên root mở. Trong một terminal mới:
ssh -p 22 deploy@203.0.113.10
sudo whoami
Dùng IP và cổng của bạn — với gói NAT, đó là cổng SSH cá nhân trong bảng điều khiển. Nếu sudo whoami in ra root, mọi thứ ổn. Nếu đăng nhập thất bại, bạn vẫn còn cửa sổ root để sửa.
4. Tắt đăng nhập root
Giờ thì đóng cửa lại. Tạo một file drop-in nhỏ thay vì sửa file cấu hình chính:
cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh
sshd -t kiểm tra cú pháp trước. Cấu hình hỏng cộng với reload chính là con đường dẫn người ta đến chỗ phải dùng console. PasswordAuthentication no chỉ có ý nghĩa khi đăng nhập bằng khóa đã chạy được với người dùng mới — điều bạn vừa kiểm tra.
Mở thêm một terminal nữa và xác nhận root bị từ chối còn deploy vẫn vào được. Sau đó đóng phiên root cũ.
5. Tùy chọn: sudo không mật khẩu cho tự động hóa
Nếu một script deploy cần sudo không hỏi mật khẩu, hãy cấp đúng như vậy và không hơn:
visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
Thật lòng mà nói, NOPASSWD: ALL rất hấp dẫn, nhưng nó đồng nghĩa với việc một khóa bị đánh cắp bằng root. Hãy giới hạn ở các lệnh mà tự động hóa chạy.
Nếu có sự cố
Web console trong bảng điều khiển không phụ thuộc vào SSH hay tường lửa. Đăng nhập từ đó, sửa file trong /etc/ssh/sshd_config.d/, reload, xong. Toàn bộ quy trình khôi phục được chúng tôi viết trong cách vào lại VPS khi bị khóa ngoài.
Làm gì tiếp theo
- Chuyển hẳn sang đăng nhập chỉ bằng khóa: xác thực bằng khóa SSH.
- Giảm tiếng ồn từ các lần dò mật khẩu: fail2ban.
- Hoàn tất phần cơ bản còn lại với danh sách bảo mật cho VPS mới.
Các lựa chọn truy cập của từng gói có trong tài liệu truy cập. Ngay cả một Nano giá $3 cũng xứng đáng có người dùng không phải root — đó là bản nâng cấp bảo mật rẻ nhất có thể.
Bình luận
Chưa có bình luận nào. Hãy là người đầu tiên.