OTRS: مصادقة LDAP والترخيص والمزامنة (FreeIPA ، AD)

الصورة

OTRS هو نظام طلب تذكرة مفتوح المصدر مكتوب باللغة بيرل.

هناك خياران:


سأذكر القليل من الوظائف التي يدعمها هذا النظام:

  • وحدة ITSM (إدارة مستوى الخدمة ، إدارة التغيير ، إدارة التكوين ، CMDB)
  • استجابة واجهة الويب
  • API
  • جيش تحرير السودان والخدمات
  • متعدد المستأجر
  • التصعيد
  • المصادقة: DB ، LDAP ، HTTPBasicAuth ، نصف القطر
  • دعم الخلية ، MariaDB ، بوستجرس ، أوراكل

وإذا كنت تبحث عن عيوب فيه ، فهي واجهة غير عادية وتعقيد في الإعداد. في الأساس - حول أساسيات التفويض (المجموعات ، RBAC ، دعم العديد من الشركات العميلة) ، مصادقة وتزامن البيانات التعريفية (الاسم ، الهاتف ، إلخ) باستخدام أدلة LDAP المختلفة

العملاء ، قوائم الانتظار ، الوكلاء ، والمجموعات


بعد تثبيت OTRS ، سيكون لديك على الفور الوصول إلى:

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

الصورة

المجموعات القياسية


بعد تثبيت النظام ، سترى ثلاث مجموعات تم إنشاؤها:

  • يمكن للمشرف - أعضاء المجموعة إدارة (تكوين) OTRS
  • احصائيات - القدرة على تخصيص وتشغيل التقارير
  • المستخدمين - مجموعة قياسية للعملاء وقوائم الانتظار والوكلاء

مجموعة الحقوق ذات الصلة


الحقوق الأساسية


الحقوق الرئيسية التي يمكن تهيئتها في مجموعة تقيد إجراءات الوكيل:

  • قراءة فقط - حقوق للقراءة فقط في التطبيق في هذه المجموعة / قائمة الانتظار
  • نقل - حقوق لنقل الطلبات إلى هذه المجموعة / قائمة الانتظار
  • إنشاء - حقوق إنشاء تطبيقات في هذه المجموعة / قائمة الانتظار
  • ملاحظة - حقوق لإضافة ملاحظات إلى التطبيقات في هذه المجموعة / قائمة الانتظار
  • المالك - حقوق لتغيير مالك التطبيقات في هذه المجموعة / قائمة الانتظار
  • الأولوية - حقوق تغيير أولوية التطبيقات في هذه المجموعة / قائمة الانتظار
  • قراءة / كتابة - قراءة كاملة وكتابة أذونات للطلبات في هذه المجموعة / قائمة الانتظار

حقوق إضافية


هناك أيضًا حقوق إضافية ، يمكن تمكين عرضها في الإعدادات (النظام :: الإذن):

  • التقارير - يوفر الوصول إلى صفحة التقارير
  • إعادة توجيه - الحق في إعادة توجيه / ترتد رسالة البريد (رابط إعادة التوجيه / ترتد في ticketZoom)
  • إنشاء - الحق في إعداد استجابة للتطبيق
  • العميل - الحق في تغيير العميل لهذا التطبيق
  • إلى الأمام - الحق في إعادة توجيه الرسائل (باستخدام زر إعادة التوجيه)
  • معلق - الحق في نقل الطلب معلق
  • الهاتف - الحق في إضافة محتوى مكالمة العميل إلى التطبيق في شكل رسالة / ملاحظة
  • المسؤول - الحق في تغيير الشخص المسؤول عن التطبيق

النظر في هذا بمزيد من التفصيل:

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

الصورة

مصادقة قاعدة البيانات


الطريقة القياسية لمصادقة وتفويض الوكلاء والعملاء هي من خلال قاعدة بيانات.

على سبيل المثال ، يبدو تعيين المصادقة الوكيل باستخدام قاعدة بيانات كما يلي:

$Self->{'AuthModule'} = 'Kernel::System::Auth::DB'; 

