OpenLDAP, Samba และการเพิ่มรหัสผ่าน


13

ฉันกำลังกำหนดค่าระบบที่ใช้ทรัพยากรไอทีทั้งหมดผ่านคู่ผู้ใช้ - รหัสผ่านเดียวไม่ว่าจะเป็นการเข้าถึงเชลล์บนเซิร์ฟเวอร์การเข้าสู่ระบบโดเมน Samba, WiFi, OpenVPN, Mantis ฯลฯ (ด้วยการเข้าถึงบริการเฉพาะที่ควบคุม ตามความเป็นสมาชิกกลุ่มหรือฟิลด์วัตถุผู้ใช้) เนื่องจากเรามีข้อมูลส่วนบุคคลในเครือข่ายของเราเราจำเป็นต้องใช้การกำหนดอายุรหัสผ่านตามคำสั่งการคุ้มครองข้อมูลของสหภาพยุโรป (หรือค่อนข้างเป็นเวอร์ชั่นโปแลนด์)

ปัญหาคือบัญชี Samba และ POSIX ใน LDAP ใช้ข้อมูลการแฮชรหัสผ่านและข้อมูลอายุที่แตกต่างกัน ในขณะที่การซิงโครไนซ์รหัสผ่านด้วยตนเองนั้นเป็นเรื่องง่าย ( ldap password sync = Yesในsmb.conf) การเพิ่มอายุรหัสผ่านให้กับการมิกซ์: Samba ไม่ได้ปรับปรุง shadowLastChange ร่วมกับobey pam restrictions = Yesสร้างระบบที่ผู้ใช้ windows ไม่สามารถเปลี่ยนรหัสผ่านเก่า แต่ถ้าฉันไม่ได้ใช้ไดเรกทอรีบ้านจะไม่ถูกสร้างขึ้นโดยอัตโนมัติ ทางเลือกคือใช้ใช้การทำงานแบบขยายของ LDAP สำหรับการเปลี่ยนรหัสผ่าน แต่smbk5pwdโมดูลไม่ได้ตั้งค่าไว้ สิ่งที่แย่กว่านั้นคือผู้ดูแล OpenLDAP จะไม่อัปเดต / ยอมรับแพตช์

ดังนั้นคำถามของฉันคือทางออกที่ดีที่สุดคืออะไร อะไรขึ้นและลงของพวกเขาคืออะไร?

  1. ใช้ LDAP ppolicyและอายุรหัสผ่าน LDAP ภายในหรือไม่

    1. ระบบ NSS, PAM, samba และระบบอื่น ๆ ใช้งานได้ดีเพียงใด
    2. จำเป็นต้องกำหนดค่าโมดูล NSS และ PAM ด้วยวิธีพิเศษเพื่อใช้ ppolicy ไม่ใช่เงาหรือไม่?
    3. ไม่GOsa²ทำงานกับ ppolicy?
    4. มีเครื่องมือการดูแลระบบอื่น ๆ ที่สามารถทำงานกับ - เปิดppolicyใช้งาน LDAP ได้หรือไม่
  2. แฮ็คสคริปต์เปลี่ยนรหัสผ่านพร้อมกันซึ่งจะอัปเดตฟิลด์ใน LDAP (ทิ้งความเป็นไปได้ที่ผู้ใช้เองจะอัปเดตฟิลด์โดยไม่เปลี่ยนรหัสผ่าน)


นี่เป็นคำถามที่เขียนอย่างเชี่ยวชาญ ฉันหวังว่าฉันจะช่วยคุณได้ด้วย ...
gWaldo

คำตอบ:


1

ฉันเขียนทับซ้อน OpenLDAP ของฉันเองshadowlastchangeเพื่อเรียกใช้อัปเดตshadowLastChangeแอตทริบิวต์ทุกครั้งที่มีการเปลี่ยนรหัสผ่าน EXOP มันเปิดใช้งานในslapd.conf:

moduleload smbk5pwd
moduleload shadowlastchange
...

