Насколько практично аутентифицировать сервер Linux по AD?

18

Мы используем сервер Windows и Linux в нашей компании по разработке программного обеспечения.

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

Я прочитал пару статей в Интернете, и я понимаю, что это возможно.

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

То, что я хочу знать, насколько практична такая установка? Это действительно работает или подвержено ошибкам?

Филип Фурье
источник
Спасибо всем за отличные ответы, это дает мне лучшее представление о том, каков опыт этой установки в реальном мире. Это действительно помогает. Выбрать правильный ответ здесь сложно, так как все они отвечают на вопрос.
Филипп Фурье
Проверьте FreeIPA
GioMac

Ответы:

11

Это не сложно, и это совершенно практично.

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

На SF была еще одна статья о том, что вам нужно делать.

В основном вам нужно настроить Kerberos, Winbind, NSS и PAM.

Тогда вы делаете kinitи net ads joinи ваш.

Вы можете настроить pam на использование нескольких методов для аутентификации, если хотите, поэтому, если один не работает, он вернется к следующему.

Обычно мы используем файлы winbindd и ldap для серверов, обслуживающих общие файлы для серверов Windows.

Если возможно, я бы использовал LDAP для информации об учетной записи и windbind строго для аутентификации, но я считаю, что вы можете отобразить атрибуты в, я думаю, /etc/ldap.conf, если вам нужно. Если вы в конечном итоге используете winbindd для получения информации об учетной записи, можно использовать RID (метод хеширования) для создания идентификаторов / идентификаторов, но также можно использовать и другие методы. Мы использовали RID на одном большом файловом сервере, и это было очень трудно, поэтому я постараюсь изучить один из других вариантов, если это возможно. В нашем случае все пользователи и группы AD отражаются в LDAP вышестоящей системой IDM, поэтому мы используем LDAP для информации об учетной записи на новых серверах и используем winbind исключительно для аутентификации.

Джейсон Тан
источник
6

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

Почти вся моя инфраструктура Linux имеет централизованную аутентификацию и управление пользователями благодаря Likewise Open. Это потрясающе просто установить и внедрить. Я не могу сказать достаточно хорошо об этом.

Как примечание, UID и GID назначаются в соответствии с хэш-функцией, поэтому они идентичны во всей инфраструктуре, поэтому монтирование NFS работает отлично.

Мэтт Симмонс
источник
1
Я также использую open на нескольких серверах и обнаружил, что он работает хорошо. Если Apache / Sendmail является внешним компьютером, вы можете проверить наличие дополнительной задержки / нагрузки.
Кайл Брандт
3
Ссылка теперь не работает
gogaz
Похоже (по содержанию веб-сайта) компания больше не занимается этим продуктом.
Алексей Мартианов
4

Я установил Windows Services для Unix и добавил пользователя AD с именем «Unix Authenticator», а затем внес следующие изменения в конфигурационный файл на компьютерах 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 для аутентификации (в /etc/pam.d/system-auth) как есть. Он отправит ваш пароль в открытом виде. Вы должны использовать LDAPS или GSSAPI, если вы хотите пройти аутентификацию через LDAP. Вы можете использовать LDAP для NSS и Kerberos для аутентификации, если вы хотите сделать это безопасно (см. Ниже)
TheFiddlerWins
2

У пользователей Windows есть авторизация против AD, но большинство наших серверов (публичный диск и т. Д.) Являются linux, и они являются частью домена. Из окна PoV никто не замечает. С моей стороны, он выглядит немного фруктовым с моим именем пользователя 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
TheFiddlerWins
источник
Вам нужно что-то изменить на стороне AD в этом сценарии? Я помню, что видел некоторые "инструменты Unix для Windows", которые нужно установить при использовании SAMBA?
Мартин Нильсен
Это решение не зависит от SAMBA, оно использует собственный LDAP / Kerberos. Единственная причина использования инструментов Unix - получить графический интерфейс для редактирования атрибутов пользователя / группы POSIX. Даже это не требуется, если вы используете SSSD. SAMBA (в Winbind) позволяет устанавливать программное обеспечение, которое заставляет систему эмулировать клиент Windows. Приведенная выше настройка просто использует стандартные LDAP / Kerberos.
TheFiddlerWins
Черт возьми, я хотел написать "ldap / kerberos", я не знаю, что случилось. Моя вина. Но инструменты Unix для AD на самом деле не требуются для LDAP / Kerberos?
Мартин Нильсен