نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

رمزهای عبور ساده امن نیستند و به خاطر سپردن رمزهای پیچیده غیرممکن است. به همین دلیل است که آنها اغلب به یک یادداشت چسبنده زیر صفحه کلید یا روی مانیتور می رسند. برای اطمینان از اینکه گذرواژه‌ها در ذهن کاربران «فراموش» باقی می‌مانند و قابلیت اطمینان محافظت از بین نمی‌رود، احراز هویت دو مرحله‌ای (2FA) وجود دارد.

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

علاوه بر این، در سازمان های دولتی اتفاق می افتد که آنها می خواهند همه چیز طبق GOST کار کند. این گزینه 2FA برای ورود به لینوکس مورد بحث قرار خواهد گرفت. از دور شروع میکنم

ماژول های PAM

ماژول‌های تایید هویت متصل (PAM) ماژول‌هایی با API استاندارد و پیاده‌سازی مکانیسم‌های احراز هویت مختلف در برنامه‌ها هستند.
تمام ابزارها و برنامه‌هایی که می‌توانند با PAM کار کنند، آن‌ها را انتخاب می‌کنند و می‌توانند از آنها برای احراز هویت کاربر استفاده کنند.
در عمل، چیزی شبیه به این کار می کند: دستور ورود به سیستم PAM را فراخوانی می کند، که تمام بررسی های لازم را با استفاده از ماژول های مشخص شده در فایل پیکربندی انجام می دهد و نتیجه را به دستور ورود برمی گرداند.

librtpam

ماژول توسعه یافته توسط شرکت Aktiv، احراز هویت دو مرحله ای کاربران را با استفاده از کارت های هوشمند یا توکن های USB با استفاده از کلیدهای نامتقارن بر اساس آخرین استانداردهای رمزنگاری داخلی اضافه می کند.

بیایید به اصل عملکرد آن نگاه کنیم:

  • توکن گواهی کاربر و کلید خصوصی آن را ذخیره می کند.
  • گواهی به عنوان مورد اعتماد در فهرست اصلی کاربر ذخیره می شود.

فرآیند احراز هویت به صورت زیر انجام می شود:

  1. روتوکن گواهی شخصی کاربر را جستجو می کند.
  2. پین رمز درخواست شده است.
  3. داده های تصادفی روی کلید خصوصی به طور مستقیم در تراشه روتوکن امضا می شوند.
  4. امضای حاصل با استفاده از کلید عمومی گواهی کاربر تأیید می شود.
  5. ماژول نتیجه تأیید امضا را به برنامه فراخوانی باز می گرداند.

می توانید با استفاده از کلیدهای GOST R 34.10-2012 (طول 256 یا 512 بیت) یا GOST R 34.10-2001 قدیمی احراز هویت کنید.

لازم نیست نگران امنیت کلیدها باشید - آنها مستقیماً در Rutoken تولید می شوند و هرگز در طول عملیات رمزنگاری حافظه خود را ترک نمی کنند.

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

Rutoken EDS 2.0 توسط FSB و FSTEC مطابق با NDV 4 تایید شده است، بنابراین می توان از آن در سیستم های اطلاعاتی استفاده کرد که اطلاعات محرمانه را پردازش می کنند.

استفاده عملی

تقریباً هر لینوکس مدرن این کار را انجام می دهد، به عنوان مثال ما از xUbuntu 18.10 استفاده خواهیم کرد.

1) بسته های لازم را نصب کنید

sudo apt-get install libccid pcscd opensc
اگر می خواهید یک قفل دسکتاپ با محافظ صفحه اضافه کنید، بسته را به صورت اضافی نصب کنید libpam-pkcs11.

2) یک ماژول PAM با پشتیبانی GOST اضافه کنید

در حال بارگیری کتابخانه از https://download.rutoken.ru/Rutoken/PAM/
محتویات پوشه PAM librtpam.so.1.0.0 را در پوشه سیستم کپی کنید.
/usr/lib/ یا /usr/lib/x86_64-linux-gnu/یا /usr/lib64

3) بسته را با librtpkcs11ecp.so نصب کنید

بسته DEB یا RPM را از لینک زیر دانلود و نصب کنید: https://www.rutoken.ru/support/download/pkcs/

4) بررسی کنید که Rutoken EDS 2.0 در سیستم کار می کند

در ترمینال اجرا می کنیم
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
اگر خط را می بینید Rutoken ECP <no label> - یعنی همه چیز خوب است.

5) گواهی را بخوانید