database bdb
...
overlay smbk5pwd
overlay shadowlastchange

ฉันกำหนดค่าsmb.confให้เปลี่ยนรหัสผ่านผ่าน EXOP:

ldap passwd sync = Only

จากนั้นสำหรับแต่ละบัญชีให้ตั้งค่าshadowMaxเป็นจำนวนวันที่รหัสผ่านนั้นถูกต้อง โมดูล OpenLDAP ดูแลส่วนที่เหลือ!


คุณได้ลองใช้งานพร้อมกับ ppolicy หรือไม่?
Hubert Kario

ไม่โปรดลองและแจ้งให้เราทราบว่ามันเป็นอย่างไร
200_success

ดูเหมือนว่าทั้งสองppolicyหรือsmbk5pwdซ้อนทับใน Debian บีบ OpenLDAP ทำshadowLastChangeปรับปรุง Yay สำหรับ Debian!
Hubert Kario

1

ในฐานะช่องว่างหยุดฉันสร้างสคริปต์สำหรับ Samba ที่จะอัปเดตการshadowLastChangeเปลี่ยนรหัสผ่าน:

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

ใน Samba ปรับแต่งมันต้องunix password syncตั้งค่าให้yes, passwd chatการตั้งค่าให้*OK*และpasswd programสคริปต์ข้างต้นด้วย"%u"เป็นพระราม

บัญชีที่ระบุไว้ในLDAP_USERความต้องการที่จะสร้างใน LDAP และได้รับสิทธิ์ในการอ่านของผู้ใช้ทั้งหมดแซมบ้าและสิทธิในการเขียนuidshadowLastChange


1

(กำลังดำเนินการฉันจะเพิ่มรายละเอียดในภายหลัง)

ข่าวดีสำหรับทุกคน! ฉันได้ทำงานทั้งหมดแล้วไม่มากก็น้อย ... ในสภาพแวดล้อมการทดสอบ ... :

  1. นโยบายรหัสผ่าน (ทั้ง quality- และเวลาที่ชาญฉลาด) จะถูกบังคับใช้ในระดับ OpenLDAP (ขอบคุณppolicy, not24getและpasswdqc)
  2. รหัสผ่านถูกซิงโครไนซ์ระหว่าง Samba และ POSIX ทั้งสองวิธี (ขอบคุณsmbk5pwd) หมายเหตุ: การตรวจสอบคุณภาพด้วย Samba และ ppolicy ไม่ชัดเจน: password check script( pwqcheck -1จากpasswdqc) ต้องดำเนินการตรวจสอบแบบเดียวกับที่ LDAP ทำหรือผู้ใช้จะได้รับการอนุญาตที่ถูกปฏิเสธแทน "รหัสผ่านง่ายเกินไปลองแตกต่าง"
  3. ทั้ง PAM และ Samba เตือนผู้ใช้ว่ารหัสผ่านจะหมดอายุเร็ว ๆ นี้
  4. ไดเรกทอรีผู้ใช้ถูกสร้างขึ้นโดยใช้pam_mkhomedir
  5. การติดตั้งGOsa²ของ RFC2307bis (และสคีมาที่เกี่ยวข้อง) แทรกลงuidในรายการกลุ่มดังนั้นแอปพลิเคชันคาดหวังว่า NIS (ส่วนใหญ่ของสิ่ง "UNIXy") หรือสคีมา RFC2307bis (ส่วนใหญ่ "ออกแบบมาสำหรับโฆษณา") ทำงานได้ดี

ปัญหาเดียวคือการปิดใช้งานบัญชีต้องใช้เครื่องมือ CLI (หรือเขียนสคริปต์ปรับเปลี่ยน GOsa) หรือบัญชีจะไม่ถูกล็อคในระดับ LDAP เพียงสำหรับ PAM และ Samba การหมดอายุของรหัสผ่านจะยังคงมีผลบังคับใช้ดังนั้นจึงไม่ใช่ปัญหาใหญ่


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.