كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

كلمات المرور البسيطة ليست آمنة، ومن المستحيل تذكر الكلمات المعقدة. ولهذا السبب غالبًا ما ينتهي بهم الأمر إلى ملاحظة لاصقة أسفل لوحة المفاتيح أو على الشاشة. لضمان بقاء كلمات المرور في أذهان المستخدمين "الناسيين" وعدم فقدان موثوقية الحماية، هناك مصادقة ثنائية (2FA).

نظرًا للجمع بين امتلاك جهاز ومعرفة رقم التعريف الشخصي الخاص به، يمكن أن يكون رقم التعريف الشخصي نفسه أبسط وأسهل في التذكر. يتم تعويض العيوب في طول رقم التعريف الشخصي أو العشوائية من خلال متطلبات الحيازة المادية والقيود المفروضة على القوة الغاشمة لرقم التعريف الشخصي.

بالإضافة إلى ذلك، يحدث في الوكالات الحكومية أنهم يريدون أن يعمل كل شيء وفقًا لـ GOST. ستتم مناقشة خيار 2FA لتسجيل الدخول إلى Linux. سأبدأ من بعيد.

وحدات بام

وحدات المصادقة القابلة للتوصيل (PAM) هي وحدات تحتوي على واجهة برمجة التطبيقات (API) القياسية وتطبيقات آليات المصادقة المختلفة في التطبيقات.
جميع الأدوات المساعدة والتطبيقات التي يمكنها العمل مع PAM تلتقطها ويمكن استخدامها لمصادقة المستخدم.
عمليًا، يعمل الأمر على النحو التالي: يستدعي أمر تسجيل الدخول PAM، الذي يقوم بإجراء جميع الفحوصات اللازمة باستخدام الوحدات المحددة في ملف التكوين ويعيد النتيجة مرة أخرى إلى أمر تسجيل الدخول.

librtpam

تضيف الوحدة التي طورتها شركة Aktiv مصادقة ثنائية للمستخدمين باستخدام البطاقات الذكية أو رموز USB باستخدام مفاتيح غير متماثلة وفقًا لأحدث معايير التشفير المحلي.

دعونا نلقي نظرة على مبدأ عملها:

  • يقوم الرمز بتخزين شهادة المستخدم ومفتاحه الخاص؛
  • يتم حفظ الشهادة في الدليل الرئيسي للمستخدم على أنها موثوقة.

تتم عملية المصادقة على النحو التالي:

  1. يبحث Rutoken عن الشهادة الشخصية للمستخدم.
  2. يتم طلب رقم التعريف الشخصي المميز.
  3. يتم توقيع البيانات العشوائية على المفتاح الخاص مباشرة في شريحة Rutoken.
  4. يتم التحقق من التوقيع الناتج باستخدام المفتاح العام من شهادة المستخدم.
  5. تقوم الوحدة بإرجاع نتيجة التحقق من التوقيع إلى تطبيق الاستدعاء.

يمكنك المصادقة باستخدام مفاتيح GOST R 34.10-2012 (الطول 256 أو 512 بت) أو مفاتيح GOST R 34.10-2001 القديمة.

لا داعي للقلق بشأن أمان المفاتيح - فهي يتم إنشاؤها مباشرة في Rutoken ولا تترك ذاكرتها أبدًا أثناء عمليات التشفير.

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

تم اعتماد Rutoken EDS 2.0 من قبل FSB وFSTEC وفقًا لـ NDV 4، وبالتالي يمكن استخدامه في أنظمة المعلومات التي تعالج المعلومات السرية.

الاستخدام العملي

تقريبًا أي نظام Linux حديث سيفعل ذلك، على سبيل المثال سنستخدم 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 حتى الآن كيفية التحقق من الشهادات باستخدام CRLs وبناء سلاسل الثقة.

الطريقة السهلة (عبر المتصفح)

للحصول على شهادة الاختبار، استخدم خدمة الويب "مركز تسجيل Rutoken". لن تستغرق العملية أكثر من 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. استخدم رموز ASCII فقط للأحرف القابلة للطباعة، لأن... يجب تمرير المعرف إلى OpenSSL كسلسلة. على سبيل المثال، رمز ASCII "3132" يتوافق مع السلسلة "12". للراحة، يمكنك استخدام خدمة عبر الإنترنت لتحويل السلاسل إلى رموز ASCII.

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