بررسی اینکه دستگاه دارای گواهی است
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
اگر بعد از خط:
Using slot 0 with a present token (0x0)

  • اطلاعات نمایش داده می شود در مورد کلیدها و گواهی ها، باید گواهی را بخوانید و آن را در دیسک ذخیره کنید. برای انجام این کار، دستور زیر را اجرا کنید، جایی که به جای {id} باید شناسه گواهی را که در خروجی دستور قبلی مشاهده کردید جایگزین کنید:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    اگر فایل cert.crt ایجاد شده است، به مرحله 6 بروید).
  • چیزی نیست، سپس دستگاه خالی است. با سرپرست خود تماس بگیرید یا با دنبال کردن مرحله بعدی، کلیدها و گواهی را خودتان ایجاد کنید.

5.1) یک گواهی آزمون ایجاد کنید

توجه! روش های توصیف شده برای ایجاد کلیدها و گواهی ها برای آزمایش مناسب هستند و برای استفاده در حالت جنگی در نظر گرفته نشده اند. برای انجام این کار، باید از کلیدها و گواهی های صادر شده توسط مرجع صدور گواهینامه مورد اعتماد سازمان خود یا یک مرجع صدور گواهینامه معتبر استفاده کنید.
ماژول PAM برای محافظت از رایانه های محلی طراحی شده است و برای کار در سازمان های کوچک طراحی شده است. از آنجایی که تعداد کمی از کاربران وجود دارد، مدیر می‌تواند بر ابطال گواهی‌ها نظارت کند و حساب‌ها را به‌طور دستی مسدود کند، همچنین مدت اعتبار گواهی‌ها. ماژول PAM هنوز نمی داند چگونه گواهی ها را با استفاده از CRL ها تأیید کند و زنجیره های اعتماد بسازد.

راه آسان (از طریق مرورگر)

برای دریافت گواهی آزمون، استفاده کنید وب سرویس "مرکز ثبت روتوکن". این فرآیند بیش از 5 دقیقه طول نخواهد کشید.

روش گیک (از طریق کنسول و احتمالاً کامپایلر)

نسخه OpenSC را بررسی کنید
$ opensc-tool --version
اگر نسخه کمتر از 0.20 است، آپدیت یا ساخت کنید شاخه ابزار pkcs11 با پشتیبانی GOST-2012 از GitHub ما (در زمان انتشار این مقاله، نسخه 0.20 هنوز منتشر نشده است) یا از شعبه اصلی پروژه اصلی OpenSC تا دیرتر 8cf1e6f را انجام دهید

یک جفت کلید با پارامترهای زیر تولید کنید:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: شناسه شی (CKA_ID) به عنوان اعداد کاراکترهای شش رقمی دو رقمی از جدول ASCII. فقط از کدهای اسکی برای کاراکترهای قابل چاپ استفاده کنید، زیرا... id باید به عنوان یک رشته به OpenSSL ارسال شود. به عنوان مثال، کد ASCII "3132" با رشته "12" مطابقت دارد. برای راحتی، می توانید استفاده کنید سرویس آنلاین برای تبدیل رشته ها به کدهای اسکی.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

بعد ما یک گواهی ایجاد می کنیم. دو راه در زیر توضیح داده خواهد شد: اولی از طریق یک CA (ما از CA های آزمایشی استفاده خواهیم کرد)، دومی خود امضا است. برای انجام این کار، ابتدا باید OpenSSL نسخه 1.1 یا بالاتر را برای کار با روتوکن از طریق یک ماژول rtengine ویژه با استفاده از دفترچه راهنما نصب و پیکربندی کنید. نصب و پیکربندی OpenSSL.
به عنوان مثال: برای '--id 3132"در OpenSSL باید مشخص کنید"pkcs11:id=12".

شما می توانید از خدمات یک CA آزمایشی استفاده کنید، که بسیاری از آنها وجود دارد، به عنوان مثال، اینجا, اینجا и اینجا، برای این ما یک درخواست برای گواهی ایجاد خواهیم کرد

گزینه دیگر تسلیم شدن به تنبلی و ایجاد یک خود امضا است
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

در حال آپلود گواهی در دستگاه
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) گواهی را در سیستم ثبت کنید

اطمینان حاصل کنید که گواهی شما شبیه یک فایل base64 است:

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

اگر گواهی شما به این شکل است:

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

