ค้นหาเว็บไซต์

วิธีเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัย (2FA) สำหรับ SSH บน Linux


ในบทความนี้ เราจะแสดงวิธีเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัย (2FA) สำหรับการเข้าสู่ระบบ SSH บน Linux โดยใช้ Google PAM (Pluggable Authentication Module) และ Microsoft Authenticator แอปบนอุปกรณ์เคลื่อนที่ . 2FA ช่วยให้คุณเพิ่มชั้นความปลอดภัยพิเศษเมื่อคุณรับรองความถูกต้องบนโฮสต์ Linux ผ่าน SSH หลังจากเปิดใช้งาน 2FA คุณจะต้องป้อนรหัสผ่านดิจิทัลแบบใช้ครั้งเดียว (TOTP) จากสมาร์ทโฟนของคุณ นอกเหนือจากชื่อผู้ใช้และรหัสผ่านของคุณ (หรือคีย์ RSA) ไปยัง SSH ใน Linux

ติดตั้งแอปมือถือ Microsoft Authenticator บนสมาร์ทโฟนของคุณ (มีให้บริการทั้งใน Google Store และ App Store)

ในคำแนะนำนี้ ฉันได้เลือก Microsoft Authenticator เนื่องจากฉันใช้ Microsoft Authenticator อยู่แล้วสำหรับการรับรองความถูกต้อง MFA ใน Azure หากต้องการ คุณสามารถใช้ Google Authenticator แทนได้

