Cara menggunakan pustaka yang sama lebih dari sekali di NSS (Name Service Switch)

8

Apakah ada solusi umum untuk menggunakan perpustakaan NSS tunggal dua (atau lebih) kali?

Dalam kasus saya, saya memiliki dua server LDAP, satu lokal pada mesin itu sendiri dan satu remote. Saya perlu membuat NSS berfungsi dengan keduanya (menggunakan yang jauh jika lokal tidak memiliki entri yang diperlukan).

Saat ini telah diselesaikan sehingga perpustakaan tunggal ( PADL / nss_ldap ) dibangun dua kali. Dalam kedua kasus sebelum bangunan seddigunakan untuk mengubah semua nss_ldapkejadian dalam sumber ke sesuatu yang lain. Untuk setiap kasus digunakan teks yang berbeda (seperti nss_ldap_1dan nss_ldap_2). Hasil build diubah namanya sesuai. Kedua binari disimpan pada sistem target dan disebut dalam /etc/nsswitch.conf.

Juga kedua pustaka tersebut menggunakan file konfigurasi yang berbeda /etc/(jika tidak, tidak masuk akal!). Namun ini dilakukan dengan mudah dengan hanya mengubah argumen dalam configureskrip pustaka yang dijalankan sebelum membangun.

Tapi itu tidak "terasa benar". Apakah ada pendekatan lain?

Apa yang dapat saya bayangkan adalah bahwa pustaka NSS sendiri dapat mendukung banyak konfigurasi sehingga dapat berfungsi sebagai dua "instance tunggal". Tetapi ini sulit dicapai jika Anda bukan penulis perpustakaan. Juga memerlukan permintaan perpustakaan berikutnya untuk kedua konfigurasi sementara satu mungkin lebih memilih untuk memiliki beberapa perpustakaan lain di antaranya.

Pendekatan lain adalah dengan menulis forwarder sederhana yang hanya memanggil beberapa perpustakaan lain dengan konfigurasi yang berbeda. Tapi ini lagi mengharuskan perpustakaan lain entah bagaimana dapat dikonfigurasi ulang (jika hanya menggunakan beberapa file konfigurasi tetap di /etcforwarder akan berfungsi seperti versi pertama). Dan itu juga berfungsi hanya sekali - memiliki perpustakaan yang digunakan tiga kali atau lebih masalah yang sama kembali sekarang dengan forwarder itu sendiri.

Adam Badura
sumber
Wow, terkejut karena berhasil — bukankah mereka mencoba membaca dari file konfigurasi yang sama? Atau apakah Anda mengubah nama file konfigurasi juga?
derobert
1
Bagaimana kalau menggunakan sss?
Stéphane Chazelas
@ StéphaneChazelas Saya pikir sssd dimaksudkan untuk bekerja dengan satu sistem LDAP yang otoritatif, di mana semua server LDAP berbicara untuk memiliki data yang sama. OP tampaknya menginginkan beberapa server dengan data yang berbeda, dan beberapa pencarian melawan server1 dan pencarian lainnya terhadap server2.
derobert
@derobert, tidak, sssd harus bekerja dengan beberapa penyedia independen.
Stéphane Chazelas
2
Di sisi lain Anda mungkin menemukan bahwa itu memecahkan beberapa hal lain seperti caching kredensial yang tepat dan lebih banyak fleksibilitas dalam konfigurasi.
Stéphane Chazelas

Jawaban:

4

Sayangnya, Anda tidak dapat melakukan ini dengan implementasi NSS dari GNU libc. Anda memperhatikan masalah mendasar, izinkan saya menyajikannya dari sudut yang berbeda: nsswitch.confsintaksis tidak memungkinkan untuk memberikan info tambahan ke modul layanan NSS, sehingga mereka tidak bisa berperilaku berbeda pada pemanggilan berulang. Jadi itu tidak didukung dari sisi libc atau dari sisi modul. Selain itu, glibc membuat titik layanan menjaga modul layanan yang langsung ditautkan objek bersama, yang mengecualikan segala tipu penautan.

Yang bisa Anda lakukan adalah membuat direktori meta dari dua direktori LDAP Anda dan menggunakannya di konfigurasi NSS Anda. OpenLDAP mendukung ini dengan baik, lihat slapd-meta(5)halaman manual atau intro gabungan ini misalnya. Tentu saja Anda tidak perlu slapdcontoh baru untuk ini jika Anda dapat mengkonfigurasi salah satu dari keduanya.

(Dan bukannya nss-ldapdigunakan nss-ldapdjika Anda bisa.)

Ferenc Wágner
sumber