سپس باید گواهی را از فرمت DER به فرمت PEM تبدیل کنید (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
ما دوباره بررسی می کنیم که همه چیز در حال حاضر مرتب است.

گواهی را به لیست گواهی های قابل اعتماد اضافه کنید
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

خط آخر از لیست گواهی های قابل اعتماد در برابر تغییر تصادفی یا عمدی توسط سایر کاربران محافظت می کند. این باعث می‌شود کسی گواهی خود را در اینجا اضافه نکند و بتواند از طرف شما وارد سیستم شود.

7) احراز هویت را تنظیم کنید

راه اندازی ماژول PAM ما کاملاً استاندارد است و دقیقاً مانند راه اندازی ماژول های دیگر انجام می شود. برای فایل ایجاد کنید /usr/share/pam-configs/rutoken-gost-pam شامل نام کامل ماژول، فعال بودن آن به طور پیش فرض، اولویت ماژول و پارامترهای احراز هویت.
پارامترهای احراز هویت شامل الزاماتی برای موفقیت عملیات هستند:

  • مورد نیاز: چنین ماژول هایی باید یک پاسخ مثبت داشته باشند. اگر نتیجه فراخوانی ماژول حاوی پاسخ منفی باشد، منجر به خطای احراز هویت می شود. درخواست حذف می شود، اما ماژول های باقی مانده فراخوانی می شوند.
  • requisite: مشابه مورد نیاز است، اما بلافاصله احراز هویت ناموفق است و ماژول های دیگر را نادیده می گیرد.
  • کافی: اگر هیچ یک از ماژول های مورد نیاز یا کافی قبل از چنین ماژولی نتیجه منفی نداشته باشد، ماژول پاسخ مثبت خواهد داد. ماژول های باقی مانده نادیده گرفته می شوند.
  • اختیاری: اگر هیچ ماژول مورد نیازی در پشته وجود نداشته باشد و هیچ یک از ماژول‌های کافی نتیجه مثبت نداشته باشد، حداقل یکی از ماژول‌های اختیاری باید یک نتیجه مثبت را نشان دهد.

محتویات کامل فایل /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

فایل را ذخیره کنید، سپس اجرا کنید
$ sudo pam-auth-update
در پنجره ظاهر شده، یک ستاره در کنار آن قرار دهید روتوکن PAM GOST و کلیک کنید OK

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

8) تنظیمات را بررسی کنید

برای درک اینکه همه چیز پیکربندی شده است، اما در عین حال توانایی ورود به سیستم را از دست ندهید، دستور را وارد کنید
$ sudo login
نام کاربری خود را وارد کنید. اگر سیستم به کد پین دستگاه نیاز داشته باشد، همه چیز به درستی پیکربندی شده است.

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

9) رایانه را طوری پیکربندی کنید که هنگام استخراج توکن مسدود شود

در بسته گنجانده شده است libpam-pkcs11 ابزار گنجانده شده است pkcs11_eventmgr, که به شما امکان می دهد در هنگام رخ دادن رویدادهای PKCS#11 اقدامات مختلفی را انجام دهید.
برای تنظیمات pkcs11_eventmgr به عنوان یک فایل پیکربندی عمل می کند: /etc/pam_pkcs11/pkcs11_eventmgr.conf
برای توزیع‌های مختلف لینوکس، دستوری که باعث قفل شدن حساب هنگام حذف کارت هوشمند یا توکن می‌شود، متفاوت است. سانتی متر. event card_remove.
نمونه فایل پیکربندی در زیر نشان داده شده است:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

پس از آن برنامه را اضافه کنید pkcs11_eventmgr به راه اندازی برای این کار فایل .bash_profile را ویرایش کنید:
$ nano /home/<имя_пользователя>/.bash_profile
خط pkcs11_eventmgr را به انتهای فایل اضافه کنید و راه اندازی مجدد کنید.

مراحل توضیح داده شده برای راه اندازی سیستم عامل را می توان به عنوان دستورالعمل در هر توزیع مدرن لینوکس، از جمله توزیع های داخلی، استفاده کرد.

نحوه استفاده از ماژول های PAM برای احراز هویت محلی در لینوکس با استفاده از کلیدهای GOST-2012 در روتوکن

نتیجه

رایانه های شخصی لینوکس به طور فزاینده ای در سازمان های دولتی روسیه محبوب می شوند و تنظیم احراز هویت دو مرحله ای قابل اعتماد در این سیستم عامل همیشه آسان نیست. ما خوشحال خواهیم شد که با این راهنما به شما کمک کنیم تا "مشکل رمز عبور" را حل کنید و به طور قابل اعتمادی از دسترسی به رایانه شخصی خود بدون صرف زمان زیادی برای آن محافظت کنید.

منبع: www.habr.com

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