الزبائن:

 $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB'; $Self->{'Customer::AuthModule::DB::Table'} = 'customer_user'; $Self->{'Customer::AuthModule::DB::CustomerKey'} = 'login'; $Self->{'Customer::AuthModule::DB::CustomerPassword'} = 'pw'; 

سنترك أيضًا طريقة المصادقة هذه ونضيف المصادقة عبر LDAP بالإضافة إلى ذلك.

الأدوار والشركات


سنوسع أيضًا إمكانيات التفويض بإضافة الأدوار والشركات:

  • أدوار - السماح بمزيد من التحكم في الوصول عن طريق ربط المجموعات والوكلاء
  • الشركات - السماح بعزل التطبيقات لمختلف العملاء (سواء كانت إدارات أو شركات مختلفة)

الصورة

بيان المشكلة


أنت المسؤول عن نظام OTRS في my-it-company.com ، وهي شركة تقدم خدمات لشركات أخرى (أو وحدات ضمن حيازتك).

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

وستحصل شركتك أيضًا على مزايا واضحة - فكلمة مرور مستخدم واحدة في جميع الأنظمة ، يؤدي حظر حساب في LDAP إلى حظر الوصول إلى جميع الخدمات الأخرى.

يعمل my-it-company.com على Linux ويستخدم Red Hat FreeIPA كخادم دليل ، والوحدات التي تستخدمها تستخدم غابات Microsoft Active Directory المختلفة التي لا تملك اتحادًا معها ، ولكن يمكنك الاتصال بوحدات التحكم بالمجال.

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

يمكن لموظفي شركتك أيضًا تعيين مهام في النظام للاحتياجات الداخلية لـ my-it-company.com ، حيث يكونون في بعض الأحيان وكلاء وعملاء في نفس الوقت (وأحيانًا لا).

الصورة

التحضير


حسابات لعرض LDAP


إذا تم حظر التصفح المجهول لشجرة الدليل ، فسنقوم بإنشاء حسابات في المجالات my-it-company.com و pear.com و macrohard.com التي لدينا حقوق كافية لإجراء استعلامات LDAP (دعنا نتصل بهم ، على سبيل المثال ، ldap-bot)

مجموعات FreeIPA للمزامنة مع أدوار OTRS


سننشئ ثلاث مجموعات من المستخدمين على FreeIPA والتي ستتم مزامنتها مع أدوار OTRS الخاصة بنا ، على سبيل المثال:

  • otrs-sa - سيحصل أعضاء هذه المجموعة على إمكانية الوصول إلى إدارة OTRS ، لكننا لن نسمح بالوصول إلى قوائم الانتظار ، حتى لا نريد العمل دائمًا تحت المشرف) ،
  • otrs- مدراء - مدراءنا مع الحق في تغيير أولوية التطبيقات) و
  • otrs-helpdesk - حساباتنا المتخصصة

سمة الشركة


اختر السمة التي سنحدد بها الانتماء للشركة. فليكن السمة "منظمة". على سبيل المثال ، تحول كل شيء على المستوى التنظيمي والتقني ، وجميع المستخدمين في جميع المجالات لديهم دائمًا قيمة في حقل "المؤسسة":

  • my-it-company - لموظفي my-it-company.com
  • شركة الكمثرى - لموظفي pear.com
  • شركة ماكروهارد - لموظفي macrohard.com

حدد سمات المستخدم التي يستخدمها FreeIPA


ندرس مخطط FreeIPA ، ونكتشف أسماء السمات التي سنحتاجها للمزامنة (الاسم ، تسجيل الدخول ، الهاتف ، إلخ).

 kinit laptevs ipa user-show --all --raw laptevs 

