Я думаю, что Вы на ложном пути здесь, сложение байтов в интерфейсах не будет эффективным способом знать, загрузил ли пользователь конкретный файл. Даже если Вы заставите это работать, то Вам будет всегда препятствовать то, что это - хрупкий взлом.
Необходимо изучить некоторый другой вид отслеживания сессии для знания то, что готовы пользователи.
Чтобы все работало из коробки, нужно учесть некоторые хитрости. FreeBSD на данный момент поддерживает только sssd
версии 1.9.6. Таким образом, нет поддержки для имен участников предприятия.
Если у вас есть домен с несовпадающими именами UPN, он не сможет войти в систему, поскольку аутентификация Kerberos завершится неудачно, даже если FreeBSD поддерживает имена участников предприятия с Kerberos, sssd
не может обработать этот случай.
Таким образом, в фактической версии sssd
вы ограничены тем, что основное имя пользователя будет в одном доменном имени, например:
Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
username@example.com sAMAccountName: username
Зная это, мы можем описать шаги для успешной аутентификации пользователей из AD во FreeBSD.
Создайте файл /etc/krb5.conf
со следующим содержимым:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes
Установите Samba 4.1:
$ pkg install samba41
Создайте файл /usr/local/etc/smb4.conf
со следующим содержанием:
[global]
security = ads
realm = EXAMPLE.COM
workgroup = EXAMPLE
kerberos method = secrets and keytab
client signing = yes
client use spnego = yes
log file = /var/log/samba/%m.log
Запросить Билет администратора Kerberos:
$ kinit Administrator
Затем присоединитесь к домену и создайте keytab
$ net ads join createupn=host/server-hostname.example.com@EXAMPLE.COM -k
$ net ads keytab create -k
Установите необходимые пакеты:
$ pkg install sssd cyrus-sasl-gssapi
Отредактируйте файл /usr/local/etc/sssd/sssd.conf
, чтобы он соответствовал этим настройкам:
[sssd]
config_file_version = 2
services = nss, pam
domains = example.com
[nss]
[pam]
[domain/example.com]
# Uncomment if you need offline logins
#cache_credentials = true
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
# Comment out if the users have the shell and home dir set on the AD side
default_shell = /bin/tcsh
fallback_homedir = /home/%u
# Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
#ldap_sasl_mech = GSSAPI
#ldap_sasl_authid = SERVER-HOSTNAME$@EXAMPLE.COM
Отредактируйте файл /etc/nsswitch.conf
, чтобы он соответствовал этим настройкам:
group: files sss
passwd: files sss
Установите дополнительные пакеты для создания домашнего каталога:
$ pkg install pam_mkhomedir
Измените необходимые области PAM
, чтобы они соответствовали этим настройкам:
auth sufficient /usr/local/lib/pam_sss.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user
session required /usr/local/lib/pam_mkhomedir.so mode=0700
session optional /usr/local/lib/pam_sss.so
password sufficient /usr/local/lib/pam_sss.so use_authtok
$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client
$ getent passwd <username>
Здравствуйте,
Это небольшое обновление по использованию sssd v1.11.7
Если вы используете "id_provider = ad" и в лог-файле sssd вы видите следующую ошибку:
/var/log/sssd/sssd_example.com.log
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]
Вы можете использовать следующую процедуру, чтобы решить эту проблему и заставить интеграцию AD работать корректно. Теперь нужно собрать sssd v1.11.7 с поддержкой Samba, собрать из src sssd и связать его с libsasl2
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
Какой Kerberos вы здесь используете? Встроенный или security / krb5 от MIT?
При установке sssd требуется установить security / krb5, что на данный момент все еще считается экспериментальным во FreeBSD. Таким образом, этот вопрос.
Мне не удалось получить пользователей / группы AD при выполнении команд 'getent'. это может быть связано с тем, что имя NETBIOS отличается от имени домена, т.е. в моем случае доменное имя - dawnsign.com, а имя NETBIOS - DSP.
Я настроил только модуль входа в систему pam.d. Какие еще модули pam необходимо отредактировать для успешной аутентификации?
Мы будем благодарны за любую дополнительную информацию!
Перекомпиляция samba4 из портов возможна для использовать аутентификацию winbind вроде linux даже без sssd. Просто перекомпилируйте samba4 из портов после включения sasl ldap
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
. Это перекомпилирует samba со всей необходимой поддержкой (gssapi, ldap, kerberos) затем отредактируйте nsswitch.conf вот так
passwd: files winbind
group: files winbind
Установка (и проблемы с забавной упаковкой и зависимостями)
/ usr / bin
, а другой в / usr / local / bin
. Поскольку ни одна из базовых
системные файлы, кажется, находятся в пакете, вы не можете просто удалить
Хеймдаль KRB материал. Есть кое-что, о чем следует знать. Прямые зависимости различных пакетов (интересные зависимости в жирным шрифтом, конфликтующие значения выделены жирным курсивом):
net-mgmt / adcli:
net / openldap24-sasl-client
security / cyrus-sasl2-gssapi: security / cyrus-sasl2
net / openldap24 -sasl-client: security / cyrus-sasl2
security / sssd: security / nss
security / sssd:
security / krb5
security / sssd: security / cyrus-sasl2
security / sssd:
net / openldap24-client
security / sssd: lang / python27
security / sssd: lang / python2
security / sssd: dns / c-ares
security / sssd: devel / tevent
security / sssd: devel / talloc
security / sssd: devel / popt
security / sssd: devel / pcre
security / sssd: devel / libunistring
security / sssd: devel / libinotify
security / sssd: devel / gettext-runtime
security / sssd: devel / ding-libs
security / sssd: devel / dbus
security / sssd: databases / tdb
безопасность / sssd: databases / ldb
Обратные зависимости различных пакетов:
net / openldap24-sasl-client: sysutils / msktutil
net / openldap24-sasl-clie nt: net / nss-pam-ldapd-sasl
net / openldap24-sasl-client: net-mgmt / adcli
sssd
сам требует MIT Kerberos, хотя у нас есть Heimdal в качестве базового пакета adcli
хочет openldap-sasl-client
, но другие пакеты (включая подчиненные зависимости sssd
) втягивают openldap-client
, который является мьютексом с клиентом sasl (по какой-то глупой причине). Это усложняет установку даже с минимальным набором двоичных пакетов. На момент написания этой статьи двоичный пакет для SSSD для FreeBSD не включает поддержку AD в SSSD
SMB
adcli
существует, но с это письмо не работает.
GSSAPI_MIT
cyrus-sasl-gssapi
требуется, но двоичная версия pkg не работает и имеет странные проблемы с зависимостями, которые заставляют ее удалять SSSD.
GSSAPI_MIT
openldap-sasl-client
требуется для функциональности, но SSSD хочет использовать версию openldap без SASL.
openldap-sasl-client
с выбранной опцией GSSAPI
( make config
) в портах. pkg remove –f openldap-client
openldap-client
без автоматического удаления любые другие пакеты (например, SSSD) и разрешить установку версии SASL openldap-sasl-client
pkg remove –f sssd
(Необязательно) После того, как все работает и проверено, вы можете использовать pkg create
для создания двоичных пакетов из четырех пакетов с соответствующими включенными параметрами и использовать их вместо того, чтобы создавать их в портах на каждом система. Установка двоичного файла выполняется аналогично процессу сборки портов:
pkg install sssd-1.11.7_8.txz
pkg добавить
другие пакеты (не устанавливать, добавлять), сохраняя пакет openldap напоследок. openldap-sasl-client
выполните pkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg create
чтобы заменить зависимость от openldap-client
на openldap-sasl-client
, чтобы избавиться от необходимости делать это удалить / переустановить. У меня не было времени заняться этим.
openldap-client
, поэтому вам также придется их исправить. Конфигурация Kerberos:
[libdefaults] default_realm = MYDOMAIN.NET forwardable = true # Normally all you need in an AD environment, since DNS SRV records # will identify the AD/KRB servers/services. Comment out if you # want to manually point to your AD server dns_lookup_kdc = true [realms] MYDOMAIN.NET = { # If you're manually pointing to a different AD server than what's in DNS # admin_server = adserver.mydomain.net # kdc = adserver.mydomain.net } [domain_realm] mydomain.net = MYDOMAIN.NET .mydomain.net = MYDOMAIN.NET
[sssd] config_file_version = 2 domains = MYDOMAIN.NET services = nss, pam, pac fallback_homedir = /home/%u [domain/MYDOMAIN.NET] id_provider = ad access_provider = ad auth_provider = ad chpass_provider = ad # use AD POSIX attributes, comment out if you are using automatically generated # UIDs and GIDs. ldap_id_mapping = False cache_credentials = true ad_server = adserver.mydomain.net # if you don't have bash, or whatever is in the AD account's loginShell # attribute installed override_shell = /bin/tcsh
/etc/pam.d
, которые мне пришлось изменить, чтобы SSSD работал с FreeBSD: /etc/pam.d/sshd:
# # $FreeBSD: releng/11.0/etc/pam.d/sshd 197769 2009-10-05 09:28:54Z des $ # # PAM configuration for the "sshd" service # # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth sufficient pam_unix.so no_warn try_first_pass nullok auth sufficient pam_sss.so use_first_pass auth required pam_unix.so no_warn use_first_pass # account account required pam_nologin.so #account required pam_krb5.so account required pam_login_access.so account required pam_unix.so account sufficient pam_sss.so # session #session optional pam_ssh.so want_agent session optional pam_sss.so session required pam_mkhomedir.so mode=0700 session required pam_permit.so # password #password sufficient pam_krb5.so no_warn try_first_pass #password sufficient pam_unix.so try_first_pass use_authtok nullok password sufficient pam_unix.so try_first_pass use_authtok password sufficient pam_sss.so use_authtok
/etc/pam.d/system:
# # $FreeBSD: releng/11.0/etc/pam.d/system 197769 2009-10-05 09:28:54Z des $ # # System-wide defaults # # auth auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass #auth required pam_unix.so no_warn try_first_pass nullok auth sufficient pam_unix.so no_warn try_first_pass auth sufficient pam_sss.so use_first_pass auth required pam_deny.so # account #account required pam_krb5.so account required pam_login_access.so account required pam_unix.so account sufficient pam_sss.so # session #session optional pam_ssh.so want_agent session required pam_lastlog.so no_fail session optional pam_sss.so session required pam_mkhomedir.so mode=0700 # password #password sufficient pam_krb5.so no_warn try_first_pass #password required pam_unix.so no_warn try_first_pass password sufficient pam_unix.so no_warn try_first_pass nullok use_authtok password sufficient pam_sss.so use_authtok #password required pam_deny.so
/etc/pam.d/su:
# # $FreeBSD: releng/11.0/etc/pam.d/su 219663 2011-03-15 10:13:35Z des $ # # PAM configuration for the "su" service # # auth auth sufficient pam_rootok.so no_warn auth sufficient pam_self.so no_warn auth requisite pam_group.so no_warn group=wheel root_only fail_safe ruser auth include system.dist # account account include system.dist # session session required pam_permit.so
(indent)
system.dist
- это копия стандартного файла /etc/pam.d/system
. Он включен в файл /etc/pam.d/su
выше, чтобы предотвратить проблемы с командой su. su
для учетных записей AD в качестве root, поскольку после получения root su
не требуется аутентификация, а информация об учетной записи передается через коммутатор службы имен через SSSD. sudo
только по соображениям безопасности ksu
и это работает для переключения с пользователя A на пользователя B
ksu
(в / usr / bin
) не имеет SUID, установленного по умолчанию.
ksu
работал, chmod u + s / usr / bin / ksu
krb5
пакет, установленный в / usr / local / bin
) - SUID при установке / usr / local / bin
находился перед / usr / bin
и т. Д. ksu
будет предлагать пользователю для пароля AD / Kerberos целевого пользователя passwd
не будет работать для изменения вашего пароля AD / Kerberos, даже если вы добавите pam_sss.so
в PAM-файл passwd. Двоичный файл passwd
поддерживает только локальные и NIS. Используйте kpasswd
для изменения пароля на серверах AD / Kerberos. Переключатель службы имен:
/ etc / nsswitch.conf
должен быть настроен для использования службы sss для passwd и групп. Пример:
group: files sss
passwd: files sss
Присоединение к домену:
adcli
kinit
перед использованием, он делает это за вас на основе предоставленных кредитов.
adcli join -D mydomain.net -U Администратор - show-details –v
adcli join –H adclient.mydomain.net -D mydomain.net -U Администратор --show-details -v
net
net
является частью пакета Samba. smb.conf
, что делает ее более удобной. сложен и неудобен в использовании, особенно в неинтерактивном режиме. kinit
. Опять же, это более неудобно и затрудняет неинтерактивное использование в сценарии, поскольку вместо одного шага используется два.
Рекомендации по SSHD:
/ etc / ssh / sshd_config
GSSAPIAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
при использовании этой опции. / bin / passwd
, который не поддерживает ничего, кроме NIS и локального файла passwd. GSSAPICleanupCredentials yes
kdestroy
при выходе из системы GSSAPIStrictAcceptorCheck нет
host / @REALM
для связи с KDC, но иногда ошибается (например, если имя хоста не совпадает с DNS-именем SSH-сервера) . Эта опция позволяет SSHD использовать любой принципал в файле /etc/krb5.keytab
, который включает правильный host / @REALM
ssh -K
работал без запроса пароля (при условии, что вы выполнили kinit 'уже, конечно).