Seberapa praktis mengotentikasi server Linux terhadap AD?

18

Kami menggunakan server Windows dan Linux di perusahaan pengembangan perangkat lunak kami.

Salah satu titik gesekan dengan pengaturan ini adalah bahwa kami tidak memiliki solusi masuk tunggal. Menjadi lebih dari toko Microsoft daripada Linux yang ingin kami otentikasi terhadap AD.

Saya membaca beberapa artikel online dan saya mengerti ini mungkin terjadi.

Kami saat ini menggunakan layanan berikut di Linux yang memerlukan otentikasi:
- server git (melalui SSH)
- Sendmail
- server web Apache saat ini menggunakan file .htaccess.
- Berbagi file SAMBA

Yang ingin saya ketahui adalah seberapa praktis pengaturan seperti ini? Apakah ini benar-benar berfungsi atau apakah itu rawan kesalahan?

Philip Fourie
sumber
Terima kasih atas jawaban hebat semua orang, ini memberi saya perasaan yang lebih baik tentang apa pengalaman pengaturan ini di dunia nyata. Ini sangat membantu. Memilih jawaban yang benar di sini sulit karena semuanya menjawab pertanyaan.
Philip Fourie
Periksa FreeIPA :) freeipa.org
GioMac

Jawaban:

11

Ini tidak sulit dan sangat praktis.

Kami memiliki beberapa ratus mesin desktop dual boot yang menggunakan auth AD serta sejumlah server yang menggunakan auth AD untuk memungkinkan klien windows untuk menggunakan saham samba mereka tanpa auth eksplisit oleh pengguna.

Ada artikel lain di SF tentang apa yang perlu Anda lakukan.

Pada dasarnya Anda perlu mengkonfigurasi kerberos, winbind, nss dan pam.

Maka Anda melakukan a kinitdan a net ads joindan Anda naik.

Anda dapat mengkonfigurasi pam untuk menggunakan beberapa metode auth jika Anda mau, jadi jika salah satu tidak berfungsi maka akan kembali ke yang berikutnya.

Kami biasanya menggunakan file, winbindd dan ldap untuk server yang melayani fileshares ke server windows.

Jika mungkin saya akan menggunakan LDAP untuk info akun dan windbind ketat untuk auth, tapi saya yakin Anda dapat memetakan atribut di I think /etc/ldap.conf jika perlu. Jika Anda akhirnya menggunakan winbindd untuk info akun, dimungkinkan untuk menggunakan RID (metode hashing) untuk menghasilkan uids / gids, tetapi juga dimungkinkan untuk menggunakan metode lain. Kami menggunakan RID pada satu server file besar dan itu benar-benar menyebalkan, jadi saya akan mencoba dan mengeksplorasi salah satu opsi lain jika memungkinkan. Dalam kasus kami, semua pengguna dan grup AD tercermin dalam LDAP oleh sistem IDM hulu, jadi kami menggunakan LDAP untuk info akun di server yang lebih baru dan menggunakan winbind murni untuk auth.

Jason Tan
sumber
6

Otentikasi sangat sederhana menggunakan Likewise Open. http://www.likewise.com/products/likewise_open/index.php

Hampir seluruh infrastruktur Linux saya memiliki otentikasi dan manajemen pengguna yang terpusat berkat Likewise Open. Sangat mudah untuk menginstal dan mengimplementasikan. Saya tidak mungkin mengatakan cukup baik tentang itu.

Sebagai catatan, UID dan GID ditugaskan sesuai dengan fungsi hash, sehingga mereka identik di seluruh infrastruktur, sehingga mount NFS bekerja dengan sempurna.

Matt Simmons
sumber
1
Saya juga menggunakan terbuka di beberapa server dan menemukan itu berfungsi dengan baik. Jika Apache / Sendmail adalah mesin yang menghadap ke luar, Anda mungkin ingin memeriksa latensi / muatan tambahan.
Kyle Brandt
3
Tautannya
Sepertinya (berdasarkan konten situs web) perusahaan tidak lagi melakukan produk ini.
Alexei Martianov
4

Saya menginstal Layanan Windows untuk Unix dan menambahkan pengguna dalam AD yang disebut "Unix Authenticator", kemudian membuat perubahan file konfigurasi berikut pada mesin linux:

/etc/ldap.conf:
host ldap.<foo>.com
base cn=Users,dc=<foo>,dc=com
binddn cn=Unix Authenticator,cn=Users,dc=<foo>,dc=com
bindpw <password>
nss_base_passwd cn=Users,dc=<foo>,dc=com?sub
nss_base_shadow cn=Users,dc=<foo>,dc=com?sub
nss_base_group cn=Users,dc=<foo>,dc=com?sub
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_objectclass posixGroup Group
nss_map_attribute cn msSFUName
nss_map_attribute uid msSFUName
nss_map_attribute gid gidNumber
nss_map_attribute gecos sAMAccountName
nss_map_attribute homeDirectory msSFUHomeDirectory
nss_map_attribute uniqueMember Member
pam_login_attribute msSFUName
pam_filter objectclass=user
pam_password ad
/etc/ldap.secret:
<password>
/etc/nsswitch.conf:
passwd: compat ldap
shadow: compat ldap
group: compat ldap
/etc/nsswitch.ldap:
host files dns
/etc/pam.d/system-auth:
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth sufficient /lib/security/pam_ldap.so use_first_pass
auth required /lib/security/pam_deny.so

account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix.so

password required /lib/security/pam_cracklib.so retry=3
password sufficient /lib/security/pam_unix.so nullok md5 shadow use_authtok
password sufficient /lib/security/pam_ldap.so use_first_pass use_authtok
password required /lib/security/pam_deny.so

session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so

Semoga ini membantu.

Scott
sumber
Ini adalah pendekatan yang menarik, terima kasih saya akan menjelajahi jalan ini juga.
Philip Fourie
1
Tolong jangan gunakan pam_ldap untuk auth (di /etc/pam.d/system-auth) seperti apa adanya. Ini akan mengirim kata sandi Anda dalam teks-jelas. Anda harus menggunakan LDAPS atau GSSAPI jika Anda ingin mengautentikasi melalui LDAP. Anda dapat menggunakan LDAP untuk NSS dan Kerberos untuk otentikasi jika Anda ingin melakukannya dengan aman (lihat di bawah)
TheFiddlerWins
2

Punya pengguna Windows yang autentikasi terhadap AD, tetapi sebagian besar server kami (drive publik dll.) Adalah linux, dan mereka adalah bagian dari domain. Dari jendela PoV tidak ada yang tahu. Dari sisi saya, rasanya sedikit berbuah ssh'ing dengan nama pengguna windows saya tapi itu tentang ukurannya.

Hanya gunakan samba tua biasa.

Tom Newton
sumber
2

Anda tidak perlu menggunakan Samba, AD mendukung Kerberos dan LDAP secara langsung. Tidak ada alasan bagi Anda untuk menggunakan perangkat lunak eksternal apa pun pada sebagian besar distribusi.

Untuk Debian / Ubuntu Anda dapat melakukannya dengan libnss-ldap dan libpam-krb5. Ada beberapa trik untuk mendapatkannya 100%. Ini mengasumsikan Anda memiliki "unixHomeDirectory" yang diisi untuk pengguna Linux, kotak Linux Anda menggunakan NTP yang umum dengan sistem Windows Anda (diperlukan oleh Kerberos) dan bahwa Anda OK dengan pencarian NSS teks biasa (bukan kata sandi tetapi info keanggotaan grup dll - Anda juga dapat gunakan TLS tapi itu lebih rumit untuk diatur). Anda TIDAK boleh memiliki pam_ldap sebagai kata sandi atau sumber auth dalam PAM kecuali Anda sudah diatur untuk menggunakan TLS.

/etc/ldap.conf