نحصل على استنتاج مماثل:
dn: uid = laptevs، cn = users، cn = accounts، dc = my-it-company، dc = com
معرف المستخدم: laptevs
الاسم المستعار: ستانيسلاف
sn: لابتيف
cn: لابتيف ستانيسلاف
بالاحرف الاولى: SL
الصفحة الرئيسية: / home / laptevs
gecos: لابتيف ستانيسلاف
loginshell: / بن / ش
krbcanonicalname: laptevs@MY-IT-COMPANY.COM
krbprincipalname: laptevs@MY-IT-COMPANY.COM
mail: laptevs@MY-IT-COMPANY.COM
الرقم المعرف: 1344600003
الرقم التسلسلي: 1344600003
ل: موسكو
رقم الهاتف: +7 (863) 999-99-99
الجوال: +7 (999) 999-99-99
أوو: شركتي
العنوان: SysAdm
sshpubkeyfp: SHA256: Yi8mKF + j28 / r2cpxLgIbvZ / Oymt57rhliHKhqBuJxqE laptevs-putty (ssh-rsa)
nsaccountlock: خطأ
has_password: TRUE
has_keytab: TRUE
displayName: لابتيف ستانيسلاف
ipaSshPubKey: c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkpRQUFBZ0VBNjQ1RTJjSjIvWXVVYm9GNzdZY3hLNzBndm1jWlgrZjBZTVpsaXRQVXNCWFZ0cENtTEtwcjRwK2JEeUdhRzNLTWx1T08ydW9wS0pXRk9mWE83Zzl3OTYzdklQblN3MzVHSmI3VGhhbk1pTXpNUE82T1lQZEY0em14b2k4N 0RGYkdXV2V6aGwzcitsbmFGYTB0dEQ5TkFWRU1Fb3BMdmkzcHZ1UXpyVmNjVlMxamFxY1dNT2ZGUC9TRlVoY1dGeVpZd3Z6eW0wWnZObUZtdjVjVHJGNzJMSXZOdHlsNkZGK2ZaU3ZpS01mcXZ6NStkT2xZZGd5bVVSOG5iaVpkTXZKaTIvbzhjTy84ekpoMFhtSnVRSjJXNEVvYVEvajVTTm8ySjZ6NklXNk I3cFB4Y002a0tJcUp5N08zTkNOcGRrVmVQbEFHbThsOFZDREpVa1RLSjRGOS9mSTZFUkhxVUZwK3p1VENTR1R3ZWlKdXppenFSZWJTTkNiMXh3RldmUitvYzFLdWNZSU5QbTYxRi93YXhOcC9aSG9OK2w1dCtkYWI4cElZSGZzTnNUNWx2RWt4Ukh0bnNyeUxsbWk1ZVdzd3RBbDB3TUpWd1cvUWNJcjhOaVN Ybm96Q3dHWTZCaTQ2L0FGTGVidmFLV0tKRmpKZFgxOFlRVDRpVzZGaE83aW40TGlUamlNaENXbStvbjNQbERYeXZpdkJ1WkFXUldXNEdjbXREVW8rSVhZT2t3MWh3UldqdkJtcExHMVZpMFhPckltbmQybTVZdWk1bHo0b1ZlekFRN1NjYVlrdDBoVEdQU1Z2UHpmVlowYWJCQlpiRmViK1hUV2tpSnBPMHBO T3dodGNadHYrN3RMMnc1OFN3QnhVTUk4NzUzdG5Sc1h1blBXZERqcUsxSDA9IGxhcHRldnMtcHV0dHk =
ipaUniqueID: 68d46dac-1d3c-11e9-82fd-0242ac110002
krbExtraData: AAL4VkVcbGFwdGV2c0BPTUlLUk9OLlBSTwA =
krbLastFailedAuth: 20190123084142Z
krbLastPwdChange: 20190121052200Z
krbLoginFailedCount: 0
krbPasswordExpiration: 20190421052200Z
memberof: cn = otrs-admins، cn = groups، cn = accounts، dc = my-it-company، dc = com
memberof: cn = ipausers، cn = groups، cn = accounts، dc = my-it-company، dc = com
mepManagedEntry: cn = laptevs ، cn = groups ، cn = accounts ، dc = my-it-company ، dc = com
objectClass: أعلى
objectClass: الشخص
objectClass: التنظيمية
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry

dn : uid = laptevs، cn = users، cn = accounts، dc = my-it-company، dc = com
معرف المستخدم: laptevs
الاسم المستعار : ستانيسلاف
sn : لابتيف
cn : لابتيف ستانيسلاف
mail : laptevs@MY-IT-COMPANY.COM
ل : موسكو
رقم الهاتف : +7 (863) 999-99-99
الجوال : +7 (999) 999-99-99
أوو : شركتي
العنوان : SysAdm

تكوين OTRS


ملفات التكوين


  • / opt / otrs / - كقاعدة عامة ، توجد ملفات نظام OTRS هنا
  • Kernel / Config.pm - ملف التكوين الذي تقوم بتحريره
  • Kernel / Config / Defaults.pm - ملف بالإعدادات القياسية ، لا يمكنك تحريره ، لكن فيه يمكنك رؤية جميع المعلمات والتعليقات الموجودة عليها

إعداد الوكيل


مصادقة الوكيل


  # --------------------------------------------------- # # Agents authentication # # --------------------------------------------------- # # my-it-company.com LDAP backend $Self->{AuthModule} = 'Kernel::System::Auth::LDAP'; #  LDAP- $Self->{'AuthModule::LDAP::Host'} = 'my-it-company.com'; $Self->{'AuthModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com'; $Self->{'AuthModule::LDAP::UID'} = 'uid'; #  ,        $Self->{'AuthModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com'; $Self->{'AuthModule::LDAP::SearchUserPw'} = 'bot-password!'; #    LDAP.      ,    " " $Self->{'AuthModule::LDAP::AlwaysFilter'} = '(mail=*)'; #      $Self->{'AuthModule::LDAP::Charset'} = 'utf-8'; $Self->{'AuthModule::UseSyncBackend'} = 'AuthSyncBackend'; # my-it-company.com DB backend $Self->{AuthModule2} = 'Kernel::System::Auth::DB'; $Self->{'AuthModule::DB::CryptType2'} = 'sha2'; # --------------------------------------------------- # # End Agents authentication # # --------------------------------------------------- # 

عوامل المزامنة (مجموعات LDAP مع أدوار OTRS)


  # --------------------------------------------------- # # Agent authentication sync # # (enable agent data sync. after succsessful # # authentication) # # --------------------------------------------------- # # my-it-company.com LDAP auth sync. backend. $Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::UID'} = 'uid'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!'; $Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN'; $Self->{'AuthSyncModule::LDAP::UserSyncRolesDefinition'} = { # ldap group 'cn=otrs-sa,cn=groups,cn=accounts,dc=my-it-company,dc=com' => { # otrs role 'otrs-sa' => 1, }, 'cn=otrs-admins,cn=groups,cn=accounts,dc=my-it-company,dc=com' => { 'otrs-admins' => 1, }, 'cn=otrs-helpdesk,cn=groups,cn=accounts,dc=my-it-company,dc=com' => { 'helpdesk' => 1, } }; $Self->{DatabaseUserTable} = 'users'; $Self->{DatabaseUserTableUserID} = 'id'; $Self->{DatabaseUserTableUserPW} = 'pw'; $Self->{DatabaseUserTableUser} = 'login'; # --------------------------------------------------- # # End Agents authentication sync # # --------------------------------------------------- # 

إذا قررت أن الأدوار لا تناسبك ، وتريد فقط المجموعات ، فسنقدم مثالين على مزامنة مجموعات LDAP مع مجموعات OTRS - مبسطة وبحقوق لكل مجموعة.

