ویرگول
ورودثبت نام
Vahiddsy
VahiddsyAn unlucky lover of electronics and stepped in Linux and its derivatives...
Vahiddsy
Vahiddsy
خواندن ۶ دقیقه·۴ ماه پیش

دسترسی به سرور با SSH Certificates

دسترسی به سرور از طریق گواهینامه‌های SSH (SSH Certificates) مزایای قابل توجهی نسبت به روش‌های سنتی احراز هویت مانند رمز عبور یا حتی احراز هویت مبتنی بر کلید SSH دارد. در ادامه به تفصیل این مزایا توضیح داده شده است:

۱. مدیریت مقیاس‌پذیر و آسان‌تر:

  • حذف نیاز به توزیع کلیدهای عمومی کاربر: در روش احراز هویت مبتنی بر کلید SSH، شما باید کلید عمومی هر کاربر را در فایل authorized_keys روی هر سروری که کاربر نیاز به دسترسی دارد، قرار دهید. با افزایش تعداد کاربران و سرورها، این کار به یک "سردرد مدیریتی" تبدیل می‌شود و مقیاس‌پذیر نیست. گواهینامه‌های SSH این مشکل را با معرفی یک نقطه اعتماد واحد (Certificate Authority یا CA) حل می‌کنند.

  • یک نقطه اعتماد واحد: به جای اینکه هر سرور به تک‌تک کلیدهای عمومی کاربران اعتماد کند، فقط کافی است که سرورها را به گونه‌ای پیکربندی کنید که به کلید عمومی CA شما اعتماد کنند. سپس CA می‌تواند کلیدهای عمومی کاربران را امضا کند و یک گواهینامه برای آن‌ها صادر کند. این امر فرآیند تأیید کلیدها را در مقیاس بزرگ تسهیل می‌کند.

  • مدیریت آسان known_hosts برای هاست‌ها: در محیط‌های بزرگ با تعداد زیادی سرور، مدیریت فایل known_hosts در سمت کلاینت می‌تواند دشوار باشد. با استفاده از گواهینامه‌های هاست، تنها کافی است که کلید عمومی CA را به فایل known_hosts اضافه کنید. سپس هر هاستی که کلید آن توسط این CA امضا شده باشد، به طور خودکار مورد اعتماد کلاینت قرار می‌گیرد، حتی اگر هاست جدیدی به شبکه اضافه شود. این کار نیاز به پذیرش دستی هر هاست جدید را از بین می‌برد.

۲. افزایش امنیت:

  • احراز هویت "فقط در زمان مورد نیاز" (Just-in-Time): گواهینامه‌های SSH می‌توانند برای مدت زمان محدودی اعتبار داشته باشند. این ویژگی به شما امکان می‌دهد تا دسترسی به سرورها را فقط برای مدت زمانی که گواهینامه معتبر است، فراهم کنید. به عنوان مثال، می‌توانید گواهینامه‌ای صادر کنید که فقط برای یک ساعت، پنج دقیقه، یا یک هفته معتبر باشد. این کار "پنجره فرصت" برای حملات را در صورت به خطر افتادن گواهینامه کوتاه می‌کند.

  • کاهش ریسک کلیدهای به خطر افتاده: با اعتبار زمانی محدود، اگر یک کلید خصوصی به همراه گواهینامه آن به خطر بیفتد، مهاجم تنها برای مدت زمان اعتبار گواهینامه می‌تواند به سیستم دسترسی داشته باشد. این موضوع، خطر ناشی از کلیدهای عمومی ناشناس در فایل authorized_keys را که ممکن است سال‌ها معتبر بمانند، کاهش می‌دهد.

  • تفکیک احراز هویت و مجوزدهی: گواهینامه‌های SSH به شما امکان می‌دهند که احراز هویت (اثبات اینکه کلاینت همان کسی است که ادعا می‌کند) و مجوزدهی (تعیین اینکه کلاینت چه کاری می‌تواند انجام دهد) را به طور جداگانه مدیریت کنید. این یک اصل مهم در طراحی سیستم‌های امنیتی است.

  • عدم نیاز به کپی کردن کلیدهای خصوصی: کلیدهای خصوصی کاربر هرگز نباید از سیستمی که در آن تولید شده‌اند خارج شوند. فقط کلید عمومی برای امضا شدن به CA ارسال می‌شود.

  • بهبود حسابرسی (Accountability): حتی اگر کاربران با یک حساب کاربری مشترک مانند root وارد شوند، OpenSSH می‌تواند اطلاعات دقیقی در مورد گواهینامه‌ای که برای احراز هویت استفاده شده است (مانند Key ID و Serial گواهینامه) ارائه دهد. این اطلاعات برای ردیابی دقیق اقدامات کاربران و انجام تحلیل‌های آماری بسیار مفید است.

