เรากำหนดขั้นตอนสำหรับการเข้าถึงโฮสต์ SSH ในกรณีฉุกเฉินด้วยคีย์ฮาร์ดแวร์

เรากำหนดขั้นตอนสำหรับการเข้าถึงโฮสต์ SSH ในกรณีฉุกเฉินด้วยคีย์ฮาร์ดแวร์

ในโพสต์นี้ เราจะพัฒนาขั้นตอนสำหรับการเข้าถึงโฮสต์ SSH ในกรณีฉุกเฉินโดยใช้คีย์ความปลอดภัยของฮาร์ดแวร์แบบออฟไลน์ นี่เป็นเพียงแนวทางเดียว และคุณสามารถปรับเปลี่ยนให้เหมาะกับความต้องการของคุณได้ เราจะจัดเก็บผู้ออกใบรับรอง SSH สำหรับโฮสต์ของเราไว้ในคีย์ความปลอดภัยของฮาร์ดแวร์ รูปแบบนี้จะใช้ได้กับ OpenSSH เกือบทุกประเภท รวมถึง SSH ที่มีการลงชื่อเพียงครั้งเดียว

ทั้งหมดนี้มีไว้เพื่ออะไร? นี่เป็นทางเลือกสุดท้าย นี่คือแบ็คดอร์ที่จะช่วยให้คุณสามารถเข้าถึงเซิร์ฟเวอร์ของคุณได้ เมื่อไม่มีอะไรทำงานด้วยเหตุผลบางประการ

เหตุใดจึงใช้ใบรับรองแทนคีย์สาธารณะ/ส่วนตัวสำหรับการเข้าถึงในกรณีฉุกเฉิน

  • ใบรับรองอาจมีอายุการใช้งานที่สั้นมากซึ่งต่างจากคีย์สาธารณะ คุณสามารถสร้างใบรับรองที่ถูกต้องเป็นเวลา 1 นาทีหรือ 5 วินาทีก็ได้ หลังจากช่วงเวลานี้ ใบรับรองจะใช้ไม่ได้กับการเชื่อมต่อใหม่ เหมาะสำหรับการเข้าถึงในกรณีฉุกเฉิน
  • คุณสามารถสร้างใบรับรองสำหรับบัญชีใดก็ได้บนโฮสต์ของคุณ และหากจำเป็น ให้ส่งใบรับรอง “แบบครั้งเดียว” ดังกล่าวให้กับเพื่อนร่วมงาน

คุณต้องการอะไร

  • คีย์ความปลอดภัยของฮาร์ดแวร์ที่รองรับคีย์ประจำ
    คีย์ถิ่นที่อยู่คือคีย์เข้ารหัสลับที่จัดเก็บไว้ในคีย์ความปลอดภัยทั้งหมด บางครั้งพวกเขาได้รับการป้องกันด้วย PIN ตัวอักษรและตัวเลข ส่วนสาธารณะของรหัสถิ่นที่อยู่สามารถส่งออกได้จากรหัสความปลอดภัย หรือจะใช้ร่วมกับหมายเลขอ้างอิงรหัสส่วนตัวก็ได้ ตัวอย่างเช่น คีย์ USB ของ Yubikey 5 series รองรับคีย์ Resident ขอแนะนำว่ามีไว้สำหรับการเข้าถึงโฮสต์ในกรณีฉุกเฉินเท่านั้น สำหรับโพสต์นี้ ฉันจะใช้เพียงคีย์เดียว แต่คุณควรมีอีกหนึ่งคีย์สำหรับการสำรองข้อมูล
  • สถานที่ที่ปลอดภัยสำหรับเก็บกุญแจเหล่านั้น
  • OpenSSH เวอร์ชัน 8.2 ขึ้นไปบนเครื่องคอมพิวเตอร์ของคุณและบนเซิร์ฟเวอร์ที่คุณต้องการให้เข้าถึงในกรณีฉุกเฉิน Ubuntu 20.04 มาพร้อมกับ OpenSSH 8.2
  • (เป็นทางเลือก แต่แนะนำ) เครื่องมือ CLI สำหรับตรวจสอบใบรับรอง