تزامن الوكيل البديل (مجموعات LDAP مع مجموعات OTRS ، مع الحقوق)
  # --------------------------------------------------- # # Agent authentication sync # # (enable agent data sync. after succsessful # # authentication) # # --------------------------------------------------- # # my-it-company.com LDAP auth sync. backend. $Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::UID'} = 'uid'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!'; $Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN'; # AuthSyncModule::LDAP::UserSyncGroupsDefinition # (If "LDAP" was selected for AuthModule and you want to sync LDAP # groups to otrs groups, define the following.) $Self->{'AuthSyncModule::LDAP::UserSyncGroupsDefinition'} = { # ldap group 'cn=otrs-admins,cn=groups,cn=accounts,dc=my-it-company,dc=com' => { # otrs group 'admin' => { # permission rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, 'stats' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, 'users' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, 'pear-group' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, 'macrohard-group' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, }, 'cn=otrs-helpdesk,cn=groups,cn=accounts,dc=my-it-company,dc=com' => { 'stats' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, 'users' => { rw => 1, move_into => 1, create => 1, note => 1, owner => 1, prioriry => 1, ro => 1, }, } }; $Self->{DatabaseUserTable} = 'users'; $Self->{DatabaseUserTableUserID} = 'id'; $Self->{DatabaseUserTableUserPW} = 'pw'; $Self->{DatabaseUserTableUser} = 'login'; # --------------------------------------------------- # # End Agents authentication sync # # --------------------------------------------------- # 



مزامنة الوكيل المبسطة البديلة (مجموعات LDAP مع أدوار OTRS بامتيازات rw)
  # --------------------------------------------------- # # Agent authentication sync # # (enable agent data sync. after succsessful # # authentication) # # --------------------------------------------------- # # my-it-company.com LDAP auth sync. backend. $Self->{AuthSyncModule} = 'Kernel::System::Auth::Sync::LDAP'; $Self->{'AuthSyncModule::LDAP::Host'} = 'my-it-company.com'; $Self->{'AuthSyncModule::LDAP::BaseDN'} = 'dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::UID'} = 'uid'; $Self->{'AuthSyncModule::LDAP::SearchUserDN'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com'; $Self->{'AuthSyncModule::LDAP::SearchUserPw'} = 'bot-password!'; $Self->{'AuthSyncModule::LDAP::AlwaysFilter'} = '(mail=*)'; $Self->{'AuthSyncModule::LDAP::UserSyncMap'} = { # DB -> LDAP UserFirstname => 'givenName', UserLastname => 'sn', UserEmail => 'mail', }; $Self->{'AuthSyncModule::LDAP::AccessAttr'} = 'member'; $Self->{'AuthSyncModule::LDAP::UserAttr'} = 'DN'; #    -     / # AuthSyncModule::LDAP::UserSyncInitialGroups # (sync following group with rw permission after initial create of first agent # login) $Self->{'AuthSyncModule::LDAP::UserSyncInitialGroups'} = [ 'users', ]; $Self->{DatabaseUserTable} = 'users'; $Self->{DatabaseUserTableUserID} = 'id'; $Self->{DatabaseUserTableUserPW} = 'pw'; $Self->{DatabaseUserTableUser} = 'login'; # --------------------------------------------------- # # End Agents authentication sync # # --------------------------------------------------- # 



إعداد العملاء