۳. کنترل دسترسی دقیق با Principals و Extensions:

  • Principals (اصول دسترسی): گواهینامه‌های SSH از فیلدی به نام Principals برای تعیین هویت کاربر یا هاست استفاده می‌کنند. در گواهینامه‌های کاربر، این فیلد به حساب‌های کاربری که مجاز به استفاده از گواهینامه برای ورود هستند، اشاره دارد. می‌توانید یک یا چند Principal (که با کاما جدا می‌شوند) به یک گواهینامه اضافه کنید.

    • دسترسی به حساب‌های کاربری مشترک: این ویژگی به خصوص برای دسترسی به حساب‌های مشترک مانند root یا dba بسیار مفید است. شما می‌توانید یک گواهینامه را با یک Principal خاص (مثلاً zone-databases) امضا کنید. سپس با پیکربندی AuthorizedPrincipalsFile در sshd_config سرور (مثلاً /etc/ssh/auth_principals/%u)، می‌توانید تعیین کنید که کدام Principalها مجاز به دسترسی به کدام حساب کاربری محلی هستند.

    • نقش‌ها به عنوان Principals: در محیط‌های بزرگ، می‌توانید به جای لیست کردن تک‌تک کاربران، از نام "نقش‌ها" (roles) مانند sysadmin به عنوان Principals استفاده کنید. این امر مدیریت دسترسی را بسیار ساده‌تر می‌کند، زیرا کافی است نام نقش sysadmin را در فایل AuthorizedPrincipalsFile قرار دهید.

    • ارزیابی پویا: برای انعطاف‌پذیری بیشتر، می‌توانید از AuthorizedPrincipalsCommand استفاده کنید که به سرور اجازه می‌دهد لیست Principalهای مجاز را به صورت پویا (مثلاً از یک سرویس LDAP یا API) دریافت کند. این به مدیریت تغییرات پرسنلی و نقش‌ها در زمان واقعی کمک می‌کند.

  • Extensions (افزونه‌ها): گواهینامه‌ها می‌توانند شامل محدودیت‌های بیشتری باشند که مستقیماً در زمان امضا شدن به گواهینامه اضافه می‌شوند. این محدودیت‌ها با استفاده از گزینه -O در دستور ssh-keygen اعمال می‌شوند. برخی از این افزونه‌ها عبارتند از:

    • Forced Commands (فرمان‌های اجباری): می‌توانید گواهینامه‌ای صادر کنید که به کاربر اجازه دهد فقط یک فرمان خاص را روی سرور اجرا کند. این برای ارتباطات بین برنامه‌ها (app-to-app communication) بسیار مفید است، جایی که نیازی به دسترسی کامل به Shell نیست.

    • Source Address Restrictions (محدودیت آدرس منبع): می‌توانید دسترسی با گواهینامه را به یک محدوده CIDR خاص از آدرس‌های IP محدود کنید. این کار امنیت را با اطمینان از اینکه اتصال از یک مکان مورد انتظار است، افزایش می‌دهد.

    • غیرفعال کردن قابلیت‌های اضافی: می‌توانید افزونه‌های پیش‌فرض مانند permit-X11-forwarding، permit-agent-forwarding، permit-port-forwarding، permit-pty و permit-user-rc را غیرفعال کنید. این کار به شما امکان می‌دهد تا تونل‌سازی از طریق فایروال‌ها را محدود کرده و از دور زدن محدودیت‌ها از طریق فایل ~/.ssh/rc جلوگیری کنید.

