VPS ใหม่เกือบทุกเครื่องเริ่มต้นแบบเดียวกัน: คุณล็อกอินด้วย root ติดตั้งนั่นนี่ แล้วผ่านไปเดือนหนึ่งก็ยังเป็น root อยู่ มันใช้ได้ดีจนกระทั่งสคริปต์ที่ก๊อปมาวางลบผิดโฟลเดอร์ การตั้งผู้ใช้ธรรมดาพร้อม sudo ใช้เวลาห้านาที และลำดับสำคัญกว่าตัวคำสั่ง — ทำผิดลำดับเมื่อไรคุณจะถูกล็อกอยู่ข้างนอก
นี่คือลำดับที่ปลอดภัยสำหรับ Ubuntu 22.04/24.04 และ Debian 12
1. สร้างผู้ใช้
ในฐานะ root:
adduser deploy
usermod -aG sudo deploy
adduser จะถามรหัสผ่านและข้อมูลเสริมบางอย่าง (กด Enter ผ่านไปได้เลย) เลือกรหัสผ่านจริงจัง เพราะคุณจะต้องพิมพ์มันตอนใช้ sudo บน image Debian แบบมินิมอล ถ้าไม่มีคำสั่งนี้ให้รัน apt install -y sudo ก่อน
2. ให้ SSH key กับผู้ใช้
วิธีที่ง่ายที่สุดคือคัดลอก key ที่อนุญาตของ root โดยรักษาความเป็นเจ้าของให้ถูกต้อง:
rsync --archive --chown=deploy:deploy /root/.ssh /home/deploy
ถ้าอยากทำเอง:
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
สิทธิ์ไฟล์ที่ผิดคือเหตุผลคลาสสิกที่การล็อกอินด้วย key ล้มเหลวแบบเงียบๆ SSH จะไม่สนใจ authorized_keys ที่ผู้ใช้อื่นเขียนได้
3. ทดสอบก่อนเปลี่ยนอะไร
เปิดเซสชัน root ค้างไว้ ในเทอร์มินัล ใหม่:
ssh -p 22 deploy@203.0.113.10
sudo whoami
ใช้ IP และพอร์ตของคุณเอง — ถ้าเป็นแพ็กเกจ NAT คือพอร์ต SSH ส่วนตัวจากแดชบอร์ด ถ้า sudo whoami พิมพ์ root ออกมา แปลว่าเรียบร้อย ถ้าล็อกอินไม่ผ่าน คุณยังมีหน้าต่าง root ไว้แก้
4. ปิดการล็อกอิน root
ถึงเวลาปิดประตู สร้างไฟล์ drop-in เล็กๆ แทนการแก้ไฟล์ตั้งค่าหลัก:
cat > /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
EOF
sshd -t && systemctl reload ssh
sshd -t ตรวจไวยากรณ์ก่อน การตั้งค่าที่พังบวกกับ reload คือเส้นทางที่ทำให้หลายคนต้องไปพึ่งคอนโซล PasswordAuthentication no จะมีความหมายก็ต่อเมื่อการล็อกอินด้วย key ใช้ได้กับผู้ใช้ใหม่แล้ว — ซึ่งคุณเพิ่งทดสอบไป
เปิดเทอร์มินัลอีกอันแล้วยืนยันว่า root ถูกปฏิเสธและ deploy ยังเข้าได้ จากนั้นค่อยปิดเซสชัน root เก่า
5. ทางเลือก: sudo ไม่ต้องใส่รหัสผ่านสำหรับระบบอัตโนมัติ
ถ้าสคริปต์ deploy ต้องใช้ sudo โดยไม่ถาม ให้สิทธิ์แค่นั้นพอดี ไม่ต้องกว้างกว่านั้น:
visudo -f /etc/sudoers.d/deploy
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
พูดตรงๆ NOPASSWD: ALL ดูน่าใช้ แต่มันหมายความว่า key ที่ถูกขโมยเท่ากับ root จำกัดไว้แค่คำสั่งที่ระบบอัตโนมัติรัน
ถ้ามีอะไรผิดพลาด
เว็บคอนโซลในแดชบอร์ดไม่ขึ้นกับ SSH หรือไฟร์วอลล์ เข้าจากตรงนั้น แก้ไฟล์ใน /etc/ssh/sshd_config.d/ แล้ว reload จบ ขั้นตอนกู้คืนทั้งหมดเราเขียนไว้ในวิธีกลับเข้า VPS ที่ถูกล็อก
ทำอะไรต่อ
- เปลี่ยนไปใช้การล็อกอินด้วย key อย่างเดียวให้เรียบร้อย: การยืนยันตัวตนด้วย SSH key
- ลดเสียงรบกวนจากการสุ่มรหัสผ่าน: fail2ban
- ทำเรื่องพื้นฐานที่เหลือด้วยเช็กลิสต์ความปลอดภัยสำหรับ VPS ใหม่
ตัวเลือกการเข้าถึงของแต่ละแพ็กเกจอยู่ในเอกสารการเข้าถึง แม้แต่ Nano ราคา $3 ก็สมควรมีผู้ใช้ที่ไม่ใช่ root — นี่คือการอัปเกรดความปลอดภัยที่ถูกที่สุด
ความคิดเห็น
ยังไม่มีความคิดเห็น เป็นคนแรกสิ