ما روشی را برای دسترسی اضطراری به میزبان های SSH با کلیدهای سخت افزاری تجویز می کنیم

ما روشی را برای دسترسی اضطراری به میزبان های SSH با کلیدهای سخت افزاری تجویز می کنیم

در این پست، روشی را برای دسترسی اضطراری به میزبان های SSH با استفاده از کلیدهای امنیتی سخت افزاری آفلاین توسعه خواهیم داد. این تنها یک رویکرد است و شما می توانید آن را مطابق با نیازهای خود تطبیق دهید. ما مجوز گواهی SSH را برای میزبان خود روی کلید امنیتی سخت افزار ذخیره می کنیم. این طرح تقریباً روی هر OpenSSH، از جمله SSH با یک ورود به سیستم، کار خواهد کرد.

این همه برای چیست؟ خوب، این آخرین راه حل است. این یک درب پشتی است که به شما امکان می دهد به سرور خود دسترسی پیدا کنید، در صورتی که به دلایلی هیچ چیز دیگری کار نمی کند.

چرا از گواهی ها به جای کلیدهای عمومی/خصوصی برای دسترسی اضطراری استفاده کنیم؟

  • برخلاف کلیدهای عمومی، گواهینامه ها می توانند عمر بسیار کوتاهی داشته باشند. می توانید گواهینامه ای تولید کنید که 1 دقیقه یا حتی 5 ثانیه اعتبار دارد. پس از این مدت، گواهی برای اتصالات جدید غیر قابل استفاده خواهد شد. این برای دسترسی اضطراری ایده آل است.
  • شما می توانید برای هر حساب کاربری در هاست خود گواهی بسازید و در صورت لزوم چنین گواهینامه های یکبار مصرف را برای همکاران ارسال کنید.

به چه چیزی احتیاج دارید

  • کلیدهای امنیتی سخت افزاری که از کلیدهای مقیم پشتیبانی می کنند.
    کلیدهای مقیم کلیدهای رمزنگاری هستند که به طور کامل در کلید امنیتی ذخیره می شوند. گاهی اوقات آنها توسط یک پین الفبایی محافظت می شوند. بخش عمومی کلید مقیم را می توان از کلید امنیتی به صورت اختیاری همراه با دسته کلید خصوصی صادر کرد. به عنوان مثال، کلیدهای USB سری 5 Yubikey از کلیدهای مقیم پشتیبانی می کنند. توصیه می شود که آنها فقط برای دسترسی اضطراری به میزبان در نظر گرفته شوند. برای این پست من فقط از یک کلید استفاده می کنم، اما شما باید یک کلید اضافی برای پشتیبان گیری داشته باشید.
  • مکانی امن برای نگهداری آن کلیدها.
  • OpenSSH نسخه 8.2 یا بالاتر در رایانه محلی شما و سرورهایی که می خواهید به آنها دسترسی اضطراری داشته باشید. اوبونتو 20.04 با OpenSSH 8.2 عرضه می شود.
  • (اختیاری، اما توصیه می شود) یک ابزار CLI برای بررسی گواهی ها.

پرورش

ابتدا باید یک مرجع صدور گواهینامه ایجاد کنید که روی کلید امنیتی سخت افزاری قرار دارد. کلید را وارد کرده و اجرا کنید:

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

به عنوان یک نظر (-C) اشاره کردم [ایمیل محافظت شده]بنابراین فراموش نکنید که این مرجع گواهی متعلق به کدام کلید امنیتی است.

علاوه بر افزودن کلید به Yubikey، دو فایل به صورت محلی تولید می شود:

  1. sk-user-ca، دسته کلیدی که به کلید خصوصی ذخیره شده در کلید امنیتی اشاره دارد،
  2. 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 دقیقه نیاز دارم. شما می توانید آن را به روش خود انجام دهید.

$ 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 برای کاربر اوبونتو) اگر از آن برای دسترسی اضطراری استفاده کرده اید.

دسترسی اضطراری: برنامه اقدام

کلید امنیتی را پیست کرده و دستور را اجرا کنید:

$ 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 اجرا کنید تا آن را دور بزنید. اگر نیاز به ارسال گواهی برای همکار دارید، ساده ترین و مطمئن ترین گزینه است کرمچاله جادویی. برای انجام این کار، فقط به دو فایل نیاز دارید - در مورد ما، اورژانس و اورژانس-cert.pub.

چیزی که من در مورد این رویکرد دوست دارم پشتیبانی سخت افزاری است. شما می توانید کلیدهای امنیتی خود را در گاوصندوق قرار دهید و آنها به جایی نخواهند رسید.

در حقوق تبلیغات

سرورهای حماسی - آیا VPS ارزان با پردازنده های قدرتمند AMD، فرکانس هسته CPU تا 3.4 گیگاهرتز. حداکثر پیکربندی به شما امکان می دهد تقریباً هر مشکلی را حل کنید - 128 هسته پردازنده، 512 گیگابایت رم، 4000 گیگابایت NVMe. به ما بپیوند!

ما روشی را برای دسترسی اضطراری به میزبان های SSH با کلیدهای سخت افزاری تجویز می کنیم

منبع: www.habr.com

اضافه کردن نظر