Làm thế nào thực tế để xác thực một máy chủ Linux chống lại AD?


18

Chúng tôi sử dụng cả máy chủ Windows và Linux tại công ty phát triển phần mềm của chúng tôi.

Một trong những điểm ma sát với thiết lập này là chúng tôi không có một giải pháp đăng nhập duy nhất. Là một cửa hàng của Microsoft hơn là một cửa hàng Linux mà chúng tôi muốn xác thực chống lại AD.

Tôi đọc một vài bài báo trực tuyến và tôi hiểu điều này là có thể.

Chúng tôi hiện đang sử dụng các dịch vụ sau trên Linux yêu cầu xác thực:
- máy chủ git (thông qua SSH)
- Sendmail
- Máy chủ web Apache hiện đang sử dụng các tệp .htaccess.
- Chia sẻ tệp SAMBA

Những gì tôi muốn biết là loại thiết lập này thực tế như thế nào? Nó thực sự hoạt động hay dễ bị lỗi?


Cảm ơn những câu trả lời tuyệt vời của mọi người, điều này mang lại cho tôi cảm giác tốt hơn về trải nghiệm của thiết lập này trong thế giới thực. Điều này thực sự có ích. Chọn câu trả lời đúng ở đây rất khó vì tất cả đều trả lời câu hỏi.
Philip Fourie

Kiểm tra FreeIPA :) freeipa.org
GioMac

Câu trả lời:


11

Nó không khó và nó hoàn toàn thiết thực.

Chúng tôi có vài trăm máy tính để bàn khởi động kép sử dụng AD auth cũng như một số máy chủ sử dụng AD auth để cho phép các máy khách windows sử dụng cổ phiếu samba của họ mà không cần xác thực rõ ràng bởi người dùng.

Có một bài viết khác về SF về những gì bạn cần làm.

Về cơ bản bạn cần cấu hình kerberos, winbind, nss và pam.

Sau đó, bạn làm một kinitvà một net ads joinvà lên của bạn.

Bạn có thể định cấu hình pam để sử dụng nhiều phương thức cho auth nếu bạn muốn, vì vậy nếu một phương thức không hoạt động, nó sẽ quay trở lại phương thức tiếp theo.

Chúng tôi thường sử dụng các tệp, winbindd và ldap cho các máy chủ phục vụ các tệp tin cho máy chủ windows.

Nếu có thể, tôi sẽ sử dụng LDAP cho thông tin tài khoản và Windbind hoàn toàn cho auth, nhưng tôi tin rằng bạn có thể ánh xạ các thuộc tính trong tôi nghĩ /etc/ldap.conf nếu bạn cần. Nếu bạn cuối cùng sử dụng winbindd cho thông tin tài khoản, có thể sử dụng RID (phương pháp băm) để tạo uids / gids, nhưng cũng có thể sử dụng các phương pháp khác. Chúng tôi đã sử dụng RID trên một máy chủ tệp lớn và đó thực sự là một nỗi đau, vì vậy tôi sẽ thử và khám phá một trong các tùy chọn khác nếu có thể. Trong trường hợp của chúng tôi, tất cả người dùng và nhóm AD được phản ánh trong LDAP bởi một hệ thống IDM ngược dòng, vì vậy chúng tôi sử dụng LDAP cho thông tin tài khoản trên các máy chủ mới hơn và sử dụng winbind hoàn toàn cho auth.


6

Xác thực là hoàn toàn đơn giản bằng cách sử dụng Likewise Open. http://www.likewise.com/products/likewise_open/index.php

Gần như toàn bộ cơ sở hạ tầng Linux của tôi đã xác thực tập trung và quản lý người dùng nhờ Likewise Open. Thật đơn giản để cài đặt và thực hiện. Tôi không thể nói đủ tốt về nó.

Lưu ý, UID và GID được gán theo hàm băm, do đó chúng giống hệt nhau trên toàn bộ cơ sở hạ tầng, do đó, các mount NFS hoạt động hoàn hảo.


1
Tôi sử dụng tương tự mở trên một số máy chủ và thấy nó hoạt động tốt. Nếu Apache / Sendmail là một máy phải đối mặt bên ngoài, bạn có thể muốn kiểm tra xem có bất kỳ độ trễ / tải đã thêm nào không.
Kyle Brandt

