Энэ нийтлэлд бид техник хангамжийн аюулгүй байдлын түлхүүрүүдийг офлайнаар ашиглан SSH хостуудад яаралтай хандах журмыг боловсруулах болно. Энэ бол зөвхөн нэг арга бөгөөд та үүнийг өөрийн хэрэгцээнд тохируулан өөрчилж болно. Бид хостуудын SSH гэрчилгээний эрхийг техник хангамжийн аюулгүй байдлын түлхүүр дээр хадгалах болно. Энэ схем нь бараг бүх OpenSSH дээр ажиллах болно, үүнд нэг удаагийн SSH орно.
Энэ бүхэн юуны төлөө вэ? За, энэ бол эцсийн сонголт юм. Энэ бол ямар нэг шалтгаанаар өөр юу ч ажиллахгүй үед сервертээ нэвтрэх боломжийг олгох арын хаалга юм.
Яаралтай хандахад нийтийн/хувийн түлхүүрийн оронд яагаад гэрчилгээ ашиглах ёстой вэ?
- Нийтийн түлхүүрээс ялгаатай нь гэрчилгээ нь маш богино хугацаатай байдаг. Та 1 минут эсвэл бүр 5 секундын хугацаанд хүчинтэй гэрчилгээ үүсгэж болно. Энэ хугацааны дараа гэрчилгээг шинэ холболтод ашиглах боломжгүй болно. Энэ нь яаралтай тусламжийн үйлчилгээ авахад тохиромжтой.
- Та өөрийн хостууд дээр дурын дансанд гэрчилгээ үүсгэж, шаардлагатай бол ийм "нэг удаагийн" гэрчилгээг хамт ажиллагсаддаа илгээж болно.
Чамд юу хэрэгтэй вэ
- Оршин суугч түлхүүрүүдийг дэмждэг техник хангамжийн аюулгүй байдлын түлхүүрүүд.
Суурин түлхүүрүүд нь аюулгүй байдлын түлхүүр дотор бүхэлдээ хадгалагддаг криптограф түлхүүрүүд юм. Заримдаа тэдгээрийг үсэг, тоон PIN кодоор хамгаалдаг. Оршин суугч түлхүүрийн нийтийн хэсгийг аюулгүй байдлын түлхүүрээс хувийн түлхүүрийн бариулын хамт экспортлох боломжтой. Жишээлбэл, Yubikey 5 цувралын USB түлхүүрүүд нь оршин суугч түлхүүрүүдийг дэмждэг. Эдгээр нь зөвхөн хост руу яаралтай хандахад зориулагдсан байхыг зөвлөж байна. Энэ нийтлэлд би зөвхөн нэг түлхүүр ашиглах болно, гэхдээ танд нөөцлөх нэмэлт түлхүүр байх ёстой. - Эдгээр түлхүүрүүдийг хадгалах аюулгүй газар.
- 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-д түлхүүр нэмэхээс гадна хоёр файлыг дотооддоо үүсгэнэ:
- sk-user-ca, аюулгүй байдлын түлхүүрт хадгалагдсан хувийн түлхүүрийг илэрхийлдэг түлхүүр бариул,
- sk-user-ca.pub, энэ нь таны гэрчилгээжүүлэх байгууллагын нийтийн түлхүүр болно.
Гэхдээ санаа зовох хэрэггүй, Yubikey нь өөр нууц түлхүүрийг хадгалдаг бөгөөд үүнийг олж авах боломжгүй. Тиймээс энд бүх зүйл найдвартай байдаг.
Хостууд дээр root болгон 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 хосууд
Заримдаа гэрчилгээг нийтийн/хувийн түлхүүрийн хослол болгон ашиглах нь сонирхол татдаг. Гэхдээ зөвхөн гэрчилгээ нь хэрэглэгчийг баталгаажуулахад хангалтгүй юм. Сертификат бүр түүнтэй холбоотой хувийн түлхүүртэй байдаг. Ийм учраас бид өөрсдөө гэрчилгээ олгохоосоо өмнө энэхүү "яаралтай" түлхүүрийн хослолыг бий болгох хэрэгтэй. Хамгийн гол нь бид гарын үсэг зурсан гэрчилгээг серверт үзүүлж, бидэнд хувийн түлхүүр байгаа түлхүүрийн хослолыг зааж өгөх явдал юм.Тиймээс нийтийн түлхүүрийн солилцоо амьд, сайн хэвээр байна. Энэ нь гэрчилгээтэй ч ажилладаг. Сертификатууд нь серверт нийтийн түлхүүр хадгалах хэрэгцээг арилгадаг.
Дараа нь гэрчилгээг өөрөө үүсгэ. Надад 10 минутын зайтай ubuntu хэрэглэгчийн зөвшөөрөл хэрэгтэй байна. Та үүнийг өөрийнхөөрөө хийж чадна.
$ 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:~$
- Та одоо өөрийн гэрчилгээний байгууллагад итгэдэг хост дээрх дурын хэрэглэгчдэд гэрчилгээ үүсгэх боломжтой.
- Та яаралтай тусламжийг арилгах боломжтой. Та sk-user-ca-г хадгалах боломжтой, гэхдээ энэ нь аюулгүй байдлын түлхүүр дээр байгаа тул үүнийг хийх шаардлагагүй. Хэрэв та яаралтай тусламжийн хандалтад ашигласан бол анхны PEM нийтийн түлхүүрийг (жишээ нь ubuntu хэрэглэгчийн ~/.ssh/authorized_keys дээр) хостуудаасаа устгахыг хүсэж болно.
Яаралтай тусламж: Үйл ажиллагааны төлөвлөгөө
Аюулгүй байдлын түлхүүрийг буулгаж, тушаалыг ажиллуулна уу:
$ 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 файл холбогдох үед асуудал үүсгэж байгаа бол та үүнийг тойрч гарахын тулд -F none сонголтоор ssh-г ажиллуулж болно. Хэрэв та хамтран ажиллагсаддаа гэрчилгээ илгээх шаардлагатай бол хамгийн хялбар бөгөөд найдвартай сонголт бол
Энэ аргын надад таалагдаж байгаа зүйл бол техник хангамжийн дэмжлэг юм. Та аюулгүй байдлын түлхүүрээ сейфэнд хийж болно, тэд хаашаа ч явахгүй.
Сурталчилгааны эрх
Эпик серверүүд Байна уу
Эх сурвалж: www.habr.com