بعد ذلك سنقوم بإنشاء شهادة. سيتم وصف طريقتين أدناه: الأولى من خلال CA (سنستخدم CAs الاختبارية)، والثانية يتم التوقيع عليها ذاتيًا. للقيام بذلك، تحتاج أولاً إلى تثبيت وتكوين الإصدار 1.1 من OpenSSL أو الأحدث للعمل مع Rutoken من خلال وحدة 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 للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

إذا كانت شهادتك تبدو هكذا:

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

فأنت بحاجة إلى تحويل الشهادة من تنسيق 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 يحتوي على الاسم الكامل للوحدة، وما إذا كانت ممكّنة افتراضيًا، وأولوية الوحدة، ومعلمات المصادقة.
تحتوي معلمات المصادقة على متطلبات نجاح العملية:

  • مطلوب: يجب أن تُرجع هذه الوحدات استجابة إيجابية. إذا كانت نتيجة استدعاء الوحدة النمطية تحتوي على استجابة سلبية، فسيؤدي ذلك إلى حدوث خطأ في المصادقة. سيتم إسقاط الطلب، ولكن سيتم استدعاء الوحدات المتبقية.
  • Required: يشبه المطلوب، ولكنه يفشل على الفور في المصادقة ويتجاهل الوحدات الأخرى.
  • كافية: إذا لم تُرجع أي من الوحدات المطلوبة أو الكافية قبل هذه الوحدة نتيجة سلبية، فسوف تُرجع الوحدة استجابة إيجابية. سيتم تجاهل الوحدات المتبقية.
  • اختياري: إذا لم تكن هناك وحدات مطلوبة في المكدس ولم تُرجع أي من الوحدات الكافية نتيجة إيجابية، فيجب أن تُرجع إحدى الوحدات الاختيارية على الأقل نتيجة إيجابية.

محتويات الملف كاملة /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 للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

احفظ الملف، ثم قم بالتنفيذ
$ sudo pam-auth-update
في النافذة التي تظهر، ضع علامة النجمة بجانبها روتوكين بام غوست ودفع OK

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

8) التحقق من الإعدادات

لفهم أنه تم تكوين كل شيء، ولكن في نفس الوقت لا تفقد القدرة على تسجيل الدخول إلى النظام، أدخل الأمر
$ sudo login
أدخل اسم المستخدم الخاص بك. يتم تكوين كل شيء بشكل صحيح إذا كان النظام يتطلب رمز PIN للجهاز.

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

9) قم بتكوين جهاز الكمبيوتر ليتم حظره عند استخراج الرمز المميز

المدرجة في الحزمة libpam-pkcs11 فائدة المدرجة pkcs11_eventmgr, والذي يسمح لك بتنفيذ إجراءات مختلفة عند وقوع أحداث PKCS#11.
للإعدادات pkcs11_eventmgr بمثابة ملف التكوين: /etc/pam_pkcs11/pkcs11_eventmgr.conf
بالنسبة لتوزيعات Linux المختلفة، سيختلف الأمر الذي يتسبب في قفل الحساب عند إزالة البطاقة الذكية أو الرمز المميز. سم. 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 إلى نهاية الملف وأعد التشغيل.

يمكن استخدام الخطوات الموضحة لإعداد نظام التشغيل كتعليمات في أي توزيعة Linux حديثة، بما في ذلك التوزيعة المحلية.

كيفية استخدام وحدات PAM للمصادقة المحلية في Linux باستخدام مفاتيح GOST-2012 على Rutoken

اختتام

أصبحت أجهزة كمبيوتر Linux ذات شعبية متزايدة في الوكالات الحكومية الروسية، كما أن إعداد مصادقة ثنائية موثوقة في نظام التشغيل هذا ليس بالأمر السهل دائمًا. سنكون سعداء بمساعدتك في حل "مشكلة كلمة المرور" باستخدام هذا الدليل وحماية الوصول إلى جهاز الكمبيوتر الخاص بك بشكل موثوق دون قضاء الكثير من الوقت عليه.

المصدر: www.habr.com

إضافة تعليق