Наскільки практичним є автентифікація сервера Linux щодо AD?


18

Ми використовуємо як Windows, так і Linux сервер у нашій компанії з розробки програмного забезпечення.

Однією з точок тертя при цій настройці є те, що у нас немає єдиного рішення для входу. Будучи скоріше магазином Microsoft, ніж Linux, ми хочемо автентифікувати AD.

Я прочитав пару статей в Інтернеті і розумію, що це можливо.

В даний час ми використовуємо такі сервіси в Linux, для яких потрібна автентифікація:
- git-сервер (через SSH)
- Sendmail
- веб-сервер Apache, який зараз використовує файли .htaccess.
- файли файлів SAMBA

Що я хочу знати, наскільки практичним є такий спосіб налаштування? Це дійсно працює або він схильний до помилок?


Дякую за чудові відповіді всім, це дає мені кращі відчуття того, що є досвід цієї установки в реальному світі. Це справді допомагає. Вибрати правильну відповідь тут важко, оскільки всі вони відповідають на питання.
Філіп Фурі

Перевірте FreeIPA :) freeipa.org
GioMac

Відповіді:


11

Це не важко і цілком практично.

У нас є кілька сотень настільних машин з подвійним завантаженням, які використовують AD auth, а також ряд серверів, які використовують AD auth для того, щоб клієнти Windows могли використовувати свої акції samba без явного авторизації користувачами.

Була ще одна стаття про SF про те, що вам потрібно зробити.

В основному вам потрібно налаштувати kerberos, winbind, nss та pam.

Тоді ти робиш kinitі і, net ads joinі твій.

Ви можете налаштувати pam на використання декількох методів для auth, якщо хочете, тож якщо один не працює, він перейде до наступного.

Зазвичай ми використовуємо файли, winbindd та ldap для серверів, які обслуговують файлообмінник на сервери Windows.

Якщо можливо, я б використовував LDAP для інформації про обліковий запис і вітряний суворо строго для auth, але я вважаю, що ви можете відобразити атрибути в, я думаю, /etc/ldap.conf, якщо вам потрібно. Якщо ви все-таки використовуєте winbindd для інформації облікового запису, можна використовувати RID (метод хешування) для генерації uids / gids, але також можна використовувати інші методи. Ми використовували RID на одному великому файловому сервері, і це було справжнім болем, тому я спробував би вивчити один з інших варіантів, якщо це можливо. У нашому випадку всі користувачі та групи AD відображаються в LDAP системою IDM IDM вище, тому ми використовуємо LDAP для інформації про облікові записи на нових серверах і використовуємо winbind виключно для auth.


6

Аутентифікація абсолютно проста за допомогою Likewise Open. http://www.likewise.com/products/likewise_open/index.php

Майже вся моя інфраструктура Linux має централізовану аутентифікацію та управління користувачами завдяки Likewise Open. Встановити та реалізувати надзвичайно просто. Я не можу сказати про це досить добре.

Як зауваження, UID та GID призначаються відповідно до хеш-функції, тому вони однакові по всій інфраструктурі, тому кріплення NFS працюють ідеально.


1
Я також відкриваю на декількох серверах і виявив, що він працює добре. Якщо Apache / Sendmail - це машина, яка стоїть зовні, ви можете перевірити наявність додаткових затримок / навантажень.
Кайл Брандт

3
Зараз посилання розірвано
gogaz

Схоже, що (за вмістом веб-сайтів) компанія вже не займається цим товаром.
Олексій Мартьянов

4

Я встановив Windows Services для Unix і додав користувача в AD під назвою "Аутентифікатор Unix", після чого зробив такі зміни конфігураційного файлу на машинах 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

Сподіваюся, це допомагає.


Це цікавий підхід, дякую, що я також досліджу цей проспект.
Філіп Фурі

1
Будь ласка, не використовуйте pam_ldap для auth (в /etc/pam.d/system-auth), як є. Він надішле ваш пароль у чіткому тексті. Ви повинні використовувати LDAPS або GSSAPI, якщо ви хочете пройти автентифікацію через LDAP. Ви можете використовувати LDAP для NSS та Kerberos для аутентифікації, якщо ви хочете зробити це безпечно (див. Нижче)
TheFiddlerWins

2

Користувачі Windows зареєстровані проти AD, але більшість наших серверів (публічний диск тощо) є Linux, і вони є частиною домену. З вікон PoV ніхто не помічає. З моєї сторони, це відчуває трохи фруктовий ssh'ing з моїм іменем Windows, але ось про розмір його.

Просто в звичайній старій самбі.


2

Вам не потрібно використовувати Samba, AD підтримує Kerberos та LDAP безпосередньо. Для більшості дистрибутивів немає жодної причини використовувати будь-яке зовнішнє програмне забезпечення.

Для Debian / Ubuntu ви можете це зробити за допомогою libnss-ldap та libpam-krb5. Існує кілька хитрощів, щоб отримати 100%. Це передбачає, що у вас є "unixHomeDirectory", заповнений для користувачів Linux, у ваших скриньках Linux використовується NTP, спільна для ваших систем Windows (вимагається Kerberos), і ви добре з текстовими пошуками NSS (не паролем, а інформацією про членство в групі тощо). Ви також можете використовувати TLS, але це складніше для налаштування). Ви НЕ повинні мати пам’ятку pam_ldap як пароль або джерело авторизації в PAM, якщо ви не налаштовані на використання 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

Вам не потрібно редагувати /etc/krb5.conf, припускаючи, що ваші Linux-коробки використовують сервери DNS, які знають про AD (_msdcs-зони з відповідними записами SRV вирішуються)

/etc/nsswitch.conf повинен мати "файли ldap" для користувачів, груп, тіні.

Для Red Hat з використанням 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

Чи потрібно щось змінювати на стороні AD у цьому сценарії? Пам'ятаю, я бачив деякі "інструменти Unix для Windows", які потрібно встановити під час використання SAMBA?
Мартін Нільсен

Це рішення не залежить від SAMBA, воно використовує нативний LDAP / Kerberos. Єдиною причиною використання інструментів Unix є отримання графічного інтерфейсу для редагування атрибутів користувача / групи POSIX. Навіть це не потрібно, якщо ви використовуєте SSSD. SAMBA (в Winbind) дозволяє встановлювати програмне забезпечення, яке змушує систему емуляції клієнта Windows. Налаштування вище використовується просто стандартним LDAP / Kerberos.
TheFiddlerперемагає

Арг чорт, я хотів написати "ldap / kerberos", я не знаю, що сталося. Моя провина. Але інструменти Unix для AD насправді не потрібні для LDAP / Kerberos?
Мартін Нільсен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.