ฉันพยายามทำสิ่งต่อไปนี้บนเซิร์ฟเวอร์ OpenBSD 6.9 ของฉัน:
- ห้ามใช้กุญแจทั้งหมดยกเว้น
ssh-ed25519
หนึ่งในทั้งสอง เซิร์ฟเวอร์ และ ลูกค้า ด้าน
- จำกัด
ssh-keygen -A
เพื่อสร้างคีย์โดยผู้มีอำนาจเท่านั้น ssh-ed25519
อัลกอริทึมและไม่มีอะไรอื่น
เพื่อให้บรรลุเป้าหมายนี้ ฉันได้เพิ่มบรรทัดต่อไปนี้ในของฉัน sshd_config
:
โฮสต์คีย์ /etc/ssh/ssh_host_ed25519_key
CASignatureอัลกอริทึม ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
อัลกอริทึมของ HostKey ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
ฉันได้เพิ่มบรรทัดต่อไปนี้ในของฉันด้วย ssh_config
:
CASignatureอัลกอริทึม ssh-ed25519
HostbasedAcceptedKeyTypes ssh-ed25519
อัลกอริทึมของ HostKey ssh-ed25519
PubkeyAcceptedKeyTypes ssh-ed25519
ฉันได้ลบคีย์ทั้งหมดแล้ว เหลือแต่คีย์ที่ได้รับอนุญาต
รีสตาร์ท sshd:
# rcctl รีสตาร์ท sshd
sshd (ตกลง)
sshd (ตกลง)
หลังจากตรวจสอบว่ามีการใช้การตั้งค่าของฉันหรือไม่โดยการรันคำสั่งต่อไปนี้:
# ssh -Q HostbasedAcceptedAlgorithms
# ssh -Q HostKeyอัลกอริทึม
# ssh -Q PubkeyAcceptedAlgorithms
สำหรับความประหลาดใจของฉัน นี่คือสิ่งที่พวกเขาทั้งหมดกลับมาพร้อมกับ:
ssh-ed25519
[email protected]
[email protected]
[email protected]
ssh-rsa
rsa-sha2-256
rsa-sha2-512
ssh-dss
ecdsa-sha2-nistp256
ecdsa-sha2-nistp384
ecdsa-sha2-nistp521
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
กล่าวอีกนัยหนึ่ง ข้อจำกัดที่สำคัญจะถูกละเว้น
เพื่อความปลอดภัย ฉันได้รีสตาร์ทเซิร์ฟเวอร์แล้วด้วยซ้ำ แต่ก็ไม่มีความแตกต่างกัน
วิธีแก้ปัญหาที่เป็นไปได้คือการลบไฟล์สำคัญทั้งหมดยกเว้นไฟล์ที่ได้รับอนุญาต อย่างไรก็ตามสคริปต์เริ่มต้น /etc/rc
มีเส้น ssh-keygen -A
ซึ่งสร้างคีย์ ssh ที่หายไปทั้งหมดใหม่หลังจากรีบูตระบบทุกครั้ง ก่อนที่ sshd daemon จะเริ่มทำงาน รวมถึงอัลกอริทึมต้องห้าม!
ดังนั้นการถอดกุญแจออกจึงไม่สามารถแก้ปัญหาได้
เพื่อเป็นวิธีแก้ปัญหาเพิ่มเติม ฉันสามารถลบไฟล์ ssh-keygen -A
บรรทัดจากสคริปต์เริ่มต้นหรือแทนที่ด้วยอัลกอริทึมการสร้างคีย์ที่กำหนดเองของฉัน แต่นั่นจะนำไปสู่จุดเริ่มต้นทั้งหมด: ต้องจัดการกับปัญหานี้ซ้ำแล้วซ้ำอีก เช่น หลังจากการอัปเดตระบบทุกครั้ง เมื่อใดก็ตามที่ทีม OpenBSD เผยแพร่เวอร์ชันใหม่ของ /etc/rc
. การนำสายนั้นออกโดยอัตโนมัติและทดสอบวิธีแก้ปัญหาที่เลอะเทอะบนเซิร์ฟเวอร์จำนวนมากนั้นทำได้ยาก และอาจนำไปสู่ความล้มเหลวของเครือข่ายขนาดใหญ่หากมีสิ่งผิดปกติเกิดขึ้น
ดังนั้นฉันจึงดำเนินการตรวจสอบต่อไปและขุดค้นซอร์สโค้ดของ ssh-keygen
. ฉันพบว่ามันเป็นไปไม่ได้ที่จะจำกัดพฤติกรรมของ -ก
เปลี่ยนจากภายนอกเช่น ผ่านไฟล์ปรับแต่ง มันไม่ได้ทำการทดสอบเบื้องต้นด้วยซ้ำว่าคีย์ได้รับอนุญาตหรือไม่ มันแค่สร้างคีย์ตามรายการของอัลกอริทึมจากอาร์เรย์ฮาร์ดโค้ด วิธีเดียวที่จะหลีกเลี่ยงสิ่งนี้คือแก้ไข คอมไพล์ใหม่ และใช้ตัวแยกแบบกำหนดเองของ ssh-keygen
แต่ฉันจะต้องจัดการกับมันหลังจากการอัพเดท OpenSSH ทุกครั้ง...
ฉันพบวิธีแก้ปัญหาบางส่วนสำหรับระบบปฏิบัติการอื่น แต่ไม่ใช่สำหรับ OpenBSD
ใครช่วยชี้ให้ฉันเห็นวิธีแก้ปัญหาที่เหมาะสมได้ไหม ทำไมของฉัน sshd_config
และ ssh_config
ข้อจำกัดที่สำคัญจะถูกละเว้นและวิธีรับ ssh-keygen -A
หยุดสร้างคีย์ด้วยอัลกอริทึมต้องห้าม?
ก่อนที่จะมีใครถาม: OpenSSH จะใช้การตั้งค่าอื่นๆ ทั้งหมดในไฟล์ปรับแต่งทั้งสองไฟล์ ดังนั้นไฟล์ปรับแต่งเหล่านี้จึงเป็นไฟล์จริงที่กำลังโหลดอยู่
ขอบคุณมากสำหรับคำตอบที่เป็นประโยชน์ทั้งหมด