مصادقة العملاء


  # --------------------------------------------------- # # ustomer authentication # # --------------------------------------------------- # # ustomer DB auth. backend $Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::DB'; $Self->{'Customer::AuthModule::DB::Table'} = 'customer_user'; $Self->{'Customer::AuthModule::DB::CustomerKey'} = 'login'; $Self->{'Customer::AuthModule::DB::CustomerPassword'} = 'pw'; # my-it-company.com (ustomer) LDAP auth. backend $Self->{'Customer::AuthModule2'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host2'} = 'my-it-company.com'; $Self->{'Customer::AuthModule::LDAP::BaseDN2'} = 'dc=my-it-company,dc=com'; $Self->{'Customer::AuthModule::LDAP::UID2'} = 'uid'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN2'} = 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw2'} = 'bot-password!'; $Self->{'Customer::AuthModule::LDAP::AlwaysFilter2'} = '(mail=*)'; # pear LDAP auth. backend. $Self->{'Customer::AuthModule3'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host3'} = 'pear.com'; $Self->{'Customer::AuthModule::LDAP::BaseDN3'} = 'DC=pear,DC=com'; $Self->{'Customer::AuthModule::LDAP::UID3'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN3'} = 'ldap-bot@pear.com'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw3'} = 'bot-password?'; # : (mail=*) -      (samAccountType=805306368) -     (!(userAccountControl:1.2.840.113556.1.4.803:=2)) -   $Self->{'Customer::AuthModule::LDAP::AlwaysFilter3'} = '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'; # macrohard LDAP auth. backend. $Self->{'Customer::AuthModule4'} = 'Kernel::System::CustomerAuth::LDAP'; $Self->{'Customer::AuthModule::LDAP::Host4'} = 'macrohard.com'; $Self->{'Customer::AuthModule::LDAP::BaseDN4'} = 'dc=macrohard,dc=com'; $Self->{'Customer::AuthModule::LDAP::UID4'} = 'sAMAccountName'; $Self->{'Customer::AuthModule::LDAP::SearchUserDN4'} = 'ldap-bot@macrohard.com'; $Self->{'Customer::AuthModule::LDAP::SearchUserPw4'} = 'bot-password!?'; $Self->{'Customer::AuthModule::LDAP::AlwaysFilter4'} = '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'; # --------------------------------------------------- # # End customer authentication settings # # --------------------------------------------------- # 