3
Liên kết hiện đã bị hỏng
gogaz

Có vẻ như (theo nội dung trang web) công ty không làm sản phẩm này nữa.
Alexei Martianov

4

Tôi đã cài đặt Windows Services cho Unix và thêm một người dùng trong AD có tên "Unix Authenticator", sau đó thực hiện các thay đổi tệp cấu hình sau trên các máy 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

Hi vọng điêu nay co ich.


Đây là một cách tiếp cận thú vị, cảm ơn tôi cũng sẽ khám phá đại lộ này.
Philip Fourie

1
Vui lòng không sử dụng pam_ldap cho auth (trong /etc/pam.d/system-auth). Nó sẽ gửi mật khẩu của bạn trong Cleartext. Bạn nên sử dụng LDAPS hoặc GSSAPI nếu bạn muốn xác thực qua LDAP. Bạn có thể sử dụng LDAP cho NSS và Kerberos để xác thực nếu bạn muốn thực hiện an toàn (xem bên dưới)
TheFiddlerWins

2

Có người dùng Windows tự động chống lại AD, nhưng hầu hết các máy chủ của chúng tôi (ổ đĩa công cộng, v.v.) đều là linux và chúng là một phần của miền. Từ một cửa sổ PoV không ai thông báo. Về phía tôi, nó cảm thấy một chút trái cây với tên người dùng windows của tôi nhưng đó là về kích thước của nó.

Chỉ cần sử dụng samba cũ đơn giản.


2

Bạn không cần sử dụng Samba, AD hỗ trợ trực tiếp Kerberos và LDAP. Không có lý do gì để bạn sử dụng bất kỳ phần mềm bên ngoài nào trên hầu hết các bản phân phối.

Đối với Debian / Ubuntu, bạn có thể làm điều đó với libnss-ldap và libpam-krb5. Có một vài thủ thuật để có được nó 100%. Điều này giả định rằng bạn có "unixHomeDirectory" dành cho người dùng Linux, các hộp Linux của bạn đang sử dụng NTP chung với các hệ thống Windows của bạn (được Kerberos yêu cầu) và bạn vẫn ổn với tra cứu NSS văn bản đơn giản (không phải mật khẩu nhưng thông tin thành viên nhóm, v.v. sử dụng TLS nhưng điều đó phức tạp hơn để thiết lập). Bạn KHÔNG nên có pam_ldap làm mật khẩu hoặc nguồn auth trong PAM trừ khi bạn được thiết lập để sử dụng 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

Bạn không cần phải chỉnh sửa /etc/krb5.conf giả sử các hộp Linux của bạn đang sử dụng các máy chủ DNS biết về AD (các vùng _msdcs có bản ghi SRV phù hợp có thể phân giải được)

/etc/nsswitch.conf nên có "tệp ldap" cho người dùng, nhóm, bóng.

Đối với Red Hat sử dụng 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

Bạn có cần thay đổi bất cứ điều gì về phía AD trong kịch bản này không? Tôi nhớ đã thấy một số "công cụ Unix cho windows" cần được cài đặt khi sử dụng SAMBA?
Martin Nielsen

Giải pháp này không phụ thuộc vào SAMBA, nó đang sử dụng LDAP / Kerberos riêng. Lý do duy nhất để sử dụng các công cụ Unix là để có GUI để chỉnh sửa các thuộc tính người dùng / nhóm POSIX. Ngay cả điều đó là không bắt buộc nếu bạn đang sử dụng SSSD. SAMBA (trong Winbind) cho phép bạn cài đặt phần mềm giúp hệ thống mô phỏng máy khách Windows. Thiết lập ở trên chỉ sử dụng LDAP / Kerberos tiêu chuẩn.
TheFiddlerWins

Argh chết tiệt, tôi muốn viết "ldap / kerberos" tôi không biết chuyện gì đã xảy ra. Lỗi của tôi. Nhưng các công cụ Unix cho AD không thực sự cần thiết cho LDAP / Kerberos?
Martin Nielsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.