การอบรม

ขั้นแรก คุณต้องสร้างผู้ออกใบรับรองซึ่งจะอยู่ที่คีย์ความปลอดภัยของฮาร์ดแวร์ ใส่กุญแจแล้วรัน:

$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]

ตามความคิดเห็น (-C) ฉันระบุ [ป้องกันอีเมล]ดังนั้นคุณจึงไม่ลืมว่ารหัสความปลอดภัยใดที่เป็นของผู้ออกใบรับรองนี้

นอกเหนือจากการเพิ่มคีย์ลงใน Yubikey แล้ว ไฟล์ XNUMX ไฟล์จะถูกสร้างขึ้นในเครื่อง:

  1. sk-user-ca ซึ่งเป็นตัวจัดการคีย์ที่อ้างถึงคีย์ส่วนตัวที่เก็บไว้ในคีย์ความปลอดภัย
  2. sk-user-ca.pub ซึ่งจะเป็นคีย์สาธารณะสำหรับผู้ออกใบรับรองของคุณ

แต่ไม่ต้องกังวล Yubikey จะเก็บคีย์ส่วนตัวอื่นที่ไม่สามารถเรียกคืนได้ ดังนั้นทุกอย่างจึงเชื่อถือได้ที่นี่

บนโฮสต์ ในฐานะรูท ให้เพิ่ม (หากคุณยังไม่ได้ดำเนินการ) สิ่งต่อไปนี้ในการกำหนดค่า SSHD ของคุณ (/etc/ssh/sshd_config):

TrustedUserCAKeys /etc/ssh/ca.pub

จากนั้นบนโฮสต์ ให้เพิ่มคีย์สาธารณะ (sk-user-ca.pub) ลงใน /etc/ssh/ca.pub

รีสตาร์ทดีมอน:

# /etc/init.d/ssh restart

ตอนนี้เราสามารถลองเข้าถึงโฮสต์ได้แล้ว แต่ก่อนอื่นเราจำเป็นต้องมีใบรับรอง สร้างคู่คีย์ที่จะเชื่อมโยงกับใบรับรอง:

$ ssh-keygen -t ecdsa -f emergency

ใบรับรองและคู่ SSH
บางครั้งการใช้ใบรับรองแทนคู่คีย์สาธารณะ/ส่วนตัวอาจเป็นเรื่องที่น่าสนใจ แต่ใบรับรองเพียงอย่างเดียวไม่เพียงพอที่จะรับรองความถูกต้องของผู้ใช้ ใบรับรองแต่ละใบยังมีรหัสส่วนตัวที่เกี่ยวข้องด้วย นี่คือสาเหตุที่เราต้องสร้างคู่คีย์ "ฉุกเฉิน" นี้ก่อนที่เราจะออกใบรับรองให้ตนเอง สิ่งสำคัญคือเราแสดงใบรับรองที่ลงนามไปยังเซิร์ฟเวอร์ โดยระบุคู่คีย์ที่เรามีคีย์ส่วนตัว

ดังนั้นการแลกเปลี่ยนคีย์สาธารณะจึงยังมีชีวิตอยู่และดี ใช้งานได้แม้จะมีใบรับรองก็ตาม ใบรับรองช่วยลดความจำเป็นที่เซิร์ฟเวอร์จะต้องจัดเก็บคีย์สาธารณะ

ต่อไป ให้สร้างใบรับรองเอง ฉันต้องการการอนุญาตผู้ใช้ Ubuntu ในช่วงเวลา 10 นาที คุณสามารถทำได้ในแบบของคุณ

$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency

คุณจะถูกขอให้ลงนามใบรับรองโดยใช้ลายนิ้วมือของคุณ คุณสามารถเพิ่มชื่อผู้ใช้เพิ่มเติมได้โดยคั่นด้วยเครื่องหมายจุลภาค เช่น -n ubuntu,carl,ec2-user

เพียงเท่านี้คุณก็ได้รับใบรับรองแล้ว! ถัดไปคุณต้องระบุสิทธิ์ที่ถูกต้อง:

$ chmod 600 emergency-cert.pub

หลังจากนี้ คุณสามารถดูเนื้อหาของใบรับรองของคุณได้:

$ step ssh inspect emergency-cert.pub

นี่คือลักษณะของฉัน:

emergency-cert.pub
        Type: [email protected] user certificate
        Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
        Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
        Key ID: "test-key"
        Serial: 0
        Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
        Principals:
                ubuntu
        Critical Options: (none)
        Extensions:
                permit-X11-forwarding
                permit-agent-forwarding
                permit-port-forwarding
                permit-pty
                permit-user-rc

คีย์สาธารณะในที่นี้คือคีย์ฉุกเฉินที่เราสร้างขึ้น และ sk-user-ca เชื่อมโยงกับผู้ออกใบรับรอง

ในที่สุดเราก็พร้อมที่จะรันคำสั่ง SSH แล้ว:


$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$

  1. ตอนนี้คุณสามารถสร้างใบรับรองสำหรับผู้ใช้บนโฮสต์ที่เชื่อถือผู้ออกใบรับรองของคุณได้
  2. คุณสามารถลบเหตุฉุกเฉินได้ คุณสามารถบันทึก sk-user-ca ได้ แต่คุณไม่จำเป็นต้องบันทึกเนื่องจากอยู่บนคีย์ความปลอดภัยด้วย คุณอาจต้องการลบคีย์สาธารณะ PEM ดั้งเดิมออกจากโฮสต์ของคุณ (เช่นใน ~/.ssh/authorized_keys สำหรับผู้ใช้ Ubuntu) หากคุณใช้เพื่อการเข้าถึงในกรณีฉุกเฉิน

การเข้าถึงเหตุฉุกเฉิน: แผนปฏิบัติการ

วางคีย์ความปลอดภัยแล้วรันคำสั่ง:

$ ssh-add -K

สิ่งนี้จะเพิ่มคีย์สาธารณะและตัวอธิบายคีย์ของผู้ออกใบรับรองให้กับตัวแทน SSH

ตอนนี้ส่งออกกุญแจสาธารณะเพื่อสร้างใบรับรอง:

$ ssh-add -L | tail -1 > sk-user-ca.pub

สร้างใบรับรองที่มีวันหมดอายุ เช่น ไม่เกินหนึ่งชั่วโมง:

$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pub

และตอนนี้ SSH อีกครั้ง:

$ ssh -i emergency username@host

หากไฟล์ .ssh/config ของคุณทำให้เกิดปัญหาขณะเชื่อมต่อ คุณสามารถเรียกใช้ ssh ด้วยตัวเลือก -F none เพื่อเลี่ยงผ่านได้ หากคุณต้องการส่งใบรับรองให้กับเพื่อนร่วมงาน ตัวเลือกที่ง่ายและปลอดภัยที่สุดคือ รูหนอนวิเศษ. ในการดำเนินการนี้ คุณจำเป็นต้องมีเพียงสองไฟล์ - ในกรณีของเราคือ Emergency และ Emergency-cert.pub

สิ่งที่ฉันชอบเกี่ยวกับแนวทางนี้คือการสนับสนุนฮาร์ดแวร์ คุณสามารถใส่คีย์ความปลอดภัยไว้ในตู้นิรภัยได้ โดยคีย์จะไม่ไปไหนทั้งนั้น

เป็นโฆษณา

เซิร์ฟเวอร์มหากาพย์ - เป็น VPS ราคาถูก ด้วยโปรเซสเซอร์อันทรงพลังจาก AMD ความถี่คอร์ CPU สูงถึง 3.4 GHz การกำหนดค่าสูงสุดช่วยให้คุณสามารถแก้ปัญหาได้เกือบทุกปัญหา - คอร์ CPU 128 คอร์, RAM 512 GB, NVMe 4000 GB เข้าร่วมกับเรา!

เรากำหนดขั้นตอนสำหรับการเข้าถึงโฮสต์ SSH ในกรณีฉุกเฉินด้วยคีย์ฮาร์ดแวร์

ที่มา: will.com

เพิ่มความคิดเห็น