OTRS: Otentikasi, otorisasi, dan sinkronisasi LDAP (FreeIPA, AD)

gambar

OTRS adalah Sistem Permintaan Tiket Open-source yang ditulis dalam Perl.

Ada dua opsi:


Saya akan mencantumkan sedikit fungsional yang didukung sistem ini:

  • Modul ITSM (Manajemen Tingkat Layanan, Manajemen Perubahan, Manajemen Konfigurasi, CMDB)
  • antarmuka web responsif
  • API
  • SLA dan layanan
  • multi-tenant
  • eskalasi
  • Otentikasi: DB, LDAP, HTTPBasicAuth, Radius
  • mendukung MySQL, MariaDB, PostgreSQL, Oracle

Dan jika Anda mencari kekurangan di dalamnya, itu merupakan antarmuka dan kompleksitas yang tidak biasa dalam pengaturannya. Di bawah potongan - tentang dasar-dasar otorisasi (grup, RBAC, dukungan untuk beberapa perusahaan klien), otentikasi dan sinkronisasi metadata (nama, telepon, dll.) Menggunakan berbagai direktori LDAP

Klien, Antrean, Agen, dan Grup


Setelah menginstal OTRS, Anda akan langsung memiliki akses ke:

  • pelanggan - dapat membuat aplikasi dengan mengirim surat atau menggunakan akses web
  • antrian - setiap aplikasi termasuk dalam salah satu antrian aplikasi
  • Agen - profesional TI yang mengerjakan eksekusi aplikasi dari antrian yang tersedia bagi mereka
  • grup - entitas yang menghubungkan antrian, klien dan agen, serta menetapkan hak-hak agen - misalnya, hanya baca, ubah prioritas aplikasi, dll.

gambar

Grup standar


Setelah menginstal sistem, Anda akan melihat tiga grup yang dibuat:

  • admin - anggota grup dapat mengelola (mengkonfigurasi) OTRS
  • stats - kemampuan untuk menyesuaikan dan menjalankan laporan
  • pengguna - grup standar untuk klien, antrian dan agen

Hak Terkait Grup


Hak Dasar


Hak-hak utama yang dapat dikonfigurasi dalam grup yang membatasi tindakan agen:

  • baca - saja - baca --hanya hak dalam aplikasi di grup / antrian ini
  • move - hak untuk memindahkan permintaan ke grup / antrian ini
  • kreasi - hak untuk membuat aplikasi dalam grup / antrian ini
  • note - hak untuk menambahkan catatan ke aplikasi dalam grup / antrian ini
  • pemilik - hak untuk mengubah pemilik aplikasi dalam grup / antrian ini
  • priority - hak untuk mengubah prioritas aplikasi dalam grup / antrian ini
  • baca / tulis - izin baca dan tulis penuh untuk permintaan dalam grup / antrian ini

Hak tambahan


Ada juga hak tambahan, tampilan yang dapat diaktifkan di pengaturan (Sistem :: Izin):

  • laporan - menyediakan akses ke halaman laporan
  • redirect - hak untuk mengalihkan / memantulkan pesan email (redirect / bouncing tautan di ticketZoom)
  • buat - hak untuk menyusun respons terhadap aplikasi
  • pelanggan - hak untuk mengubah pelanggan untuk aplikasi ini
  • maju - hak untuk meneruskan pesan (menggunakan tombol Maju)
  • tertunda - hak untuk mentransfer aplikasi yang tertunda
  • phone - hak untuk menambahkan konten panggilan klien ke aplikasi dalam bentuk pesan / catatan
  • Bertanggung jawab - Hak untuk mengubah orang yang bertanggung jawab atas aplikasi

Pertimbangkan ini secara lebih rinci:

  • setiap klien dapat dimasukkan dalam satu atau beberapa grup, awalnya semua klien adalah anggota grup pengguna
  • setiap antrian pesanan dikaitkan dengan salah satu grup
  • melalui antarmuka web, klien dapat membuat permintaan di antrian mana kelompok di mana ia termasuk memiliki akses
  • ketika klien mengirim permintaan melalui email, dimungkinkan, berdasarkan analisis atribut surat (misalnya, alamat pengirim atau judul surat), untuk mengubah karakteristik aplikasi, termasuk antrian di mana aplikasi akan jatuh.
  • jika klien menelepon melalui telepon, agen dapat membuat aplikasi secara manual dengan memilih salah satu antrian yang tersedia untuk agen
  • diinginkan bahwa aplikasi klien selalu dalam antrian yang tersedia untuk klien, jika tidak, ia tidak akan dapat mengaksesnya melalui antarmuka web
  • agen dapat melakukan tindakan dalam aplikasi sesuai dengan hak antrian di mana aplikasi berada

