OpenLDAP, Samba dan penuaan kata sandi

13

Saya mengonfigurasi sistem di mana semua sumber daya TI tersedia melalui satu pasangan pengguna-kata sandi, baik itu akses ke shell di server, masuk ke domain Samba, WiFi, OpenVPN, Mantis, dll. (Dengan akses ke layanan spesifik yang diatur berdasarkan keanggotaan grup atau bidang objek pengguna). Karena kami memiliki data pribadi di jaringan kami, kami perlu menerapkan penuaan kata sandi, sesuai dengan Petunjuk Perlindungan Data Uni Eropa (atau lebih tepatnya versi Polandia).

Masalahnya adalah bahwa akun Samba dan POSIX di LDAP menggunakan informasi hashing dan penuaan kata sandi yang berbeda. Meskipun menyinkronkan kata sandi itu sendiri adalah hal yang mudah ( ldap password sync = Yesdalam smb.conf), menambahkan penuaan kata sandi ke dalam campuran memecah hal-hal: Samba tidak memperbarui shadowLastChange. Bersama-sama dengan obey pam restrictions = Yesmenciptakan sistem di mana pengguna windows tidak dapat mengubah kata sandi lama, tetapi jika saya tidak menggunakannya, direktori home tidak akan secara otomatis dibuat. Alternatifnya adalah menggunakan penggunaan operasi diperluas LDAP untuk mengubah kata sandi, tetapi smbk5pwdmodul juga tidak mengaturnya. Yang lebih parah, pengelola OpenLDAP tidak akan memperbaruinya / menerima tambalan karena bidang ini dianggap sudah usang.

Jadi, pertanyaan saya adalah, apa solusi terbaik? Apa kelebihan dan kekurangannya?

  1. Gunakan ppolicypenuaan kata sandi LDAP dan LDAP internal?

    1. Seberapa baik kerjanya dengan NSS, modul PAM, samba, sistem lain?
    2. Apakah modul NSS dan PAM perlu dikonfigurasi dengan cara khusus untuk menggunakan ppolicy, bukan shadow?
    3. Apakah GOsa² berfungsi dengan ppolicy?
    4. Apakah ada alat administratif lain yang dapat bekerja dengan ppolicyLDAP yang diaktifkan?
  2. Retas bersama skrip kata sandi perubahan yang memperbarui bidang dalam LDAP. (meninggalkan kemungkinan bahwa pengguna sendiri akan memperbarui bidang tanpa mengubah kata sandi)

Hubert Kario
sumber
Ini adalah pertanyaan yang ditulis dengan sangat bagus. Kuharap aku bisa membantumu ...
gWaldo

Jawaban:

1

Saya menulis overlay OpenLDAP saya sendiri yang dipanggil shadowlastchangeuntuk memperbarui shadowLastChangeatribut setiap kali terjadi perubahan kata sandi EXOP. Ini diaktifkan di slapd.conf:

moduleload smbk5pwd
moduleload shadowlastchange
...

database bdb
...
overlay smbk5pwd
overlay shadowlastchange

Saya telah mengkonfigurasi smb.confuntuk mengubah kata sandi melalui EXOP:

ldap passwd sync = Only

Kemudian, untuk setiap akun, setel shadowMaxke jumlah hari kata sandi valid. Modul OpenLDAP menangani sisanya!

200_sukses
sumber
Sudahkah Anda mencoba menjalankannya bersama dengan ppolicy?
Hubert Kario
Tidak. Tolong coba dan beri tahu saya bagaimana hasilnya.
200_sukses
Sepertinya salah satu ppolicyatau smbk5pwdoverlay di Debian memeras OpenLDAP melakukan pembaruan shadowLastChange. Yay untuk Debian!
Hubert Kario
1

Sebagai gap-gap saya membuat skrip untuk Samba yang akan memperbarui shadowLastChangeperubahan kata sandi pada:

#!/bin/sh
# script to update shadowLastChange when samba updates passwords
# it's not needed when using 'passwd', it does update the field,
# even if pam_ldap is using LDAP Extented Operation to change password

LDAP_MODIFY="/usr/bin/ldapmodify"
LDAP_SEARCH="/usr/bin/ldapsearch"
LDAP_USER="uid=shadow-update,ou=Services,dc=example,dc=com"
LDAP_PASSWORD="change-me"
LDAP_HOST="localhost"

# get date
SLC=$((`date '+%s'` / 24 / 3600))

# get user login name
user=$1

# find user's DN
dn=$($LDAP_SEARCH -x -h $LDAP_HOST -LLL -b dc=example,dc=com "(uid=$user)" dn)
dn=${dn#dn:}

# check if DN is not base64 encoded
if [ "${dn:0:1}" = ":" ]; then
        # update password change date
        echo "dn:$dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
else
        # update password change date
        echo "dn: $dn
changetype: modify
replace: shadowLastChange
shadowLastChange: $SLC" | cat | $LDAP_MODIFY -x -h "$LDAP_HOST" \
 -D "$LDAP_USER" -w "$LDAP_PASSWORD" > /dev/null 2>&1
fi

err=$?

if [ ! $err -eq 0 ]; then
   echo "error: can't update shadowLastChange: $err"
   echo "`date`: shadow.sh: can't update shadowLastChange: $err"\
       >> /var/log/shadow-update.log
   exit;
fi

echo OK

Di Samba config perlu unix password syncdiatur ke yes, passwd chatatur ke *OK*dan passwd programke skrip di atas dengan "%u"sebagai param.

Akun yang ditentukan dalam LDAP_USERperlu dibuat dalam LDAP dan diberikan izin untuk membaca uidsemua pengguna Samba dan hak untuk menulis shadowLastChange.

Hubert Kario
sumber
1

(sedang dalam proses, saya akan menambahkan detail nanti)

Berita baik semuanya! Saya mendapatkan semuanya berfungsi, kurang lebih ..., dalam lingkungan pengujian ...:

  1. Kebijakan kata sandi (baik kualitas dan waktu) diberlakukan pada tingkat OpenLDAP (terima kasih kepada ppolicy, not24getdan passwdqc)
  2. Kata sandi disinkronkan antara Samba dan POSIX dalam dua cara (terima kasih kepada smbk5pwd). Catatan: Pemeriksaan kualitas dengan Samba dan ppolicy tidak jelas: password check script( pwqcheck -1dari passwdqc) perlu melakukan pemeriksaan yang sama dengan yang dilakukan LDAP atau pengguna akan mendapatkan Izin Ditolak alih-alih "Terlalu mudah kata sandi, coba yang lain".
  3. Baik PAM dan Samba memperingatkan pengguna bahwa kata sandi akan segera kedaluwarsa.
  4. Direktori pengguna yang dibuat menggunakanpam_mkhomedir
  5. Implementasi GOsa² dari RFC2307bis (dan skema terkait) menyisipkan uidentri grup, sehingga aplikasi mengharapkan NIS (sebagian besar barang "UNIXy") atau skema RFC2307bis (sebagian besar aplikasi "dirancang untuk AD") bekerja dengan baik.

Satu-satunya masalah adalah bahwa menonaktifkan akun memerlukan penggunaan alat CLI (atau menulis skrip postmodify GOsa) atau akun tidak akan dikunci pada tingkat LDAP, hanya untuk PAM dan Samba. Kedaluwarsa kata sandi masih akan diberlakukan, jadi itu bukan masalah besar.

Hubert Kario
sumber
0

Saya mendapat jawaban dari salah satu pengembang GOsa. Saat ini GOsa tidak mendukung overlay ppolicy dengan cara apa pun.

Hubert Kario
sumber