ขั้นตอนที่จำเป็นในการรับรองความถูกต้องผู้ใช้จาก Active Directory ที่ทำงานบน Windows Server 2012 R2 ใน FreeBSD 10.0 ใช้sssdกับแบ็กเอนด์โฆษณาที่มี Kerberos TGT ทำงานอย่างไร
ขั้นตอนที่จำเป็นในการรับรองความถูกต้องผู้ใช้จาก Active Directory ที่ทำงานบน Windows Server 2012 R2 ใน FreeBSD 10.0 ใช้sssdกับแบ็กเอนด์โฆษณาที่มี Kerberos TGT ทำงานอย่างไร
คำตอบ:
มีข้อควรพิจารณาบางประการที่จะทำให้ทุกอย่างทำงานนอกกรอบได้ FreeBSD รองรับเฉพาะsssdเวอร์ชั่น 1.9.6 ในขณะนี้ ดังนั้นจึงไม่มีการสนับสนุนชื่อ Enterprise Principal
หากคุณมีโดเมนที่มี UPN ที่ไม่ตรงกันโดเมนจะไม่สามารถเข้าสู่ระบบได้เนื่องจากการรับรองความถูกต้อง Kerberos จะล้มเหลวในระหว่างกระบวนการแม้ว่า FreeBSD จะสนับสนุนชื่อหลักขององค์กรที่มี Kerberos ก็ตามsssdไม่สามารถจัดการกับกรณีนี้ได้
ดังนั้นในรุ่นจริงของsssdคุณจะถูก จำกัด ให้มีชื่อผู้ใช้หลักภายในชื่อโดเมนเดียวกันตัวอย่างเช่น:
Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
username@example.com sAMAccountName: username
การรู้สิ่งนี้เราสามารถอธิบายขั้นตอนในการตรวจสอบสิทธิ์ผู้ใช้จาก AD ใน FreeBSD ได้สำเร็จ
สร้างไฟล์/etc/krb5.confด้วยเนื้อหาดังต่อไปนี้:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes
ติดตั้ง Samba 4.1:
$ pkg install samba41
สร้างไฟล์/usr/local/etc/smb4.confด้วยเนื้อหาดังต่อไปนี้:
[global]
security = ads
realm = EXAMPLE.COM
workgroup = EXAMPLE
kerberos method = secrets and keytab
client signing = yes
client use spnego = yes
log file = /var/log/samba/%m.log
ขอตั๋ว Kerberos ผู้ดูแลระบบ:
$ kinit Administrator
จากนั้นเข้าร่วมโดเมนและสร้างแท็บคีย์
$ net ads join createupn=host/server-hostname.example.com@EXAMPLE.COM -k
$ net ads keytab create -k
ติดตั้งแพ็คเกจที่ต้องการ:
$ pkg install sssd cyrus-sasl-gssapi
แก้ไขไฟล์/usr/local/etc/sssd/sssd.confเพื่อให้ตรงกับการตั้งค่านี้:
[sssd]
config_file_version = 2
services = nss, pam
domains = example.com
[nss]
[pam]
[domain/example.com]
# Uncomment if you need offline logins
#cache_credentials = true
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
# Comment out if the users have the shell and home dir set on the AD side
default_shell = /bin/tcsh
fallback_homedir = /home/%u
# Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
#ldap_sasl_mech = GSSAPI
#ldap_sasl_authid = SERVER-HOSTNAME$@EXAMPLE.COM
แก้ไขไฟล์/etc/nsswitch.confเพื่อให้ตรงกับการตั้งค่านี้:
group: files sss
passwd: files sss
ติดตั้งแพ็กเกจเผื่อเลือกสำหรับการสร้างโฮมไดเร็กทอรี:
$ pkg install pam_mkhomedir
ปรับเปลี่ยนPAMอาณาจักรที่จำเป็นเพื่อให้ตรงกับการตั้งค่านี้:
auth sufficient /usr/local/lib/pam_sss.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user
session required /usr/local/lib/pam_mkhomedir.so mode=0700
session optional /usr/local/lib/pam_sss.so
password sufficient /usr/local/lib/pam_sss.so use_authtok
$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client
$ getent passwd <username>
คุณใช้ Kerberos ใดอยู่ที่นี่ built-in one หรือ security / krb5 จาก MIT?
เมื่อทำการติดตั้ง sssd จะต้องมีการติดตั้งความปลอดภัย / krb5 ซึ่งขณะนี้ยังถือว่าเป็นรุ่นทดลองใน FreeBSD ดังนั้นคำถามนี้
ฉันไม่มีโชคในการรับผู้ใช้ AD / กลุ่มเมื่อดำเนินการคำสั่ง 'getent' อาจเป็นเพราะความจริงที่ว่าชื่อ NETBIOS แตกต่างจากชื่อโดเมน - ฉันในกรณีของฉันชื่อโดเมนคือ dawnsign.com และชื่อ NETBIOS เป็น DSP
ฉันกำหนดค่าโมดูลล็อกอิน pam.d เท่านั้น โมดูล pam อื่นใดที่ต้องได้รับการแก้ไขเพื่อให้การพิสูจน์ตัวตนประสบความสำเร็จ
ข้อมูลเพิ่มเติมใด ๆ ที่จะได้รับการชื่นชมอย่างมาก!
การคอมไพล์ซ้ำ samba4 จากพอร์ตเป็นไปได้ที่จะใช้ autentication winbind เช่น linux แม้ไม่มี sssd เพียงคอมไพล์ samba4 จากพอร์ตหลังจากเปิดใช้งาน sasl ldap
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
นี่จะคอมไพล์แซมบ้าใหม่พร้อมการสนับสนุนที่จำเป็นทั้งหมด (gssapi, ldap, kerberos) จากนั้นแก้ไข nsswitch.conf เช่นนี้
passwd: files winbind
group: files winbind
สวัสดี
นี่คือการอัปเดตเล็ก ๆ เกี่ยวกับการใช้ sssd v1.11.7
หากคุณใช้ "id_provider = ad" และคุณเห็นข้อผิดพลาดต่อไปนี้ในไฟล์บันทึกการทำงาน sssd:
/var/log/sssd/sssd_example.com.log
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]
คุณสามารถใช้ขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหานี้และทำให้การรวม AD ทำงานอย่างถูกต้อง ตอนนี้สร้าง sssd v1.11.7 ด้วยการรองรับ Samba การสร้างจาก src sssd เป็นสิ่งจำเป็นดังนั้นมันจึงเชื่อมโยงกับ libsasl2
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
การติดตั้ง (และบรรจุภัณฑ์ที่สนุกสนานและปัญหาการพึ่งพา)
/usr/binและอื่น /usr/local/binๆ เนื่องจากดูเหมือนว่าไม่มีไฟล์ระบบพื้นฐานอยู่ในแพ็คเกจคุณจึงไม่สามารถลบสิ่งที่ Heimdal KRB ได้ สิ่งที่ต้องระวังไปข้างหน้าการพึ่งพาของแพคเกจต่าง ๆ (ขึ้นอยู่กับความสนใจในตัวหนาและความขัดแย้งที่แตกต่างกันในตัวเอียงตัวหนา):
net-mgmt/adcli:net/openldap24-sasl-clientsecurity/cyrus-sasl2-gssapi: security/cyrus-sasl2net/openldap24-sasl-client: security/cyrus-sasl2security/sssd: security/nsssecurity/sssd:security/krb5security/sssd: security/cyrus-sasl2security/sssd:net/openldap24-clientsecurity/sssd: lang/python27security/sssd: lang/python2security/sssd: dns/c-aressecurity/sssd: devel/teventsecurity/sssd: devel/tallocsecurity/sssd: devel/poptsecurity/sssd: devel/pcresecurity/sssd: devel/libunistringsecurity/sssd: devel/libinotifysecurity/sssd: devel/gettext-runtimesecurity/sssd: devel/ding-libssecurity/sssd: devel/dbussecurity/sssd: databases/tdbsecurity/sssd: databases/ldbย้อนกลับการพึ่งพาของแพ็คเกจต่างๆ:
net/openldap24-sasl-client: sysutils/msktutilnet/openldap24-sasl-client: net/nss-pam-ldapd-saslnet/openldap24-sasl-client: net-mgmt/adcli
sssdตัวเองต้องการ MIT Kerberos แม้ว่าเราจะมี Heimdal เป็นแพ็คเกจพื้นฐานadcliต้องการopenldap-sasl-clientแต่แพ็คเกจอื่น ๆ (รวมถึงการพึ่งพาย่อยsssd) ดึงopenldap-clientซึ่งเป็น mutex กับลูกค้า sasl (ด้วยเหตุผลโง่ ๆ ) สิ่งนี้ทำให้การติดตั้งเป็นเรื่องที่เจ็บปวดแม้จะมีชุดไบนารีแพ็คเกจขั้นต่ำก็ตามจากการเขียนนี้ pkg ไบนารีสำหรับ SSSD สำหรับ FreeBSD ไม่รวมการสนับสนุนโฆษณาใน SSSD
SMBadcliอยู่แล้ว แต่จากการเขียนนี้ไม่สามารถใช้งานได้
GSSAPI_MITcyrus-sasl-gssapi จำเป็นต้องมี แต่เวอร์ชัน pkg แบบไบนารีไม่ทำงานและมีปัญหาการพึ่งพาที่ไม่ปกติซึ่งทำให้ SSSD ถูกลบ
GSSAPI_MITopenldap-sasl-client เป็นสิ่งจำเป็นสำหรับการทำงาน แต่ SSSD ต้องการดึงใน openldap รุ่นที่ไม่ใช่ SASL
openldap-sasl-clientด้วยGSSAPIตัวเลือกที่เลือก ( make config) ในพอร์ตpkg remove –f openldap-client
openldap-clientโดยไม่ดำเนินการตอบรับอัตโนมัติใด ๆ ของแพ็คเกจอื่น ๆ (เช่น SSSD) และอนุญาตการติดตั้งเวอร์ชัน SASLopenldap-sasl-client
pkg remove –f sssd
(ไม่บังคับ) เมื่อทุกอย่างทำงานและตรวจสอบแล้วคุณสามารถใช้pkg createเพื่อสร้างแพ็คเกจไบนารีของสี่แพ็กเกจโดยเปิดใช้งานตัวเลือกที่เหมาะสมและใช้แทนการสร้างแพ็คเกจในพอร์ตในทุกระบบ การติดตั้งไบนารีจะตามรูปแบบที่คล้ายคลึงกับกระบวนการสร้างพอร์ต:
pkg install sssd-1.11.7_8.txz
pkg add แพ็คเกจอื่น ๆ (ไม่ได้ติดตั้งเพิ่ม) บันทึกแพ็คเกจ openldap เป็นครั้งสุดท้ายopenldap-sasl-clientทำpkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg createเพื่อแทนที่การพึ่งพาopenldap-clientกับopenldap-sasl-clientที่จะเอาความจำเป็นในการที่จะทำนี้ลบ / ติดตั้ง ฉันไม่มีเวลาที่จะทำสิ่งนี้
openldap-clientด้วยดังนั้นคุณจะต้องแก้ไขสิ่งเหล่านั้นด้วยการกำหนดค่า Kerberos:
[libdefaults]
default_realm = MYDOMAIN.NET
forwardable = true
# โดยปกติสิ่งที่คุณต้องการในสภาพแวดล้อมโฆษณาเนื่องจากระเบียน DNS SRV
# จะระบุเซิร์ฟเวอร์ / บริการ AD / KRB แสดงความคิดเห็นถ้าคุณ
# ต้องการชี้ไปยังเซิร์ฟเวอร์โฆษณาของคุณด้วยตนเอง
dns_lookup_kdc = จริง
[อาณาจักร]
MYDOMAIN.NET = {
# หากคุณกำลังชี้ไปยังเซิร์ฟเวอร์โฆษณาอื่นที่ไม่ใช่ DNS
# admin_server = adserver.mydomain.net
# kdc = adserver.mydomain.net
}
[domain_realm]
mydomain.net = MYDOMAIN.NET
.mydomain.net = MYDOMAIN.NET
[sssd] config_file_version = 2 โดเมน = MYDOMAIN.NET services = nss, pam, pac fallback_homedir = / home /% u [โดเมน / MYDOMAIN.NET] id_provider = ad access_provider = ad auth_provider = ad chpass_provider = ad # ใช้แอตทริบิวต์ AD POSIX แสดงความคิดเห็นหากคุณใช้งานโดยอัตโนมัติ # UID และ GID ldap_id_mapping = False cache_credentials = true ad_server = adserver.mydomain.net # ถ้าคุณไม่มีทุบตีหรืออะไรก็ตามที่อยู่ใน loginShell ของบัญชี AD ติดตั้ง # attribute แล้ว override_shell = / bin / tcsh
/etc/pam.dไฟล์ที่ฉันต้องแก้ไขเพื่อให้ SSSD ทำงานกับ FreeBSD:/etc/pam.d/sshd:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / sshd 197769 2009-10-05 09: 28: 54Z des $ # # การกำหนดค่า PAM สำหรับบริการ "sshd" # # รับรองความถูกต้อง รับรองความถูกต้องเพียงพอ pam_opie.so no_warn no_fake_prompts รับรองความถูกต้องตรวจสอบ pam_opieaccess.so no_warn allow_local #auth เพียงพอ pam_krb5.so no_warn try_first_pass #auth เพียงพอ pam_ssh.so no_warn try_first_pass รับรองความถูกต้อง pam_unix.so no_warn try_first_pass nullok รับรองความถูกต้อง pam_sss.so เพียงพอ use_first_pass รับรองความถูกต้อง pam_unix.so no_warn use_first_pass # บัญชีผู้ใช้ ต้องมีบัญชี pam_nologin.so #account ต้องการ pam_krb5.so ต้องมีบัญชี pam_login_access.so ต้องมีบัญชี pam_unix.so บัญชี pam_sss.so ให้เพียงพอ # เซสชัน #session ตัวเลือก pam_ssh.so want_agent เซสชันเสริม pam_sss.so ต้องการเซสชัน pam_mkhomedir.so โหมด = 0700 เซสชันที่ต้องการ pam_permit.so # รหัสผ่าน #password เพียงพอ pam_krb5.so no_warn try_first_pass #password เพียงพอ pam_unix.so try_first_pass use_authtok nullok รหัสผ่าน pam_unix.so เพียงพอดังนั้นลอง _first_pass use_authtok รหัสผ่านเพียงพอ pam_sss.so use_authtok
/etc/pam.d/system:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / ระบบ 197769 2009-10-05 09: 28: 54Z des $ # # ค่าเริ่มต้นทั้งระบบ # # รับรองความถูกต้อง รับรองความถูกต้องเพียงพอ pam_opie.so no_warn no_fake_prompts รับรองความถูกต้องตรวจสอบ pam_opieaccess.so no_warn allow_local #auth เพียงพอ pam_krb5.so no_warn try_first_pass #auth เพียงพอ pam_ssh.so no_warn try_first_pass #auth ต้องการ pam_unix.so no_warn try_first_pass nullok รับรองความถูกต้อง pam_unix.so no_warn try_first_pass รับรองความถูกต้อง pam_sss.so เพียงพอ use_first_pass รับรองความถูกต้อง pam_deny.so # บัญชีผู้ใช้ #account ต้องการ pam_krb5.so ต้องมีบัญชี pam_login_access.so ต้องมีบัญชี pam_unix.so บัญชี pam_sss.so ให้เพียงพอ # เซสชัน #session ตัวเลือก pam_ssh.so want_agent ต้องใช้เซสชัน pam_lastlog.so no_fail เซสชันเสริม pam_sss.so ต้องการเซสชัน pam_mkhomedir.so โหมด = 0700 # รหัสผ่าน #password เพียงพอ pam_krb5.so no_warn try_first_pass #password ต้องใช้ pam_unix.so no_warn try_first_pass รหัสผ่านเพียงพอ pam_unix.so no_warn try_first_pass nullok use_authtok รหัสผ่านเพียงพอ pam_sss.so use_authtok #password ต้องใช้ pam_deny.so
/etc/pam.d/su:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / su 219663 2011-03-15 10: 13: 35Z des $ # # การกำหนดค่า PAM สำหรับบริการ "su" # # รับรองความถูกต้อง รับรองความถูกต้องเพียงพอ pam_rootok.so no_warn รับรองความถูกต้อง pam_self.so no_warn รับรองความถูกต้องตรวจสอบ pam_group.so no_warn group = wheel root_only fail_safe ruser รับรองความถูกต้องรวม system.dist # บัญชีผู้ใช้ บัญชีรวมถึง system.dist # เซสชัน เซสชันที่ต้องการ pam_permit.so
(เยื้อง)
system.distเป็นสำเนาของ/etc/pam.d/systemไฟล์สต็อก มันรวมอยู่ใน/etc/pam.d/suไฟล์ด้านบนเพื่อป้องกันปัญหาเกี่ยวกับคำสั่ง susuบัญชี AD เป็นรูทตั้งแต่ครั้งเดียวsuไม่จำเป็นต้องรับรองความถูกต้องและข้อมูลบัญชีจะถูกดึงผ่านสวิตช์บริการชื่อผ่าน SSSDsudoเพื่อเหตุผลด้านความปลอดภัยเพียงอย่างเดียวksuและใช้ได้กับการสลับจากผู้ใช้ A ไปยังผู้ใช้ B
ksu(เป็น/usr/bin) ไม่ได้ตั้งค่า SUID ไว้ตามค่าเริ่มต้น
ksuทำงานchmod u+s /usr/bin/ksukrb5แพ็คเกจที่ติดตั้งใน/usr/local/bin) เป็น SUID ในการติดตั้ง/usr/local/binเป็นมาก่อน/usr/binเป็นต้นksu จะแจ้งให้ผู้ใช้รหัสผ่าน AD / Kerberos ของผู้ใช้เป้าหมายpasswdจะไม่ทำงานเพื่อเปลี่ยนรหัสผ่าน AD / Kerberos ของคุณแม้ว่าคุณpam_sss.soจะเพิ่มไฟล์ PAM passwd passwdไบนารีสนับสนุนเฉพาะท้องถิ่นและ NIS ใช้kpasswdเปลี่ยนรหัสผ่านของคุณในการโฆษณา / เซิร์ฟเวอร์ Kerberos (s)สวิตช์ชื่อบริการ:
/etc/nsswitch.confไฟล์ควรจะกำหนดค่าใช้บริการสำหรับ sss passwd และกลุ่ม ตัวอย่าง:
group: files ssspasswd: files sssเข้าร่วมโดเมน:
adcli
kinitก่อนที่จะใช้มันทำเพื่อคุณตามเครดิตที่ให้ไว้
adcli join -D mydomain.net -U Administrator--show-details –vadcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
netยูทิลิตี้
แซมบ้าnetยูทิลิตี้เป็นส่วนหนึ่งของชุดแซมบ้าsmb.confไฟล์กำหนดค่าซึ่งทำให้ยากและไม่สะดวกในการใช้โดยเฉพาะอย่างยิ่งไม่โต้ตอบkinitก่อนที่จะใช้โดยการใช้ อีกครั้งสิ่งนี้ไม่สะดวกมากขึ้นและทำให้การใช้สคริปต์แบบไม่โต้ตอบอาจทำได้ยากขึ้นเนื่องจากมีสองขั้นตอนแทนที่จะเป็นขั้นตอนเดียว
ข้อควรพิจารณาเกี่ยวกับ SSHD:
/etc/ssh/sshd_config
GSSAPIAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication noเมื่อใช้ตัวเลือกนี้/bin/passwdซึ่งไม่สนับสนุนอะไรเลยนอกจากไฟล์ NIS และโลคัล passwdGSSAPICleanupCredentials yes
kdestroyเมื่อออกจากระบบGSSAPIStrictAcceptorCheck no
host/<FQDN>@REALMเพื่อพูดคุยกับ KDC แต่บางครั้งทำให้เกิดความผิดพลาด (ตัวอย่างเช่นหากชื่อโฮสต์ไม่ตรงกับชื่อ DNS ของเซิร์ฟเวอร์ SSH) ตัวเลือกนี้ช่วยให้ SSHD ใช้เงินต้นใด ๆ ใน/etc/krb5.keytabไฟล์ซึ่งรวมถึงการที่เหมาะสมhost/<FQDN>@REALMssh -K <ip>ให้ทำงานโดยไม่ต้องแจ้งรหัสผ่าน (สันนิษฐานว่าคุณได้ทำ 'kinit' แล้ว แน่นอน).