За что отвечают и для чего нужны ldap, kerberos, winbind и sssd?
Прошу объяснить простым языком для чего нужны и за что отвечают: ldap, kerberos , winbind,sssd ? Сам разобрать пытался, но в конце концов запутался напрочь.
- Вопрос задан более трёх лет назад
- 4879 просмотров
Комментировать
Решения вопроса 1
Внимание! Изменился адрес почты!
LDAP — lightweight directory access protocol, протокол облегченного доступа к каталогу, а также одноименная служба. ОБеспечивает доступ к специализированной БД, в которой может хранится все, что угодно, но обычно хранятся учетные данные пользователей, колмпьютеров и т.д. Active Directory — суть LDAP, к ней можно подцепиться обычным LDAP-бразуером и даже скриптами.
Kerberos — сетевой протокол аутентификации. Очень широко используется как в AD, так и в прочих сервисах, которые могут быть как с AD связанными, так и нет. Для аутентификации в AD его широко используют squid и apache. Практически необходим для samba
winbind — локальная копия AD, формируемая samba для целей аутентификации доменных пользователей. Нужен для того, чтобы можно было использовать учетные записи пользователей домена точно таким же образом, как и локальные учетные записи — раздавать права, ограничивать доступ, создавать домашки. Обязательный компонент почтового сервера.
sssd — альтернатива winbind, не требующая наличия samba, достаточно будет adcli. Делает все то же самое, только не нужно устанавливать samba, которая в последнее время толста невероятно.
Ответ написан более трёх лет назад
Нравится 4 3 комментария
Алексей Черемисин @leahch Куратор тега Linux
Да, здесь хотел бы подчеркнуть, что kerberos — только аутентификация! Авторизации в нем нет!
Для авторизации вместе с аутентификацией по kerberos нужно пользовать еще что нибудь, например LDAP.
Авторизацию не следует путать с аутентификацией: аутентификация — это процедура проверки легальности пользователя или данных, например, проверки соответствия введённого пользователем пароля к учётной записи паролю в базе данных, или проверка цифровой подписи письма по ключу шифрования, или проверка контрольной суммы файла на соответствие заявленной автором этого файла. Авторизация же производит контроль доступа легальных пользователей к ресурсам системы после успешного прохождения ими аутентификации. Зачастую процедуры аутентификации и авторизации совмещаются.
Wadik_Wadkovich @Wadik_Wadkovich Автор вопроса
Если я правильно понял :
Ldap — протокол который отвечает за аутентификация авторизация и идентификация доменных пользователей
Kerberos — например , можно привязать конкретного доменного пользователя к пользователю 1С
winbind — управление базой данных домена
sssd — альтернатива winbind
И то есть Active Directory можно создать просто установив пакет ssssd ?
Wadik_Wadkovich, Нет. LDAP — база данных и протокол доступа к ней. AD — это LDAP с нестандартной схемой, расширенной M$, но основные принципы те же. Kerberos — средство аутентификации как в AD, так и вне ее, универсальная вещь. winbind — клиентская аппликуха, нужна исключительно для того, чтобы можно было оперировать доменными учетками, как локальными. Где это нужно? На прокси, на почтовых серверах. sssd — тоже клиентская аппликуха, позволяет сделать то же, что winbind, не ставя samba. AD можно получить, установив samba 4.x, если не хочется ставить настоящий M$ сервер.
Ввод компьютера в домен Windows
Зачастую возникает необходимость ввести Linux-машину в существующий домен Windows. Например, чтобы сделать файловый сервер с помощью Samba. Сделать это очень просто, для этого вам понадобятся клиент Kerberos, Samba и Winbind.
Перед установкой желательно обновиться:
sudo aptitude update sudo aptitude upgrade
Установить всё это добро можно командой:
sudo aptitude install krb5-user samba winbind
Также может понадобиться установить следующие библиотеки:
sudo aptitude install libpam-krb5 libpam-winbind libnss-winbind
Либо, если вы используете Ubuntu Desktop, те же пакеты можно поставить через менеджер пакетов Synaptic.
Далее вам потребуется настроить все вышеперечисленные инструменты для работы с вашим доменом. Допустим, вы хотите войти в домен DOMAIN.COM, доменконтроллером которого является сервер dc.domain.com с IP адресом 192.168.0.1. Этот же сервер является и первичным DNS сервером домена. Кроме того допустим у вас есть второй доменконтроллер 1) , он же DNS — dc2.domain.com с IP 192.168.0.2. Ваш же компьютер будет называться smbsrv01.
Настройка DNS
Для начала необходимо изменить настройки DNS на вашей машине, прописав в качестве DNS сервера доменконтроллер 2) и в качестве домена поиска — нужный домен.
Если у вас статический IP-адрес, то в Ubuntu Desktop это можно сделать через Network Manager, в Ubuntu Server необходимо изменить содержимое файла /etc/resolv.conf на примерно такое:
domain domain.com search domain.com nameserver 192.168.0.1 nameserver 192.168.0.2
В современных дистрибутивах файл resolv.conf создается автоматически и править вручную его не нужно. Для получение нужного результата нужно добавить необходимые изменения в файл: /etc/resolvconf/resolv.conf.d/head Данные которые будут добавлены в него, будут автоматически вставлены в файл /etc/resolv.conf
Если IP-адрес динамический и присваивается DHCP сервером то после перезагрузки resolv.conf может формироваться «неправильный» resolv.conf’ , например присутствует только один nameserver 192.168.0.1 и не указаны domain и search. Нужно отредактировать /etc/dhcp/dhclient.conf . Чтобы появились записи domain и search нужно убрать комментарий перед строкой supersede domain-name, и вписать свой домен:
supersede domain-name "domain.com";
Чтобы добавить еще один nameserver нужно убрать комментарий перед prepend domain-name-servers и указать ip сервера:
prepend domain-name-servers 192.168.0.2;
Для применения изменений остается перезапустить службу:
/etc/init.d/networking restart
Теперь убедитесь, что вы задали нужное имя компьютера в файле /etc/hostname :
smbsrv01
Кроме того необходимо отредактировать файл /etc/hosts так, чтобы в нём была запись с полным доменным именем компьютера и обязательно коротким именем хоста, ссылающаяся на один из внутренних IP:
# Имена этого компьютера 127.0.0.1 localhost 127.0.1.1 smbsrv01.domain.com smbsrv01
Сразу нужно проверить что нормально пингуется наш контроллер домена, по короткому и полному имени, чтобы в будушем не получать ошибки что контроллер домена не найден:
ping dc ping dc.domain.com
Не обязательно, но если вы что-то поменяете — перезагрузите компьютер для применения изменений.
Настройка синхронизации времени
Далее необходимо настроить синхронизацию времени с доменконтроллером. Если разница будет более 5 минут мы не сможем получить лист от Kerberos. Для единовременной синхронизации можно воспользоваться командой:
sudo net time set dc
Если в сети существует сервер точного времени, то можно воспользоваться им или любым публичным:
ntpdate ntp.mobatime.ru
Автоматическая же синхронизация настраивается с помощью ntpd , это демон будет периодически выполнять синхронизацию. Для начала его необходимо установить:
sudo aptitude install ntp
Теперь исправьте файл /etc/ntp.conf , добавив в него информацию о вашем сервере времени:
# You do need to talk to an NTP server or two (or three). server dc.domain.com
После чего перезапустите демон ntpd :
sudo /etc/init.d/ntp restart
Теперь пора настраивать непосредственно взаимодействие с доменом.
Настройка авторизации через Kerberos
Начнём с настройки авторизации в домене через протокол Kerberos. Вам потребуется изменить файл /etc/krb5.conf . В общем случае он выглядит так:
[libdefaults] default_realm = DOMAIN.COM kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true v4_instance_resolve = false v4_name_convert = < host = < rcmd = host ftp = ftp >plain = < something = something-else >> fcc-mit-ticketflags = true [realms] DOMAIN.COM = < kdc = dc kdc = dc2 admin_server = dc default_domain = DOMAIN.COM >[domain_realm] .domain.com = DOMAIN.COM domain.com = DOMAIN.COM [login] krb4_convert = false krb4_get_tickets = false
Вам, конечно, нужно изменить domain.com на ваш домен и dc и dc2 на ваши доменконтроллеры. Кстати, возможно вам понадобится написать полные имена доменконтроллеров dc.domain.com и dc2.domain.com . Поскольку у меня прописан домен поиска в DNS , то мне это делать не нужно.
Обратите особое внимание на регистр написания имени домена — везде, где домен написан в верхнем регистре, его обязательно нужно писать именно в верхнем регистре. Иначе волшебным образом ничего может не заработать.
Это не все возможные опции настройки Kerberos, только основные. Однако их обычно достаточно.
Теперь настало время проверить, что мы можем авторизоваться в домене. Для этого выполните команду
kinit username@DOMAIN.COM
Вместо username естественно стоит вписать имя существующего пользователя домена.
Имя домена необходимо писать заглавными буквами!
Если вы не получили никаких ошибок — значит вы настроили всё верно и домен отдаёт вам билет Kerberos. Кстати, некоторые распространённые ошибки перечислены чуть ниже.
Убедиться в том, что билет получен, можно выполнив команду
klist
Удалить все билеты (они вам вообще говоря не нужны) можно командой
kdestroy
Итак, будем считать, что авторизацию вы настроили, пора настроить непосредственно вход в домен, об этом после списка распространённых ошибок kinit .
Распространённые ошибки kinit
kinit(v5): Clock skew too great while getting initial credentials
Это значит, что у вашего компьютера не синхронизировано время с доменконтроллером (см. выше).
kinit(v5): Preauthentication failed while getting initial credentials
Вы ввели неверный пароль.
kinit(v5): KDC reply did not match expectations while getting initial credentials
Самая странная ошибка. Убедитесь, что имя realm в krb5.conf , а так же домен в команде kinit введены большими буквами:
DOMAIN.COM = < # .
kinit username@DOMAIN.COM
kinit(v5): Client not found in Kerberos database while getting initial credentials
Указанного пользователя не существует в домене.
Настройка Samba и вход в домен
Для того, чтобы войти в домен, необходимо прописать правильные настройки в файле /etc/samba/smb.conf . На данном этапе вас должны интересовать только некоторые опции из секции [global] . Ниже - пример части файла конфигурации Samba с комментариями по поводу значения важных параметров:
[global] # Эти две опции нужно писать именно в заглавном регистре, причём workgroup без # последней секции после точки, а realm - полное имя домена workgroup = DOMAIN realm = DOMAIN.COM # Эти две опции отвечают как раз за авторизацию через AD security = ADS encrypt passwords = true # Просто важные dns proxy = no socket options = TCP_NODELAY # Если вы не хотите, чтобы самба пыталась при случае вылезти в лидеры в домене или рабочей группе, # или даже стать доменконтроллером, то всегда прописывайте эти пять опций именно в таком виде domain master = no local master = no preferred master = no os level = 0 domain logons = no # Отключить поддержку принтеров load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes
После того, как вы отредактируете smb.conf выполните команду
testparm
Она проверит вашу конфигурацию на ошибки и выдаст суммарную сводку о нём:
# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions
Как видно мы задали правильные параметры для того, чтобы наш компьютер стал членом домена. Теперь пора попытаться непосредственно войти в домен. Для этого введите команду:
net ads join -U username -D DOMAIN
И в случае успеха вы увидите что-то похожее на:
# net ads join -U username -D DOMAIN Enter username's password: Using short domain name -- DOMAIN Joined 'SMBSRV01' to realm 'domain.com'
Используемые параметры команды net
-U username%password : Обязательный параметр, вместо username необходимо подставить имя пользователя с правами администратора домена, и указать пароль.
-D DOMAIN : DOMAIN - собственно сам домен, домен можно и не указывать, но лучше всё же это всегда делать - хуже не будет.
-S win_domain_controller : win_domain_controller , можно не указывать, но бывают случаи когда автоматически сервер не находит контроллер домена.
createcomputer=«OU/OU/…» : В AD часто используется OU (Organizational Unit), есть в корне домена OU = Office, в нем OU = Cabinet, чтобы сразу добавить в нужный можно указать так: sudo net ads join -U username createcomputer=«Office/Cabinet».
Если больше никаких сообщений нет - значит всё хорошо. Попробуйте попинговать свой компьютер по имени с другого члена домена, чтобы убедиться, что в домене всё прописалось так, как надо.
Так же можно набрать команду:
net ads testjoin
Если все хорошо, можно увидеть:
#net ads testjoin Join is OK
Но иногда после сообщения о присоединении к домену выдаётся ошибка наподобие 3) :
DNS update failed!
Это не очень хорошо, и в этом случае рекомендуется ещё раз прочитать раздел про настройку DNS чуть выше и понять, что же вы сделали не так. После этого нужно удалить компьютер из домена и попытаться ввести его заново. Если вы твердо уверены, что всё настроили верно, а DNS всё равно не обновляется, то можно внести вручную запись для вашего компьютера на ваш DNS сервер и всё будет работать. Конечно, если нет никаких других ошибок, и вы успешно вошли в домен. Однако лучше всё же разберитесь, почему DNS не обновляется автоматически. Это может быть связано не только с вашим компьютером, но и с некорректной настройкой AD.
Прежде чем выяснять, почему же не обновляется DNS , не забудьте перезагрузить компьютер после введения в домен! Вполне возможно, что это решит проблему.
Если всё прошло без ошибок, то поздравляем, вы успешно вошли в домен! Можете заглянуть в AD и убедиться в этом. Кроме того хорошо бы проверить, что вы можете видеть ресурсы в домене. Для этого установите smbclient :
sudo aptitude install smbclient
Теперь можно просматривать ресурсы компьютеров домена. Но для этого нужно иметь билет kerberos, т.е. если мы их удалили, то получаем опять через kinit (см. выше). Посмотрим какие ресурсы предоставлены в сеть компьютером workstation :
smbclient -k -L workstation
Вы должны увидеть список общих ресурсов на этом компьютере.
Настройка Winbind
Если вам необходимо как-либо работать с пользователями домена, например, настраивать SMB-шары с разграничением доступа, то вам понадобится кроме самой Samba ещё и Winbind - специальный демон, служащий для связи локальной системы управления пользователями и группами Linux с сервером Active Directory. Проще говоря Winbind нужен, если вы хотите видеть пользователей домена на своём компьютере с Ubuntu.
Winbind позволяет спроецировать всех пользователей и все группы AD в вашу Linux систему, присвоив им ID из заданного диапазона. Таким образом вы сможете назначать пользователей домена владельцами папок и файлов на вашем компьютере и выполнять любые другие операции, завязанные на пользователей и группы.
Для настройки Winbind используется всё тот же файл /etc/samba/smb.conf . Добавьте в секцию [global] следующие строки:
# Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind. # Диапазоны идентификаторов для виртуальных пользователей и групп. idmap uid = 10000 - 40000 idmap gid = 10000 - 40000 # Эти опции не стоит выключать. winbind enum groups = yes winbind enum users = yes # Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп # будут использоваться с доменом, т.е. вместо username - DOMAIN\username. # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. winbind use default domain = yes # Если вы хотите разрещить использовать командную строку для пользователей домена, то # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false template shell = /bin/bash # Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку winbind refresh tickets = yes
idmap uid = 10000 - 40000
idmap gid = 10000 - 40000
в новых версиях Samba уже устарели и при проверке конфига самбы с помощью testparm будет выдваться предупреждение:
WARNING: The «idmap uid» option is deprecated
WARNING: The «idmap gid» option is deprecated
Чтобы убрать предупреждения нужно заменить эти строки на новые:
idmap config * : range = 10000-20000
idmap config * : backend = tdb
Теперь перезапустите демон Winbind и Samba в следующем порядке:
sudo /etc/init.d/winbind stop sudo smbd restart sudo /etc/init.d/winbind start
sudo testparm
Смотрим есть ли ошибки или предупреждения, если появится:
«rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)»
Без перезагрузки можно устранить так:
ulimit -n 16384
Для сохранения после перезагрузки отредактировать файл /etc/security/limits.conf
# Добавить в конец файла строки: * - nofile 16384 root - nofile 16384
После перезапуска проверьте, что Winbind установил доверительные отношения с AD командой:
# wbinfo -t checking the trust secret for domain DCN via RPC calls succeeded
А так же, что Winbind увидел пользователей и группы из AD командами 4) :
wbinfo -u wbinfo -g
Эти две команды должны выдать список пользователей и групп из домена соответственно. Либо с префиксом DOMAIN\ , либо без него - в зависимости от того, какое значение вы указали параметру «winbind use default domain» в smb.conf .
Итак, Winbind работает, однако в систему он ещё не интегрирован.
Добавление Winbind в качестве источника пользователей и групп
Для того, чтобы ваша Ubuntu прозрачно работала с пользователями домена, в частности, чтобы вы могли назначать пользователей домена владельцами папок и файлов, необходимо указать Ubuntu использовать Winbind как дополнительный источник информации о пользователях и группах.
Для этого измените две строчки в файле /etc/nsswitch.conf :
passwd: compat group: compat
добавив к ним в конец winbind :
passwd: compat winbind group: compat winbind
также рекомендую привести строку files в файле /etc/nsswitch.conf к виду:
files: dns mdns4_minimal[NotFoud=return] mdns4
ubuntu server 14.04, файл /etc/nsswitch.conf не содержал строку «files: dns mdns4_minimal[NotFoud=return] mdns4» вместо неё было: «hosts: files mdns4_minimal [NOTFOUND=return] dns wins» Которую я преобразовал в: «hosts: dns mdns4_minimal[NotFoud=return] mdns4 files» после чего всё заработало
Теперь проверьте, что Ubuntu запрашивает у Winbind информацию о пользователях и группах, выполнив
getent passwd getent group
Первая команда должна вам вернуть всё содержимое вашего файла /etc/passwd , то есть ваших локальных пользователей, плюс пользователей домена с ID из заданного вами в smb.conf диапазона. Вторая должна сделать тоже самое для групп.
Теперь вы можете взять любого пользователя домена и сделать его, например, владельцем какого-нибудь файла.
Авторизация в Ubuntu через пользователей домена
Несмотря на то, что все пользователи домена фактически стали полноценными пользователями системы (в чём можно убедиться, выполнив последние две команды из предыдущего раздела), зайти ни под кем из них в систему всё ещё нельзя. Для включения возможности авторизации пользователей домена на компьютере с Ubuntu необходимо настроить PAM на работу с Winbind.
Он-лайн авторизация
Для Ubuntu 10.04 и выше добавьте всего одну строку в файле /etc/pam.d/common-session , т.к. PAM и так неплохо справляется с авторизацией:
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077
Для Ubuntu 13.10 чтобы появилось поле ручного ввода логина необходимо в любой файл из папки /etc/lightdm/lightdm.conf/ снизу добавить строку:
greeter-show-manual-login=true
Для Ubuntu 9.10 и ниже придется редактировать несколько файлов (но никто не запрещает использовать этот способ и в 10.04 - он тоже работает):
Последовательность строк в файлах имеет значение!
auth required pam_env.so auth sufficient pam_unix.so likeauth nullok try_first_pass auth sufficient pam_winbind.so use_first_pass krb5_auth krb5_ccache_type=FILE auth required pam_deny.so
account sufficient pam_winbind.so account required pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel/ umask=0077 session optional pam_ck_connector.so nox11 session required pam_limits.so session required pam_env.so session required pam_unix.so
password sufficient pam_unix.so try_first_pass use_authtok nullok sha512 shadow password sufficient pam_winbind.so password required pam_deny.so
И, наконец, необходимо перенести запуск Winbind при загрузке системы после всех остальных служб (по умолчанию он запускается с индексом 20). Для этого в терминале выполните следующую команду:
sudo bash -c "for i in 2 3 4 5; do mv /etc/rc$i.d/S20winbind /etc/rc$i.d/S99winbind; done"
Что эквивалентно запуску для каждого уровня (в примере - 4) команды:
mv /etc/rc4.d/S20winbind /etc/rc4.d/S99winbind
В некоторых случаях winbind может иметь иной уровень запуска (например, S02winbind). Поэтому сначала проверьте имена файлов, вполнив команду «ls /etc/rc<2,3,4,5>.d/ | grep winbind» (без кавычек).2,3,4,5>
Готово, все настройки завершены. Перезагружайтесь и пытайтесь войти с учетной записью пользователя домена.
Офф-лайн авторизация
Часто возникает ситуация, когда домен-контроллер недоступен по различным причинам — профилактика, отключение света или вы принесли ноутбук домой и хотите поработать. В этом случае для Winbind можно настроить кэширование учетных записей пользователей домена. Для этого необходимо сделать следующее. Добавьте в секцию [global] файла /etc/samba/smb.conf следующие строки:
[global] # Возможность оффлайн-авторизации при недоступности доменконтроллера winbind offline logon = yes # Период кэширования учетных записей, по умолчанию равен 300 секунд winbind cache time = 300 # Необязательная настройка, но избавляет от нудных пауз, указываем контроллер домена dc, # можно указать и ip, но это является плохим тоном password server = dc
Обычно этого достаточно. Если же возникают ошибки, то необходимо создать файл /etc/security/pam_winbind.conf со следующим содержанием 5) :
Внимание! При использовании советов ниже может возникать совершенно случайная ошибка «Сбой аутентификации»! Поэтому все что Вы делаете, Вы делаете на свой страх и риск!
# # pam_winbind configuration file # # /etc/security/pam_winbind.conf # [global] # turn on debugging debug = no # request a cached login if possible # (needs "winbind offline logon = yes" in smb.conf) cached_login = yes # authenticate using kerberos krb5_auth = yes # when using kerberos, request a "FILE" krb5 credential cache type # (leave empty to just do krb5 authentication but not have a ticket # afterwards) krb5_ccache_type = FILE # make successful authentication dependend on membership of one SID # (can also take a name) ;require_membership_of = silent = yes
Файл /etc/pam.d/gnome-screensaver в таком случае принимает вид:
auth sufficient pam_unix.so nullok_secure auth sufficient pam_winbind.so use_first_pass auth required pam_deny.so
А также изменяется файл /etc/pam.d/common-auth :
auth optional pam_group.so auth sufficient pam_unix.so nullok_secure use_first_pass auth sufficient pam_winbind.so use_first_pass auth required pam_deny.so
Winbind что это
Поддержи автора блога, подпишись на Boosty и Telegram-канал.
Ввод Debian 10 Buster в домен Windows с помощью Kerberos, Samba, Winbind
16.10.2023 27.10.2021 jakonda
507 просмотров Комментариев нет
Ниже опишу как ввести linux систему Debian 10 в домен Windows с помощью Kerberos, Samba, Winbind.
- Контроллер домена (DC1) на Windows Server 2019, домен SYSOS.LOCAL
- Linux система (datastore1) на Debian 10 Buster
Подготовка системы
Перед началом выполнения ниже описанных действий обновляем систему до актуального состояния:
apt-get update && apt-get upgrade -y
Указываем FQDN ( Fully Qualified Domain Name) имя системы, в файле /etc/hostname :
datastore1.sysos.local
Так же файл /etc/hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP:
127.0.0.1 localhost 127.0.1.1 datastore1.sysos.local datastore1
Настройка синхронизации времени
Если разница будет более 5 минут, то будет не возможно получить билет от Kerberos. Настраиваем синхронизацию времени с контроллером домена, выполняем установку NTP:
apt-get install ntp ntpdate
В файле конфигурации /etc/ntp.conf , добавляем в него информацию о вашем сервере времени (в моем случае указываю контролер домена):
# You do need to talk to an NTP server or two (or three). server dc1.sysos.local
Перезапускаем службу времени:
/etc/init.d/ntp restart
Для единовременной синхронизации можно воспользоваться командой:
ntpdate dc1.sysos.local
Рекомендую ознакомится подробней о синхронизации времени на Linux системах можно почитать в этой статье и выполнить его настройку.
Настройка Kerberos
Установка пакетов для поддержки аутентификации Kerberos:
apt-get install krb5-user
В ходе установки может появится запрос указать область по-умолчанию для Kerberos, область необходимо его указать в заглавном виде (прим. SYSOS.LOCAL)
Файл конфигурации Kerberos /etc/krb5.conf , приводим к виду:
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = SYSOS.LOCAL dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] SYSOS.LOCAL = < kdc = dc1.sysos.local default_domain = SYSOS.LOCAL admin_server = dc1.sysos.local >[domain_realm] .sysos.local = SYSOS.LOCAL sysos.local = SYSOS.LOCAL
Соответственно подставляем название своего домена вместо sysos.local/SYSOS.LOCAL
Проверка работы Kerberos, выполним авторизацию в Active Directory ( kinit jakonda@SYSOS.LOCAL ):
kinit jakonda@SYSOS.LOCAL Password for jakonda@SYSOS.LOCAL:
Обращаю внимание на строгость соблюдения синтаксиса команды, имя пользователя нужно указывать именно так — jakonda@SYSOS.LOCAL
Проверить можно получен ли билет или нет, можно командой ( klist ):
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: jakonda@SYSOS.LOCAL Valid starting Expires Service principal 10/27/21 11:24:00 10/27/21 21:24:00 krbtgt/SYSOS.LOCAL@SYSOS.LOCAL renew until 10/28/21 11:23:56
Все отлично, можно удалить полученный билет:
kdestroy
Установка\настройка Samba и ввод в домен
Устанавливаем необходимые пакеты:
apt-get install samba cifs-utils winbind libnss-winbind libpam-winbind -y
Конфигурационный файл Samba /etc/samba/smb.conf приводим к виду:
[global] # ОБЩИЕ ПАРАМЕТРЫ СЕТЕВОЙ ШАРЫ realm = SYSOS.LOCAL workgroup = SYSOS security = ads encrypt passwords = yes netbios name = datastore1 server string = %h server domain master = no local master = no preferred master = no os level = 0 domain logons = no dns proxy = no socket options = TCP_NODELAY unix charset = UTF-8 dos charset = 866 # Конфигурация для домена SYSOS.LOCAL и его пользователей и групп idmap config * : backend = tdb idmap config * : range = 3000-7999 idmap config SYSOS : backend = rid idmap config SYSOS : range = 10000-999999 # ПАРАМЕТРЫ WINBIND winbind enum users = yes winbind enum groups = yes winbind refresh tickets = yes winbind use default domain = yes winbind offline logon = yes winbind cache time = 300 template shell = /bin/bash # ОТКЛЮЧЕНИЕ ПОДДЕРЖКИ СЕТЕВЫХ ПРИНТЕРОВ load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes # ПАРАМЕНТЫ ЛОГИРОВАНИЯ log level = 0 vfs:1
Обращаю внимание что в параметрах realm, workgroup указываем название своего домена. Подробное описание используемых параметров можно по этой ссылке. А так же в параметрах idmap config в место SYSOS, указываем свой домен.
Так как в Linux по-умолчанию установлен лимит на 1024 одновременно открытых файлов, а в Windows он 16384, поэтому увеличим лимит в Debian до значения 16384.
В файле /etc/security/limits.conf дописываем в самый конец строки:
* - nofile 16384 root - nofile 16384
Перезагружаем систему для применения изменений!.
Выполним проверку конфигурации на ошибки, командой:
testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions
Проверка заданной конфигурации Samba правильная, ошибок и предупреждений нет, а поэтому можно вводить систему в домен, выполняем команду:
net ads join -U jakonda@sysos.local
Вывод об успешном присоединении к домену:
Enter jakonda@sysos.local's password: Using short domain name -- SYSOS Joined 'DATASTORE1' to dns domain 'sysos.local'
Настройка Winbind
Теперь чтобы мы могли видеть и использовать в системе Linux доменных пользователей и группы, то нам необходимо настроить winbind в файле /etc/nsswitch.conf . К параметрам passwd , group добавляем параметр winbind :
# Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: files winbind group: files winbind shadow: files gshadow: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Перезапускаем службы Samba и Winbind для применения изменений:
/etc/init.d/smbd restart /etc/init.d/winbind restart
Проверим, что Winbind установил доверительные отношения с Active Directory, выполним команду:
wbinfo -t checking the trust secret for domain SYSOS via RPC calls succeeded
Для проверки видит ли Winbind пользователей и группы из Active Directory, выполним команды:
wbinfo -u wbinfo -g
Если в ходе выполнения данных команд в консоль были выведены пользователи и группы из Active Directory, то это значит что Winbind работает правильно.
Авторизация в системе через пользователей домена
После проделанных выше операций, возможность входа в систему под доменной учетной записью будет возможна, но для того чтобы при входе в систему создавался домашний каталог для пользователя, необходимо в файле /etc/pam.d/common-session после строки session optional pam_systemd.so добавляем следующую строку:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
В итоге файл должен получится следующий (без вывода комментариев):
session [default=1] pam_permit.so session requisite pam_deny.so session required pam_permit.so session required pam_unix.so session optional pam_winbind.so session optional pam_systemd.so session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Для централизованного назначения определенным доменным пользователями возможность выполнения sudo (Административных действий в Linux-системе), создадим отдельный файл в котором укажем доменную группу безопасности в которую уже будут входить нужные пользователи.
Создаем файл /etc/sudoers.d/admins со следующим содержанием:
%ServerAdmins ALL=(ALL) ALL
ИНФОРМАЦИЯ: Обращая внимание что вместо ServerAdmins , указываем соответственно свою существующую группу безопасности.
Так же хочу заместить если ваша группа безопасности содержит пробелы, например — Domain admins , то указывать ее нужно в формате — %Domain\admins
Если есть желание разрешить доступ к авторизации в систему только определенным доменным пользователям, то можно указать возможность авторизации на основе членства доменной группе безопасности.
Для этого в файле конфигурации /etc/pam.d/common-auth в строку описывающую вызов pam_winbind.so добавляем дополнительный параметр require_membership_of , в котором указываем имя доменной группы безопасности в формате SYSOS\ServerAdmins
auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=SYSOS\ServerAdmins
В итоге файл должен получится следующий (без вывода комментариев):
auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass require_membership_of=SYSOS\ServerAdmins auth requisite pam_deny.so auth required pam_permit.so
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Минниахметов Равиль Юрисович
Для того, чтобы ввести сервер Linux в домен AD, необходимо произвести настройку клиента Kerberos, Samba и Winbind. Произведем установку данных компонентов:
yum -y install krb5-user samba winbind ntp samba-winbind samba-winbind-clients pam_krb5
Производим настройку DNS
Необходимо настроить DNS сервер Linux машины таким образом, чтобы основной DNS сервер был точно таким же как и на доменном контролере и в качестве домена указать название домена. (название домена прописывается маленькими буквами). За данные параметры в системе отвечает файл
/etc/resolv.conf
но в современных Linux машинах файл создается автоматически и редактирование его в ручную изменит параметры только до ближайшей перезагрузки. Для добавления необходимых параметров в данный файл необходимо изменить соответствующие директивы в файле для нужного интерфейса в каталоге:
/etc/sysconfig/network-scripts/ifcfg-«название сетевого интерфейса»
если используется DHCP, то все необходимые параметры будут получены с сервера. В итоге файл /etc/resolv.conf должен иметь примерный вид:
search domain.com
nameserver 192.168.0.1
nameserver 192.168.0.2
Далее нужно указать доменное имя сервера локальной машины в файле /etc/hosts:
# Имена этого компьютера
127.0.0.1 localhost
127.0.1.1 smbsrv.domain.com smbsrv
Проверяем доступность доменного контролера:
ping dc
ping dc.domain.com
Перезагружаем сервер для вступления изменений.
Настраиваем синхронизацию времени
Если разница во времени будет больше 5 минут со временем доменного контроллера, сервер не сможет получить лист от Kerberos. Для проверки времени можно использовать команду:
net time set domain.com
если же в сети присутствует сервер точного времени:
ntpdate ntpservername
Для автоматической синхронизации времени сервера с сервером времени в сети необходимо добавить в файл /etc/ntp.conf дрективу:
server ntpservername
Перезагружаем службу ntpd:
systemctl restart ntpd
Настраиваем авторизации через Kerberos
Для настройки авторизации в домене через протокол Kerberos необходимо внести в файл /etc/krb5.conf следующие директивы:
[libdefaults]
default_realm = DOMAIN.COM
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
v4_instance_resolve = false
v4_name_convert = host = rcmd = host
ftp = ftp
>
plain = something = something-else
>
>
fcc-mit-ticketflags = true
[realms]
DOMAIN.COM = kdc = dc
kdc = dc2
admin_server = dc
default_domain = DOMAIN.COM
>
[domain_realm]
.domain.com = DOMAIN.COM
domain.com = DOMAIN.COM
[login]
krb4_convert = false
krb4_get_tickets = false
Важное замечание: необходимо соблюдать регистр букв в названии домена.
Проверяем авторизацию в домене:
kinit username@DOMAIN.COM
Команда при успешном выполнении не выдает никаких сообщений. Чтобы проверить получен ли билет от домена для Kerberos, необходимо выполнить следующую команду:
klist
В результате Вы получите сообщение вида:
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@BGMU.LO
Valid starting Expires Service principal
01.06.2017 14:06:56 02.06.2017 00:06:56 krbtgt/BGMU.LO@BGMU.LO
renew until 02.06.2017 14:06:51
Распространённые ошибки kinit
kinit(v5): Clock skew too great while getting initial credentials
Это значит, что у вашего компьютера не синхронизировано время с доменконтроллером (см. выше).
kinit(v5): Preauthentication failed while getting initial credentials
Вы ввели неверный пароль.
kinit(v5): KDC reply did not match expectations while getting initial credentials
Самая странная ошибка. Убедитесь, что имя realm в krb5.conf, а так же домен в команде kinit введены большими буквами:
DOMAIN.COM = # …
kinit username@DOMAIN.COM
kinit(v5): Client not found in Kerberos database while getting initial credentials
Указанного пользователя не существует в домене.
Настройка количество открытых файлов для работы Windows
Стандартная настройка Linux разрешает максимальное количество открыттых файлов равным 1024, хотя для работы Windows требуется 16384. Поэтому может выйти предупреждение:
«rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)»
Без перезагрузки системы на один сеанс достаточно выполнить команду:
ulimit -n 16384
Чтобы каждый раз не вводить данную команду необходимо отредактировать файл /etc/security/limits.conf
# Добавить в конец файла строки:
* — nofile 16384
root — nofile 16384
Настройка Samba сервера
Для настройки сервера необходимо внести корректировки в файл /etc/samba/smb.conf
[global]
# Следует помнить что название домена нужно писать заглавными буквами
workgroup = DOMAIN
realm = DOMAIN.COM
# Настроем авторизацию через AD
security = ADS
encrypt passwords = true
dns proxy = no
socket options = TCP_NODELAY
# Заставим сервер Samba не участвовать в выборах доменного контроллера
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no
# Если на сервере будут только файловые ресурсы, службу печати лучше отключить
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
Для проверки правильности написания конфигурационного файла используется команда:
testparm
Настройка работы Winbind
Для того, чтобы пользователи домена могли иметь разграниченный доступ к папкам и файлам samba сервера необходимо правильно настроить Winbind. Он позволяет с проецировать всех пользователей и группы AD в Linux систему, привоев им ID из заданного диапазона. Таким образом можно назначать пользователей домена владельцами папок и файлов на сервере и выполнять любые другие операции, завязанные на пользователей и группы, например, аутентификацию для входа в систему.
Для настройки Winbind используется всё тот же файл /etc/samba/smb.conf. Добавьте в секцию [global] следующие строки:
# Опции сопоставления доменных пользователей и виртуальных пользователей в системе через Winbind.
# Диапазоны идентификаторов для виртуальных пользователей и групп.
idmap uid = 10000 — 40000
idmap gid = 10000 — 40000
# Эти опции не стоит выключать.
winbind enum groups = yes
winbind enum users = yes
# Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп
# будут использоваться с доменом, т.е. вместо username — DOMAIN\username.
# Возможно именно это вам и нужно, однако обычно проще этот параметр включить.
winbind use default domain = yes
# Если вы хотите разрещить использовать командную строку для пользователей домена, то
# добавьте следующую строку, иначе в качестве shell’а будет вызываться /bin/false
template shell = /bin/bash
# Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку
winbind refresh tickets = yes
Вводим samba сервер в домен
Для этого надо ввести следующую команду с указанием пользователя, который обладает правами добавления в домен
net ads join -U username
Для проверки успешного входа в домен используется команда:
net ads testjoin
Теперь перезапускаем Winbind и Samba в следующем порядке:
systemctl stop winbind
systemctl restart smb
systemctl start winbind
добавим запуск данных служб в автоматическую загрузку при загрузке системы:
systemctl enable smb
systemctl enable nmb
systemctl enable winbind
Чтобы убедиться, что между samba сервером и доменным контроллером установились доверительные отношения, необходимо выполнить следующую команду:
wbinfo -t
Чтобы убедиться, что samba сервер получает список пользователей и список групп, необходимо выполнить следующую команду:
wbinfo -u
wbinfo -g
Добавление Winbind в качестве источника пользователей и групп
Для того, чтобы Linux система могла работать с польщователями и группами домена, необходимо использовать Winbind как дополнительный источник информации о пользователях и группах.
Для этого необходимо внести следующие директивы в файл /etc/nsswitch.conf:
добавить в конец директтивам passwd и group «winbind»:
passwd: winbind
group: winbind
отредактировать директиву files или добавить ее если отсутствует:
files: dns mdns4_minimal[NotFound=return] mdns4
Для проверки получения пользователей из АД необходимо использовать следующую команду:
getent passwd
для групп:
getent group
Замечание:
В случае если не получает система пользователей и группы из АД, то в логах Samba будет присутствовать запись:
create_local_token failed: NT_STATUS_NO_SUCH_USER
Проблема распространяется для Linux Ubuntu.
Решение: добавить или изменить следующие строки в smb.conf
idmap backend = tdb
idmap config*:range = 10000 — 20000
idmap config*:backend = rid
passdb backend = tdbsam
Предоставим доступ к папке пользователям домена
Определим свободное дисковое пространство
df -h
Получаем следующий вывод:
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
/dev/mapper/cl_ito—server-root 50G 6,0G 45G 12% /
devtmpfs 1,9G 0 1,9G 0% /dev
tmpfs 1,9G 0 1,9G 0% /dev/shm
tmpfs 1,9G 8,5M 1,9G 1% /run
tmpfs 1,9G 0 1,9G 0% /sys/fs/cgroup
/dev/md126p1 1014M 145M 870M 15% /boot
/dev/mapper/cl_ito—server-home 411G 33M 411G 1% /home
tmpfs 379M 0 379M 0% /run/user/0
т.к. в /home больше всего свободного места, создадим папку «samba»
mkdir /home/samba
назначим права для данной папки и назначим доменную группу владельцем
chmod -R 775 /home/samba
chown -R user.»domain users» /home/samba
Укажем серверу samba на данную папку. Для этого в файл /etc/samba/smb.conf нужно добавить следующие строки:
[public]
comment = Samba share ITO-SERVER
path = /home/samba
valid users = @»domain users»
writable = yes
force create mode = 775
directory mask = 775
guest ok = no
Настройка безопасности
По умолчанию система безопасности блокирует все соединения и поэтому пока ничего работать не будет. Для этого необходимо внести соответствующие корректировки в firewall:
firewall-cmd —permanent —zone=public —add-service=samba
firewall-cmd —reload
Разрешим доступ доменным пользователям к папке /home/samba selinux
chcon -t samba_share_t /home/samba
Настройка SAMBA файлового сервера на базе CentOS 7 завершена.
Замечание:
При эксплуатации обнаружилось, что возникает ситуация, когда доменный контроллер недоступен по различным причинам и доступ к самбе ресурсам не могут получить доменные пользователи. Поэтому необходимо сделать следующие настройки, чтобы была возможность кеширования учетных записей пользователей домена на Linux машине. Добавим в секцию [global] в конфигурационном файле /etc/smb.conf следующие строки:
[global]
# Возможность оффлайн-авторизации при недоступности доменконтроллера
winbind offline logon = yes
# Период кэширования учетных записей, по умолчанию равен 300 секунд
winbind cache time = 300
# Необязательная настройка, но избавляет от нудных пауз, указываем контроллер домена dc,
# можно указать и ip, но это является плохим тоном
password server = dc