gambar

Otentikasi Basis Data


Cara standar untuk mengotentikasi dan mengotorisasi agen dan klien adalah melalui database.

Misalnya, pengaturan autentikasi agen menggunakan database terlihat seperti ini:

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

Pelanggan:

 $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'; 

Kami juga akan meninggalkan metode otentikasi ini dan menambahkan otentikasi melalui LDAP.

Peran dan Perusahaan


Kami juga akan memperluas kemampuan otorisasi dengan menambahkan peran dan perusahaan:

  • peran - memungkinkan kontrol akses yang lebih fleksibel dengan menghubungkan kelompok dan agen
  • perusahaan - memungkinkan mengisolasi aplikasi dari berbagai klien (apakah itu departemen atau perusahaan yang berbeda)

gambar

Pernyataan masalah


Anda adalah administrator sistem OTRS di my-it-company.com, sebuah perusahaan yang menyediakan layanan kepada perusahaan lain (atau unit dalam holding Anda).

Anda benar-benar tidak ingin membuat agen dan akun pelanggan baru secara manual, serta mengisi informasi tambahan, seperti alamat email, nomor telepon, posisi, alamat, dan nomor kabinet - setelah semua, ini sudah ada di direktori LDAP.

Dan perusahaan Anda juga akan menerima keuntungan yang jelas - satu kata sandi karyawan di semua sistem, memblokir akun di LDAP akan memblokir akses ke semua layanan lainnya.

my-it-company.com berjalan di Linux dan menggunakan Red Hat FreeIPA sebagai server direktori, dan departemen yang Anda layani menggunakan berbagai hutan Direktori Aktif Microsoft yang dengannya Anda tidak memiliki federasi, tetapi Anda dapat terhubung ke pengontrol domain.

Anda perlu memisahkan aliran aplikasi dari klien yang berbeda, serta mengimplementasikan berbagai tingkat akses agen ke antrian - manajer harus dapat mengubah prioritas tugas dalam sistem.

Karyawan perusahaan Anda juga dapat menetapkan tugas dalam sistem untuk kebutuhan internal my-it-company.com , kadang-kadang sebagai agen dan pelanggan pada saat yang sama (dan kadang-kadang tidak).

gambar

Persiapan


Akun untuk melihat LDAP


Jika penelusuran anonim dari pohon direktori dilarang, kami akan membuat akun di domain my-it-company.com , pear.com dan macrohard.com yang haknya cukup bagi kami untuk membuat kueri LDAP (sebut saja, misalnya, ldap-bot)

Grup FreeIPA untuk menyinkronkan dengan peran OTRS


Kami akan membuat tiga grup pengguna di FreeIPA yang akan disinkronkan dengan peran OTRS kami, misalnya:

  • otrs-sa - anggota grup ini akan mendapatkan akses ke administrasi OTRS, tetapi kami tidak akan memberikan akses ke antrian, sehingga kami tidak ingin selalu bekerja di bawah administrator),
  • otrs-admin - manajer kami dengan hak untuk mengubah prioritas aplikasi) dan
  • otrs-helpdesk - akun spesialis kami

Atribut Perusahaan


Pilih atribut yang dengannya kami akan menentukan afiliasinya dengan perusahaan. Biarkan itu menjadi atribut "Organisasi". Misalnya, semuanya berubah secara organisasi dan teknis, dan semua pengguna di semua domain selalu memiliki nilai di bidang "Organisasi":

  • my-it-company - untuk karyawan my-it-company.com
  • pear-company - untuk karyawan pear.com
  • macrohard-company - untuk karyawan macrohard.com

Tentukan atribut pengguna yang digunakan oleh FreeIPA


Kami mempelajari skema FreeIPA, mencari tahu nama-nama atribut yang akan kami butuhkan untuk sinkronisasi (nama, login, telepon, dll.).

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

