ขั้นตอนที่จำเป็นในการรับรองความถูกต้องผู้ใช้จาก 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-client
security/cyrus-sasl2-gssapi: security/cyrus-sasl2
net/openldap24-sasl-client: security/cyrus-sasl2
security/sssd: security/nss
security/sssd:
security/krb5
security/sssd: security/cyrus-sasl2
security/sssd:
net/openldap24-client
security/sssd: lang/python27
security/sssd: lang/python2
security/sssd: dns/c-ares
security/sssd: devel/tevent
security/sssd: devel/talloc
security/sssd: devel/popt
security/sssd: devel/pcre
security/sssd: devel/libunistring
security/sssd: devel/libinotify
security/sssd: devel/gettext-runtime
security/sssd: devel/ding-libs
security/sssd: devel/dbus
security/sssd: databases/tdb
security/sssd: databases/ldb
ย้อนกลับการพึ่งพาของแพ็คเกจต่างๆ:
net/openldap24-sasl-client: sysutils/msktutil
net/openldap24-sasl-client: net/nss-pam-ldapd-sasl
net/openldap24-sasl-client: net-mgmt/adcli
sssd
ตัวเองต้องการ MIT Kerberos แม้ว่าเราจะมี Heimdal เป็นแพ็คเกจพื้นฐานadcli
ต้องการopenldap-sasl-client
แต่แพ็คเกจอื่น ๆ (รวมถึงการพึ่งพาย่อยsssd
) ดึงopenldap-client
ซึ่งเป็น mutex กับลูกค้า sasl (ด้วยเหตุผลโง่ ๆ ) สิ่งนี้ทำให้การติดตั้งเป็นเรื่องที่เจ็บปวดแม้จะมีชุดไบนารีแพ็คเกจขั้นต่ำก็ตามจากการเขียนนี้ pkg ไบนารีสำหรับ SSSD สำหรับ FreeBSD ไม่รวมการสนับสนุนโฆษณาใน SSSD
SMB
adcli
อยู่แล้ว แต่จากการเขียนนี้ไม่สามารถใช้งานได้
GSSAPI_MIT
cyrus-sasl-gssapi
จำเป็นต้องมี แต่เวอร์ชัน pkg แบบไบนารีไม่ทำงานและมีปัญหาการพึ่งพาที่ไม่ปกติซึ่งทำให้ SSSD ถูกลบ
GSSAPI_MIT
openldap-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/ksu
krb5
แพ็คเกจที่ติดตั้งใน/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 sss
passwd: files sss
เข้าร่วมโดเมน:
adcli
kinit
ก่อนที่จะใช้มันทำเพื่อคุณตามเครดิตที่ให้ไว้
adcli join -D mydomain.net -U Administrator--show-details –v
adcli 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>@REALM
ssh -K <ip>
ให้ทำงานโดยไม่ต้องแจ้งรหัสผ่าน (สันนิษฐานว่าคุณได้ทำ 'kinit' แล้ว แน่นอน).