تزامن العميل (الحصول على سمات العميل من LDAP ، التواصل مع شركات OTRS)


  # --------------------------------------------------- # # Customer authentication sync # # --------------------------------------------------- # # Customer user DB backend and settings $Self->{CustomerUser} = { Name => Translatable('Database Backend'), Module => 'Kernel::System::CustomerUser::DB', Params => { Table => 'customer_user', SearchCaseSensitive => 0, }, # customer unique id CustomerKey => 'login', # customer # CustomerID => 'customer_id', CustomerValid => 'valid_id', CustomerUserListFields => [ 'first_name', 'last_name', 'email' ], CustomerUserSearchFields => [ 'login', 'first_name', 'last_name', 'customer_id' ], CustomerUserSearchPrefix => '*', CustomerUserSearchSuffix => '*', CustomerUserSearchListLimit => 250, CustomerUserPostMasterSearchFields => ['email'], CustomerUserNameFields => [ 'title', 'first_name', 'last_name' ], CustomerUserEmailUniqCheck => 1, CustomerCompanySupport => 1, CacheTTL => 60 * 60 * 24, Map => [ [ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 0, undef, undef ], [ 'UserFirstname', Translatable('Firstname'), 'first_name', 1, 1, 'var', '', 0, undef, undef ], [ 'UserLastname', Translatable('Lastname'), 'last_name', 1, 1, 'var', '', 0, undef, undef ], [ 'UserLogin', Translatable('Username'), 'login', 1, 1, 'var', '', 0, undef, undef ], [ 'UserPassword', Translatable('Password'), 'pw', 0, 0, 'var', '', 0, undef, undef ], [ 'UserEmail', Translatable('Email'), 'email', 1, 1, 'var', '', 0, undef, undef ], [ 'UserCustomerID', Translatable('CustomerID'), 'customer_id', 0, 1, 'var', '', 0, undef, undef ], [ 'UserPhone', Translatable('Phone'), 'phone', 1, 0, 'var', '', 0, undef, undef ], [ 'UserFax', Translatable('Fax'), 'fax', 1, 0, 'var', '', 0, undef, undef ], [ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 0, undef, undef ], [ 'UserStreet', Translatable('Street'), 'street', 1, 0, 'var', '', 0, undef, undef ], [ 'UserZip', Translatable('Zip'), 'zip', 1, 0, 'var', '', 0, undef, undef ], [ 'UserCity', Translatable('City'), 'city', 1, 0, 'var', '', 0, undef, undef ], [ 'UserCountry', Translatable('Country'), 'country', 1, 0, 'var', '', 0, undef, undef ], [ 'UserComment', Translatable('Comment'), 'comments', 1, 0, 'var', '', 0, undef, undef ], [ 'ValidID', Translatable('Valid'), 'valid_id', 0, 1, 'int', '', 0, undef, undef ], ], # default selections Selections => { # UserTitle => { # 'Mr.' => Translatable('Mr.'), # 'Mrs.' => Translatable('Mrs.'), # }, }, }; # my-it-company.com customer user ldap backend and settings $Self->{CustomerUser2} = { Name => 'AD my-it-company.com', Module => 'Kernel::System::CustomerUser::LDAP', Params => { # ldap host Host => 'my-it-company.com', # ldap base dn BaseDN => 'dc=my-it-company,dc=com', # search scope (one|sub) SSCOPE => 'sub', UserDN => 'uid=ldap-bot,cn=users,cn=accounts,dc=my-it-company,dc=com', UserPw => 'bot-password!', # in case you want to add always one filter to each ldap query, use # this option. eg AlwaysFilter => '(mail=*)' or AlwaysFilter => '(objectclass=user)' AlwaysFilter => '(mail=*)', SourceCharset => 'utf-8', Die => 0, }, # customer unique id CustomerKey => 'uid', # customer # CustomerID => 'ou', CustomerUserListFields => ['uid', 'cn', 'mail'], CustomerUserSearchFields => ['uid', 'cn', 'mail'], CustomerUserSearchPrefix => '', CustomerUserSearchSuffix => '*', CustomerUserSearchListLimit => 250, CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['sn', 'givenname'], # Configures the character for joining customer user name parts. Join single space if it is not defined. CustomerUserNameFieldsJoin => ' ', # show customer user and customer tickets in customer interface CustomerUserExcludePrimaryCustomerID => 0, # add a ldap filter for valid users (expert setting) # CustomerUserValidFilter => '(!(description=gesperrt))', # admin can't change customer preferences AdminSetPreferences => 1, # cache time to live in sec. - cache any ldap queries CacheTTL => 0, Map => [ [ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ], [ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLogin', Translatable('Username'), 'uid', 1, 1, 'var', '', 1, undef, undef ], [ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ], [ 'UserCustomerID', Translatable('CustomerID'), 'ou', 0, 1, 'var', '', 1, undef, undef ], [ 'UserPhone', Translatable('Phone'), 'telephonenumber', 1, 0, 'var', '', 1, undef, undef ], [ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ], ], }; # pear customer user ldap backend and settings $Self->{CustomerUser3} = { Name => 'AD pear', Module => 'Kernel::System::CustomerUser::LDAP', Params => { # ldap host Host => 'pear.com', BaseDN => 'DC=pear,DC=com', SSCOPE => 'sub', UserDN => 'ldap-bot@pear.com', UserPw => 'bot-password?', AlwaysFilter => '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))', SourceCharset => 'utf-8', Die => 0, }, # customer unique id CustomerKey => 'sAMAccountName', # customer # CustomerID => 'company', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchPrefix => '', CustomerUserSearchSuffix => '*', CustomerUserSearchListLimit => 250, CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['sn', 'givenname'], # Configures the character for joining customer user name parts. Join single space if it is not defined. CustomerUserNameFieldsJoin => ' ', # show customer user and customer tickets in customer interface CustomerUserExcludePrimaryCustomerID => 0, AdminSetPreferences => 1, CacheTTL => 0, Map => [ # note: Login, Email and CustomerID needed! # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target, link class(es) [ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ], [ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLogin', Translatable('Username'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef ], [ 'UserFullLogin', Translatable('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef ], [ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ], [ 'UserCustomerID', Translatable('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef ], [ 'UserPhone', Translatable('Phone'), 'telephoneNumber', 1, 0, 'var', '', 1, undef, undef ], [ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ], [ 'UserAddress', Translatable('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef ], [ 'UserOffice', Translatable('Office'), 'physicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef ], [ 'UserDepartment', Translatable('Department'), 'department', 1, 0, 'var', '', 1, undef, undef ], [ 'UserComment', Translatable('Comment'), 'description', 1, 0, 'var', '', 1, undef, undef ], ], }; # macrohard customer user ldap backend and settings $Self->{CustomerUser4} = { Name => 'AD macrohard', Module => 'Kernel::System::CustomerUser::LDAP', Params => { # ldap host Host => 'macrohard.com', # ldap base dn BaseDN => 'dc=macrohard,dc=com', # search scope (one|sub) SSCOPE => 'sub', UserDN => 'ldap-bot@macrohard.com', UserPw => 'bot-password!?', AlwaysFilter => '(&(mail=*)(samAccountType=805306368)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))', SourceCharset => 'utf-8', Die => 0, }, # customer unique id CustomerKey => 'sAMAccountName', # customer # CustomerID => 'company', CustomerUserListFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchFields => ['sAMAccountName', 'cn', 'mail'], CustomerUserSearchPrefix => '', CustomerUserSearchSuffix => '*', CustomerUserSearchListLimit => 250, CustomerUserPostMasterSearchFields => ['mail'], CustomerUserNameFields => ['sn', 'givenname'], # Configures the character for joining customer user name parts. Join single space if it is not defined. CustomerUserNameFieldsJoin => ' ', # show customer user and customer tickets in customer interface CustomerUserExcludePrimaryCustomerID => 0, AdminSetPreferences => 1, CacheTTL => 0, Map => [ [ 'UserTitle', Translatable('Title or salutation'), 'title', 1, 0, 'var', '', 1, undef, undef ], [ 'UserFirstname', Translatable('Firstname'), 'givenname', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLastname', Translatable('Lastname'), 'sn', 1, 1, 'var', '', 1, undef, undef ], [ 'UserLogin', Translatable('Username'), 'sAMAccountName', 1, 1, 'var', '', 1, undef, undef ], [ 'UserFullLogin', Translatable('FullUsername'), 'userPrincipalName', 1, 1, 'var', '', 1, undef, undef ], [ 'UserEmail', Translatable('Email'), 'mail', 1, 1, 'var', '', 1, undef, undef ], [ 'UserCustomerID', Translatable('CustomerID'), 'company', 0, 1, 'var', '', 1, undef, undef ], [ 'UserPhone', Translatable('Phone'), 'telephoneNumber', 1, 0, 'var', '', 1, undef, undef ], [ 'UserMobile', Translatable('Mobile'), 'mobile', 1, 0, 'var', '', 1, undef, undef ], [ 'UserAddress', Translatable('Address'), 'postaladdress', 1, 0, 'var', '', 1, undef, undef ], [ 'UserOffice', Translatable('Office'), 'physicalDeliveryOfficeName', 1, 0, 'var', '', 1, undef, undef ], [ 'UserDepartment', Translatable('Department'), 'department', 1, 0, 'var', '', 1, undef, undef ], [ 'UserComment', Translatable('Comment'), 'description', 1, 0, 'var', '', 1, undef, undef ], ], }; 

الخاتمة


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

ما تبقى في البحر من هذه المادة؟

  • بالتوازي مع LDAP ، يمكنك أيضًا تشغيل تفويض SSO ، مما سيجعل الحياة أسهل للعملاء
  • إذا كان لديك متخصصون في Perl ، فيمكنك كتابة الخلفية الخاصة بك للاتصال بأنظمة المعلومات الأخرى.
  • تم تبسيط التكوين عن عمد ، على سبيل المثال ، لا توجد وحدات ترشيح بالانتماء إلى مجموعات LDAP ، ولا توجد لاحقات مجال ، BASE DN ، العمل مع سمات إضافية ، والعمل مع LDAP على منافذ أخرى وأكثر من ذلك بكثير

يتم الترحيب بالنصائح والتوضيحات في التعليقات والمعلومات حول الأخطاء المطبعية - في PM.

شكرا لاهتمامكم شكر خاص للمؤلفين الذين استخدمت موادهم على OTRS منذ سنوات عديدة عندما تعرفت على هذا النظام: Turilion ، supersuperoleg ، wmlex

Source: https://habr.com/ru/post/ar437596/


All Articles