Kami mendapatkan kesimpulan yang serupa:
dn: uid = laptevs, cn = pengguna, cn = akun, dc = perusahaan saya, dc = com
uid: laptevs
diberikan nama: Stanislav
sn: Laptev
cn: Laptev Stanislav
inisial: SL
direktori home: / home / laptevs
gecos: Laptev Stanislav
loginshell: / bin / sh
krbcanonicalname: laptevs@MY-IT-COMPANY.COM
krbprincipalname: laptevs@MY-IT-COMPANY.COM
mail: laptevs@MY-IT-COMPANY.COM
uidnumber: 1344600003
gidnumber: 1344600003
l: Moskow
nomor telepon: +7 (863) 999-99-99
seluler: +7 (999) 999-99-99
ou: perusahaanku
judul: SysAdm
sshpubkeyfp: SHA256: Yi8mKF + j28 / r2cpxLgIbvZ / Oymt57rhliHKhqBuJxqE laptevs-dempul (ssh-rsa)
nsaccountlock: FALSE
kata sandi: BENAR
has_keytab: TRUE
displayName: Laptev Stanislav
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-admin, cn = grup, cn = akun, dc = perusahaan-saya-itu, dc = com
memberof: cn = ipauser, cn = grup, cn = akun, dc = perusahaan saya, dc = com
mepManagedEntry: cn = laptevs, cn = grup, cn = akun, dc = my-it-company, dc = com
objectClass: atas
objectClass: orang
objectClass: pengurus organisasi
objectClass: inetorgperson
objectClass: inetuser
objectClass: posixaccount
objectClass: krbprincipalaux
objectClass: krbticketpolicyaux
objectClass: ipaobject
objectClass: ipasshuser
objectClass: ipaSshGroupOfPubKeys
objectClass: mepOriginEntry

dn : uid = laptevs, cn = pengguna, cn = akun, dc = perusahaan saya, dc = com
uid : laptevs
diberikan nama : Stanislav
sn : Laptev
cn : Laptev Stanislav
mail : laptevs@MY-IT-COMPANY.COM
l : Moskow
nomor telepon : +7 (863) 999-99-99
seluler : +7 (999) 999-99-99
ou : perusahaanku
judul : SysAdm

Konfigurasikan OTRS


File konfigurasi


  • / opt / otrs / - sebagai aturan, file sistem OTRS ada di sini
  • Kernel / Config.pm - file konfigurasi yang sedang Anda edit
  • Kernel / Config / Defaults.pm - file dengan pengaturan standar, Anda tidak dapat mengeditnya, tetapi di dalamnya Anda dapat melihat semua parameter dan komentar yang ada di dalamnya

Pengaturan agen


Otentikasi agen


  # --------------------------------------------------- # # 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 # # --------------------------------------------------- # 

Agen Sinkronisasi (Grup LDAP dengan Peran 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 # # --------------------------------------------------- # 

Jika Anda memutuskan bahwa perannya tidak sesuai dengan Anda, dan Anda hanya menginginkan grup, saya akan memberikan dua contoh sinkronisasi grup LDAP dengan grup OTRS - disederhanakan dan dengan hak pengaturan untuk setiap grup.

Sinkronisasi agen alternatif (grup LDAP dengan grup OTRS, dengan hak)
  # --------------------------------------------------- # # 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 # # --------------------------------------------------- # 



Sinkronisasi agen alternatif yang disederhanakan (kelompok LDAP dengan peran OTRS dengan hak istimewa 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 # # --------------------------------------------------- # 



Pengaturan pelanggan


Otentikasi pelanggan


  # --------------------------------------------------- # # 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 # # --------------------------------------------------- # 

Sinkronisasi klien (memperoleh atribut klien dari LDAP, komunikasi dengan perusahaan 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 ], ], }; 

Kesimpulan


Seperti yang Anda lihat, pengaturan otentikasi dan sinkronisasi akun di OTRS sangat sederhana, tetapi saya harap artikel ini akan membantu mereka yang baru mulai berkenalan dengan sistem ini.

Apa yang tersisa dari artikel ini?

  • Sejalan dengan LDAP, Anda juga dapat menjalankan otorisasi SSO, yang akan membuat hidup lebih mudah bagi klien.
  • Jika Anda memiliki spesialis Perl, Anda dapat menulis backend Anda sendiri untuk terhubung ke sistem informasi lainnya.
  • Konfigurasi telah disederhanakan dengan sengaja, misalnya, tidak ada unit pemfilteran milik grup LDAP, tidak ada akhiran domain, BASE DN, bekerja dengan atribut tambahan, bekerja dengan LDAP di port lain dan banyak lagi

Tip dan klarifikasi disambut dalam komentar, informasi tentang kesalahan ketik - di PM.

Terima kasih atas perhatian anda Terima kasih khusus kepada penulis yang materinya tentang OTRS yang saya gunakan bertahun-tahun yang lalu ketika saya diperkenalkan dengan sistem ini: Turilion , supersuperoleg , wmlex

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


All Articles