Banyak panduan telah ditulis tentang OpenVPN, termasuk otorisasi melalui Active Directory. Sebagian besar dari mereka mulai menggunakan LDAP, saya tidak menemukan pendekatan menggunakan Kerberos, yang ditulis dalam artikel lengkap. Namun, sesuatu yang baru tidak akan ditemukan di sini, saya hanya mengkompilasi apa yang telah dilakukan sebelumnya, PAM berfungsi baik dengan Kerberos, dan OpenVPN memiliki plugin PAM asli. Saya juga memutuskan untuk meninggalkan sertifikat dan kiat pengguna, di mana mereka hanya menyarankan agar semua pengguna mengeluarkan satu sertifikat, mereka tidak cocok untuk saya, jadi solusi lain ditemukan yang bekerja pada semua klien.

Sedikit tentang NSS
Dalam kasus saya, saya menggunakan Centos 7 bersamaan dengan sssd. Namun, tidak ada yang mencegah menggunakan winbind. Yang utama adalah memiliki mobil di domain dan tiket Kerberos. Saya tidak akan menulis tentang bagaimana ini dilakukan, karena Saya tidak akan mengatakan sesuatu yang baru, ada banyak manual bagus di jaringan.
Anda perlu mengubah pengaturan
/etc/nsswitch.conf
jika ini belum pernah dilakukan sebelumnya. Bergantung pada modul mana yang digunakan, Anda harus memasukkan
sss atau winbind alih-alih module_name. Deskripsi parameter dapat dibaca menggunakan
man nsswitch.conf
.
Pengaturan berikut harus memadai:
passwd: files module_name shadow: files module_name group: files module_name
Dalam kasus sssd, kami tidak lupa, antara lain, bahwa di
/etc/sssd/sssd.conf
di blok [sssd], nss harus disebutkan:
services = nss, pam
Sedangkan untuk winbind, sulit bagi saya untuk mengatakan sesuatu, saya belum menggunakannya.
Tujuan utamanya adalah untuk mendapatkan hasil yang benar dari getent. Periksa apakah mesin dapat menerima informasi tentang pengguna dan grup domain:
> getent passwd kanlas kanlas:*:14123583:1257570:Kanlas Kanlasovich:/home/kanlas@example.com:/bin/bash > getent group VPN vpn:*:13821391:kanlas,igor,marina
CatatanJika Anda menggunakan sssd dan data pengguna hanya diperoleh dengan nama lengkap (mis. Kanlas@example.com), tambahkan use_fully_qualified_names = False
Parameter use_fully_qualified_names = False
dalam sssd.conf di blok domain
Konfigurasikan PAM
Sekarang Anda perlu membuat modul PAM Anda sendiri. Agar tidak menggunakan sistem access.conf, kami akan membuat file terpisah dari mana grup akses akan dibaca. Saya tidak begitu mahir dalam modul PAM, jadi saya tidak bisa mengatakan apakah semua baris diperlukan dalam contoh di bawah ini. Secara umum, kami hanya tertarik pada
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups
baris yang
account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups
.
Opsi termudah adalah dengan mengambil, misalnya, modul login dan menambahkan baris yang diinginkan. Yang sudah dilakukan.
Kami mendapatkan:
#%PAM-1.0 auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so auth substack system-auth auth include postlogin account required pam_listfile.so onerr=fail item=group sense=allow file=/etc/openvpn/auth/access-groups account include system-auth password include system-auth session required pam_selinux.so close session required pam_loginuid.so session optional pam_console.so session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so
Kami menaruhnya di
/etc/pam.d
, menamakannya atas kebijakan kami.
Di
/etc/openvpn/auth/access-groups
, ditentukan dalam modul, grup akses akan ditulis di sini, Anda dapat menentukan jalur Anda jika diinginkan. Anda harus menentukan nama grup (Nama Umum) dengan domain. Dalam kasus saya, saya menulis
VPN@example.com di sana.
Masih menjelaskan kepada OpenVPN bahwa perlu menggunakan PAM. Kami menempatkan baris berikut dalam konfigurasi server:
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so __pam username-as-common-name
Distribusi yang berbeda mungkin memiliki jalur yang berbeda! Periksa file berdasarkan jalur, atau gunakan temukan.Penggunaan parameter username-as-common-name disebabkan oleh fakta bahwa jika tidak, setelah klien memiliki auth-user-pass,
nama yang ditentukan dalam sertifikat akan dikirim ke server.Di konfigurasi klien, tambahkan baris
auth-user-pass
Pada pengaturan ini selesai, Anda dapat menguji.
Kami menghapus sertifikat pengguna
Sekarang kami memiliki otorisasi melalui domain dan sertifikat pengguna tidak berguna, meninggalkannya sepertinya keputusan yang logis. Tetapi klien seluler memiliki masalah dengan ini, sama sekali tidak menerima konfigurasi seperti itu, sementara yang desktop, meskipun mereka bekerja, mengutuk dengan kejam. Pertama, kami akan mengkonfigurasi ulang server sehingga tidak lagi memerlukan sertifikat.
verify-client-cert none
Selanjutnya, kita tambahkan ke konfigurasi klien
setenv CLIENT_CERT 0
Itu saja, sekarang pelanggan tidak akan bersumpah pada sertifikat. Sangat lucu bahwa opsi ini disembunyikan di bagian
tanya jawab untuk iOS . Saya belum menguji di iOS, tetapi Android, serta MacOS (
klien beta ) dan Windows menerima pengaturan ini dengan keras. Hanya
klien OpenVPN pihak ketiga di Android yang belum bisa melakukan ini (saat artikel ini sedang ditulis, mereka sudah bisa memperbaikinya).