# LDAP Configuration for libnss-ldap and libpam-ldap.
# Permit host to continue boot process with out contacting LDAP server
bind_policy soft
# Define LDAP servers to use for queries, these must be Global Catalog servers
uri ldap://ldap.site.company.local
# Define root search location for queries
base dc=company,dc=local
#debug 1
# LDAP version, almost always going to be v3, it is quite mature
ldap_version 3
# Username used to proxy authentication. You can have this in a separate file owned by root for security OR use TLS/SSL (see man page)
# Do NOT use LDAP for authentication if you are using plain text binds, use Kerberos instead (and LDAP for authorization only). See libpam-krb5.
binddn cn=ldap-auth-svc,ou=ldap,ou=services,dc=site,dc=company,dc=local
# Password for proxy acct
bindpw SooperSekeretPazzwerd
#  TCP port to perform queries on, 3268 is a Global Catalog port which will reply for all users in *.company.local
port 3268
# Search range scope (sub = all)
scope sub
# Tell the client to close TCP connctions after 30 seconds, Windows will do this on the server side anyways, this will prevent errors from showing up in the logs.
 idle_timelimit 30
# Expect queries for group membership to return DN for group members instead of usernames (lets you use MSAD group membership seamlessly)
nss_schema rfc2307bis
# Filters - User accounts must have a UID >= 2000 to be recognized in this configuration and must have a unixHomeDirectory defined.
nss_base_group dc=company,dc=local?sub?&(objectClass=group)(gidNumber=*)
nss_base_user dc=company,dc=local?sub?&(objectClass=user)(!(objectClass=localputer))(uidNumber>=2000)(unixHomeDirectory=*)
nss_base_shadow dc=company,dc=local?sub?&(objectClass=user)(!(objectClass=localputer))(uidNumber>=2000)(unixHomeDirectory=*)
# Object Class mappings.  You may want to have the posixAccount to map to "mail" and have users login with their email addresses, i.e.  "nss_map_objectclass posixAccount mail".
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
# Attribute mappings.
nss_map_attribute uniqueMember member
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
# Attribute in LDAP to query to match the username used by PAM for authentication
pam_login_attribute sAMAccountName
# Filter for objects which are allowed to login via PAM
pam_filter objectclass=User

Anda seharusnya tidak perlu mengedit /etc/krb5.conf dengan asumsi kotak Linux Anda menggunakan server DNS yang tahu tentang AD (zona _msdcs dengan catatan SRV yang sesuai dapat diatasi)

/etc/nsswitch.conf harus memiliki "files ldap" untuk pengguna, grup, shadow.

Untuk Red Hat menggunakan SSSD:

/etc/sssd/sssd.conf

[domain/AD]
id_provider = ldap
auth_provider = krb5
chpass_provider = krb5
access_provider = ldap

ldap_uri = ldap://ldap.company.local:3268/
ldap_search_base = dc=company,dc=com
ldap_default_bind_dn = cn=ldap-auth-svc,ou=ldap,ou=services,dc=site,dc=company,dc=local
ldap_default_authtok = SooperSekeretPazzwerd
ldap_schema = rfc2307bis
ldap_user_object_class = user
ldap_group_object_class = group
ldap_user_name = sAMAccountName
ldap_user_home_directory = unixHomeDirectory
enumerate = true
ldap_tls_reqcert = never
ldap_tls_cacertdir = /etc/openldap/cacerts

ldap_id_use_start_tls = False
cache_credentials = True
krb5_realm = SITE.COMPANY.COM
case_sensitive = false
[sssd]
services = nss, pam
config_file_version = 2

domains = AD
[nss]
filter_users = root,named,avahi,nscd
TheFiddlerWins
sumber
Apakah Anda perlu mengubah apa pun di sisi AD dalam skenario ini? Saya ingat melihat beberapa "alat Unix untuk windows" perlu diinstal ketika menggunakan SAMBA?
Martin Nielsen
Solusi ini tidak bergantung pada SAMBA, ini menggunakan LDAP / Kerberos asli. Satu-satunya alasan untuk menggunakan alat Unix adalah untuk mendapatkan GUI untuk mengedit atribut pengguna / grup POSIX. Bahkan itu tidak diperlukan jika Anda menggunakan SSSD. SAMBA (dalam Winbind) memungkinkan Anda menginstal perangkat lunak yang membuat sistem meniru klien Windows. Pengaturan di atas hanya menggunakan LDAP / Kerberos standar.
TheFiddlerWins
Sialan, aku ingin menulis "ldap / kerberos" aku tidak tahu apa yang terjadi. Salahku. Tetapi alat Unix untuk AD sebenarnya tidak diperlukan untuk LDAP / Kerberos?
Martin Nielsen