ตอนนี้คุณต้องติดตั้งและกำหนดค่า Google PAM บนโฮสต์ Linux ของคุณ:

  1. เชื่อมต่อกับโฮสต์ Linux ของคุณผ่าน SSH;

  2. ติดตั้ง Google PAM Authenticator โดยใช้ตัวจัดการแพ็คเกจของคุณ:
    Debian/Ubuntu:

    sudo apt-get install libpam-google-authenticator 

    RHEL/CentOS/Fedora:

    yum install google-authenticator

  3. เรียกใช้คำสั่ง:

    google-authenticator
  4. เครื่องมือจะสร้างและแสดงรหัส QR ในคอนโซล:

  5. เรียกใช้แอป Microsoft Authenticator บนสมาร์ทโฟนของคุณ เลือก เพิ่มบัญชี -> บัญชีส่วนตัว -> สแกน QR Code;

  6. สแกนรหัส QR ด้วยแอพ รายการใหม่สำหรับชื่อผู้ใช้และเซิร์ฟเวอร์ของคุณจะปรากฏในแอพ Authenticator คุณจะใช้รายการนี้เพื่อรับรหัสผ่านครั้งเดียวเพื่อเชื่อมต่อกับโฮสต์ของคุณ

  7. โปรดทราบว่ารหัสลับและรหัสฉุกเฉินจะแสดงในคอนโซล Linux ของคุณ

    คุณจะต้องใช้รหัสเหล่านี้เพื่อเชื่อมต่อกับโฮสต์ของคุณหากคุณทำสมาร์ทโฟนหาย/พัง เก็บไว้ในที่ปลอดภัย!

  8. จากนั้น google-authenticator จะแสดงคำถามอื่น:

  9. คุณต้องการให้โทเค็นการรับรองความถูกต้องตามเวลาหรือไม่

    Y -> Enter
  10. คุณต้องการให้ฉันอัปเดตไฟล์ “/home/sysops/.google_authenticator ” ไหม

    Y -> Enter
  11. คุณต้องการไม่อนุญาตให้ใช้โทเค็นการตรวจสอบสิทธิ์เดียวกันหลายครั้งหรือไม่

    Y -> Enter
  12. โดยค่าเริ่มต้น โทเค็นจะใช้งานได้ 30 วินาที…

    Y -> Enter

    ตามค่าเริ่มต้น โทเค็นแบบใช้ครั้งเดียวจะเปลี่ยนทุกๆ 30 วินาที นี่เป็นตัวเลือกที่ดีที่สุดสำหรับกรณีส่วนใหญ่ อย่างไรก็ตาม สิ่งสำคัญคือโฮสต์ Linux และสมาร์ทโฟนของคุณต้องซิงโครไนซ์เวลา

  13. คุณต้องการเปิดใช้งานการจำกัดอัตราหรือไม่

    Y -> Enter

    คุณสามารถกำหนดค่าการตั้งค่าทั้งหมด:

    $ google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 30

    -t - เปิดใช้งานการเข้าสู่ระบบโดยใช้รหัสแบบใช้ครั้งเดียว
    -f - บันทึกการกำหนดค่าไปที่ ~/.google_authenticator
    -d - ปฏิเสธการใช้รหัสก่อนหน้า
    -w 3 - อนุญาตให้ใช้โทเค็นก่อนหน้าหนึ่งรายการและโทเค็นที่ตามมาหนึ่งรายการ (หากเวลาไม่ตรงกัน)
    -e 5 - สร้างรหัสฉุกเฉิน 5 รหัส
    -r 3 -R 30 - อนุญาตให้ใช้การเข้าสู่ระบบไม่เกิน 3 ครั้งทุกๆ 30 วินาที

  • จากนั้นเพิ่มคำสั่งต่อไปนี้ใน /etc/pam.d/sshd:

    auth required pam_google_authenticator.so nullok

    ตัวเลือก nullok ช่วยให้ผู้ใช้ที่ไม่ได้ตั้งค่าการตรวจสอบสิทธิ์แบบสองปัจจัยเข้าสู่ระบบโดยใช้ชื่อผู้ใช้และรหัสผ่าน หลังจากการกำหนดค่าและการทดสอบ 2FA ขอแนะนำให้ปิดใช้งานตัวเลือกที่ต้องใช้การรับรองความถูกต้องด้วยสองปัจจัย

  • จากนั้นแก้ไข /etc/ssh/sshd_config:

    sudo mcedit /etc/ssh/sshd_config
  • เปลี่ยน

    ChallengeResponseAuthentication

    มูลค่าถึง

    Yes
    ChallengeResponseAuthentication yes
  • บันทึกการเปลี่ยนแปลงใน sshd_config และรีสตาร์ท sshd:

    service ssh restart

  • จากนั้นลองเชื่อมต่อกับโฮสต์ Linux ของคุณผ่าน SSH คุณจะถูกขอให้ป้อนรหัสยืนยันก่อนที่จะป้อนรหัสผ่าน

    เปิดแอป Authenticator บนสมาร์ทโฟนและค้นหาผู้ใช้โฮสต์ Linux ของคุณ ป้อนรหัสรหัสผ่านแบบใช้ครั้งเดียว 6 อักขระที่ Authenticator สร้างให้คุณในคอนโซล

    โปรดทราบว่ารหัสผ่านแบบใช้ครั้งเดียวใช้ได้ในระยะเวลาจำกัด (ค่าเริ่มต้นคือ 30 วินาที) หากคุณป้อนรหัสที่ถูกต้อง คุณจะได้รับแจ้งให้ป้อนรหัสผ่านผู้ใช้ Linux

    หากเข้าสู่ระบบสำเร็จ บรรทัดต่อไปนี้จะปรากฏในบันทึกการรับรองความถูกต้อง:

    cat /var/log/auth.log
    Jul 20 11:12:22 srvubun01 sshd(pam_google_authenticator)[6242]: Accepted google_authenticator for sysops

    หากป้อนรหัสไม่ถูกต้อง บันทึกจะแสดงข้อผิดพลาด:

    Jul 20 11:14:20 srvubun01 sshd(pam_google_authenticator)[6436]: Invalid verification code for sysops
    Jul 20 11:14:22 srvubun01 sshd[6436]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.10.15 user=sysops

    หากคุณต้องการใช้ 2FA ร่วมกับการตรวจสอบคีย์ SSH ให้เพิ่มคำสั่งต่อไปนี้ใน /etc/ssh/sshd_config:

    PasswordAuthentication no
    PubkeyAuthentication yes
    AuthenticationMethods publickey,keyboard-interactive

    บทความที่เกี่ยวข้อง