۴. انعطاف‌پذیری و کنترل مرکزی:

  • جایگزینی authorized_keys: با استفاده از گواهینامه‌های کاربر، فایل authorized_keys روی سرور دیگر برای احراز هویت لازم نیست. این امر مدیریت سرور را ساده‌تر می‌کند.

  • عدم وابستگی به زیرساخت‌های احراز هویت مرکزی خارجی: در حالی که سیستم‌هایی مانند LDAP یا Kerberos برای مدیریت کاربران در مقیاس بزرگ مفید هستند، اما می‌توانند "نقطه شکست واحد" (Single Point of Failure) باشند. اگر این سرویس‌ها از کار بیفتند، ممکن است دسترسی به سیستم‌ها از دست برود. گواهینامه‌های SSH با ایجاد یک "نقطه اعتماد واحد" (CA) که می‌تواند از زیرساخت‌های احراز هویت شما مستقل باشد، این خطر را کاهش می‌دهند.


خلاصه مقایسه:

  • رمز عبور: امنیت پایین، مستعد حملات Brute Force، مدیریت دشوار در مقیاس بزرگ.

  • کلید SSH سنتی: مدیریت دشوار کلیدهای عمومی در تعداد بالای سرورها، فاقد تاریخ انقضای داخلی، دشواری در اعمال محدودیت‌های granular بدون تنظیمات پیچیده در authorized_keys.

  • گواهینامه‌های SSH: مدیریت متمرکز و مقیاس‌پذیر، امنیت بالا با اعتبار زمانی محدود و محدودیت‌های داخلی، کنترل دسترسی دقیق‌تر با Principals و Extensions، و حسابرسی بهتر.

قیاس برای درک بهتر: سیستم SSH Certificate را مانند یک پاسپورت معتبر برای ورود به کشورهای مختلف در نظر بگیرید. در اینجا، Certificate Authority (CA) نقش وزارت خارجه یا اداره گذرنامه را ایفا می‌کند که پاسپورت (گواهینامه SSH) را برای شما (کلید عمومی امضا شده شما) صادر و امضا می‌کند. این پاسپورت دارای تاریخ انقضا است و فقط برای مدت زمان مشخصی معتبر است. اطلاعات مهمی مانند نام شما، نقش شما (مثلاً "مهندس پایگاه داده" یا "مدیر سیستم") و حتی محدودیت‌هایی مانند اینکه فقط می‌توانید به شهرهای خاصی (Principals) یا از طریق مسیرهای خاصی (Source Address Restrictions) وارد شوید، مستقیماً روی پاسپورت شما (گواهینامه) حک شده است. هنگامی که به یک کشور (سرور) می‌رسید، مامور مهاجرت (سرور SSH) فقط کافی است که اعتبار پاسپورت شما را با بررسی امضای وزارت خارجه (کلید عمومی CA که از قبل به آن اعتماد دارد) تأیید کند. دیگر نیازی نیست که مامور مهاجرت لیست بلندی از تمام افراد مجاز (کلیدهای عمومی در authorized_keys) را بررسی کند، فقط کافی است به امضای معتبر روی پاسپورت اعتماد کند.


https://medium.com/@vahiddsy/secure-and-scalable-server-access-with-ssh-certificates-bf2dfa3cd3c8
احراز هویتsshlinuxdevops
۱
۰
Vahiddsy
Vahiddsy
An unlucky lover of electronics and stepped in Linux and its derivatives...
شاید از این پست‌ها خوشتان بیاید