การพิสูจน์ตัวตน Linux บน Microsoft Active Directory โดยใช้ sssd


1

ฉันกำลังพยายามมีเซิร์ฟเวอร์ Linux (Red Hat Enterprise 7.6) เพื่อตรวจสอบผู้ใช้ตาม Microsoft Active Directory แนวคิดนี้จะช่วยให้ผู้ใช้เชื่อมต่อผ่าน SSH เพื่ออัปโหลดเอกสารไปยังเว็บไซต์ส่วนตัวของพวกเขาโดยไม่ต้องให้พวกเขาเข้าถึงเชลล์

เพื่อตัดเรื่องสั้นเราเป็นโรงเรียนและเราต้องการให้การเข้าถึงโฟลเดอร์เฉพาะส่วนบุคคลแก่นักเรียนของเรา

ฉันพยายามใช้ SSSD ซึ่งฟังดูมีแนวโน้ม ฉันสามารถเข้าร่วมโดเมนและเมื่อฉันเพิ่มระดับการบันทึกฉันเห็นผู้ใช้ถูกแคชบนเซิร์ฟเวอร์ linux ของฉัน ฉันทำตามเอกสาร Red Hat อย่างพิถีพิถันและโพสต์ส่วนใหญ่พูดถึงการใช้งาน SSSD แต่ฉันอาจจะพลาดบางสิ่ง ฉันต้องการที่จะดำเนินการอย่างค่อยเป็นค่อยไปและก่อนที่จะมีส่วนร่วมกับ SSH ฉันต้องการพยายามพิสูจน์ตัวตนผู้ใช้ในคอนโซล (ไม่ใช่ผ่าน SSH) ก่อน ผู้ใช้ไม่ได้กำหนดค่าเป็นผู้ใช้ภายใน มันถูกกำหนดไว้ใน Active Directory เท่านั้น

แต่มันล้มเหลวด้วยข้อความต่อไปนี้ใน / var / log / secure:

Dec 10 09:42:05 svx-pub-01 login: pam_unix(login:auth): check pass; user unknown
Dec 10 09:42:05 svx-pub-01 login: pam_unix(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=tty1 ruser= rhost=
Dec 10 09:42:07 svx-pub-01 login: FAILED LOGIN 1 FROM tty1 FOR (unknown), User not known to the underlying authentication module

เท่าที่ฉันเข้าใจ sssd ไม่มีส่วนเกี่ยวข้องในการพิสูจน์ตัวตนที่นี่และฉันอยากจะเข้าใจว่าทำไม

ฉันรู้ว่าเป้าหมายในอนาคตของฉันคือการรับรองความถูกต้องของผู้ใช้ผ่าน SSH แต่ก่อนอื่นฉันต้องการทำการทดสอบในท้องถิ่นที่ง่ายมาก ... ดังนั้นฉันจึงได้กำหนดเชลล์เริ่มต้นในไฟล์ sssd.conf ค่าเดียวที่ฉันได้แก้ไขเพื่อความลับของ id "mydomain.com" ซึ่งไม่ใช่มูลค่าที่แท้จริง :)

[sssd]
domains = mydomain.com
config_file_version = 2
services = nss, pam
debug_level = 7

[domain/mydomain.com]
ad_server = svw-dc-00.mydomain.com
ad_domain = mydomain.com
krb5_realm = mydomain.com
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad
debug_level = 7
[pam]
debug_level = 7

[ssh]

นี่คือ /etc/krb5.conf

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

 default_realm = MYDOMAIN.COM
[realms]
 MYDOMAIN.COM = {
 }

[domain_realm]

 mydomain.com = MYDOMAIN.COM
 .mydomain.com = MYDOMAIN.COM

นี่คือ /etc/nsswitch.conf

passwd:     files sss
shadow:     files sss
group:      files sss
initgroups: files sss

#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

# Example - obey only what nisplus tells us...
#services:   nisplus [NOTFOUND=return] files
#networks:   nisplus [NOTFOUND=return] files
#protocols:  nisplus [NOTFOUND=return] files
#rpc:        nisplus [NOTFOUND=return] files
#ethers:     nisplus [NOTFOUND=return] files
#netmasks:   nisplus [NOTFOUND=return] files

bootparams: nisplus [NOTFOUND=return] files

ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss

netgroup:   files sss

publickey:  nisplus

automount:  files sss
aliases:    files nisplus

และ /etc/pam.d/system-auth

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        [default=1 ignore=ignore success=ok] pam_succeed_if.so uid >= 1000 quiet
auth        [default=1 ignore=ignore success=ok] pam_localuser.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     optional      pam_sss.so
session     required      pam_unix.so

ขอบคุณล่วงหน้าสำหรับข้อมูลสำคัญของคุณ


คุณสามารถสอบถามข้อมูลของผู้ใช้ผ่านทาง nsswitch (ใช้id <name>, getent passwd <name>, getent -s sss passwd <name>)? UID ของผู้ใช้คืออะไร
grawity

คำสั่งid <name>จะให้id: <name>: no such userและคำสั่งจะgetent passwd <name>ไม่เรียกคืนสิ่งใดแม้แต่ข้อความ
P. Herman

เมื่อฉันป้อนคำสั่งrealm join -U <user> ads.mydomain.comจะมีข้อความระบุว่าrealm: Already joined to this domain
P. Herman

แต่! เมื่อgetent -s sss passwd <user>@mydomain.comฉันได้รับคำตอบประเภทที่ชอบ: <user>@mydomain.com:*:153324743:153200513:Lastname Firstname:/home/<user>@mydomain.com:/bin/bashเป็นไปได้อย่างไรที่จะกำจัด "@" เมื่อฉันเข้าสู่ระบบเพราะมันทำให้การเข้าสู่ระบบคอนโซลเป็นไปไม่ได้
P. Herman

คำตอบ:


0

ใน sssd.conf เปลี่ยนuse_fully_qualified_domain_names = Trueเป็นFalse

คุณจะต้องเริ่มบริการ sssd ใหม่และอาจล้างแคช/var/lib/sss/db/เพื่อให้มีผล

คุณอาจต้องการเปลี่ยนfallback_homedir = /home/%u@%dเป็นfallback_homedir = /home/%uถ้าคุณไม่ต้องการให้ไดเรกทอรีภายในบ้านของทุกคนมี @ [โดเมน] ท้ายที่สุด

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