Ввод компьютера в домен 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
Ввод Astra в домен Windows
Проблема такова контролер домена работает на Windows server 2008 R2 с SMB V1. Первоначальные настройки сети произведены и контроллер пингуется. Файлы конфига прилагаю. Ошибка Failed to join domain: failed to lookup DC info for domain ‘GZHIRO.local’ over rpc: The specified I/O operation on %hs was not completed before the time-out period expired. SMB.conf #astra-winbind [global] server string = Astra linux usershare allow guests = Yes map to guest = Bad User obey pam restrictions = Yes pam password change = Yes passwd chat = Enter\snew\s\spassword:* %n\n Retype\snew\s\spassword:* %n\n password\supdated\ssuccessfully . passwd program = /usr/bin/passwd %u server role = standalone server unix password sync = Yes
workgroup = GZHIRO server min protocol = NT1 client min protocol = NT1 min protocol = NT1 realm = GZHIRO.LOCAL 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 kerberos method = secrets and keytab load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes idmap config * : range = 100000-199999 idmap config * : backend = tdb idmap config GZHIRO.LOCAL : range = 200000-299999 idmap config GZHIRO.LOCAL : backend = rid winbind nss info = rfc2307 winbind enum groups = no winbind enum users = no winbind use default domain = yes template homedir = /home/%D/%U template shell = /bin/bash winbind refresh tickets = yes winbind offline logon = yes winbind cache time = 1440 password server 10 unix charset = UTF8 dos charset = CP866
dad823
10.11.22 15:26:29 MSK

Zhbert ★★★★★
( 10.11.22 15:27:36 MSK )

Строки с большим шрифтом — это ключевая информация?
Mischutka ★★★★★
( 14.11.22 07:59:33 MSK )
Вместо systemd-resilver используй свои DNS сервера.
Для этого создай файл rezolv.conf и пропиши в них твои сервера, точнее ip-адреса контроллеров домена.
kostik87 ★★★★★
( 14.11.22 08:02:06 MSK )
Ответ на: комментарий от kostik87 14.11.22 08:02:06 MSK

Что-то dad823 затих, интересно, помогла ли ему замена systemd-resilver на DNS сервера?
Mischutka ★★★★★
( 15.11.22 07:56:35 MSK )
Ответ на: комментарий от Mischutka 15.11.22 07:56:35 MSK
dad823
( 15.11.22 09:03:17 MSK ) автор топика
Ответ на: комментарий от dad823 15.11.22 09:03:17 MSK
Ну помимо указания DNS серверов ещё нужно настроить /etc/krb5.conf, nsswitch, pamd.
Правки одного конфига samba недостаточно.
Вот пример с Debian:
apt install samba winbind krb5-user libpam-krb5 libnss-winbind libpam-winbind
В файле /etc/krb5.conf описываешь свой DNS суффикс и указываешь имя контроллера домена
[libdefaults] default_realm = GZHIRO.LOCAL [realms] OMEGA.LOCAL= < kdc = dc-01.gzhiro.local admin_server = dc-01.gzhiro.local default_domain = GZHIRO.LOCAL >[domain_realm] .gzhiro.local = GZHIRO.LOCAL
В файле /etc/nsswitch.conf
# /etc/nsswitch.conf # # 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: compat winbind files systemd group: compat winbind files systemd shadow: files gshadow: files hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis
Указываешь, что группы (group) и пользователи (passwd) можно искать так же и в winbind.
В /etc/samba/smb.conf делаешь примерно так:
/etc/samba/smb.conf [global] ## Browsing/Identification ### # Change this to the workgroup/NT-domain name your Samba server will part of # workgroup = WORKGROUP workgroup = GZHIRO realm = GZHIRO.LOCAL security = ADS netbios name = WS-01 winbind enum users = yes winbind enum groups = yes vfs objects = acl_xattr map acl inherit = yes store dos attributes = yes allocation roundup size = 4096 client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = No #restrict anonymous = 2 domain master = no local master = no preferred master = no os level = 0 admin users = @"GZHIRO.LOCAL\Администраторы домена" passdb backend = tdbsam idmap uid = 10000-400000 idmap gid = 10000-400000 template shell = /bin/bash # idmap config * : range = 10000-400000 idmap config LAN : backend = rid idmap config LAN : default = yes idmap config LAN : range = 10000-89999 idmap config * : backend = autorid idmap config * : range = 100000-400000
Надо указать параметр netbios name, без него машину в домен не введёшь.
/etc/pam.d/common-session # here are the per-package modules (the "Primary" block) session [default=1] pam_permit.so # here's the fallback if no module succeeds session requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around session required pam_permit.so # The pam_umask module will set the umask according to the system default in # /etc/login.defs and user settings, solving the problem of different # umask settings with different shells, display managers, remote sessions etc. # See "man pam_umask". session optional pam_umask.so # and here are more per-package modules (the "Additional" block) session optional pam_krb5.so minimum_uid=1000 session required pam_unix.so session required pam_mkhomedir.so umask=0022 skel=/etc/skel session optional pam_winbind.so session optional pam_sss.so session optional pam_systemd.so # end of pam-auth-update config
Добавляя поддержку winbind. Обрати внимание на mkhomedir, чтобы создавались домашние директории доменных пользователей.
/etc/pam.d/common-auth # # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # # As of pam 1.0.1-6, this file is managed by pam-auth-update by default. # To take advantage of this, it is recommended that you configure any # local modules either before or after the default block, and use # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # here are the per-package modules (the "Primary" block) auth [success=4 default=ignore] pam_krb5.so minimum_uid=1000 auth [success=3 default=ignore] pam_unix.so nullok try_first_pass auth [success=2 default=ignore] pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass auth [success=1 default=ignore] pam_sss.so use_first_pass # here's the fallback if no module succeeds auth requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around auth required pam_permit.so # and here are more per-package modules (the "Additional" block) auth optional pam_cap.so # end of pam-auth-update config
systemctl restart nmbd systemctl restart smbd
net ads join -U admin@GZHIRO
Linux машина в домене Windows AD с помощью sssd и krb5
Была необходимость ввести в домен Windows машину с Ubuntu. Для этих целей обычно используют Samba и Winbind. Но возможен альтернативный вариант с sssd, краткое руководство по нему ниже.
Для примера будем использовать:
Домен = contoso.com
Контроллер домена = dc.contoso.com
Запускаем терминал Ubuntu:
1. Переключаемся под рута
sudo -i
2. Устанавливаем необходимые пакеты
apt install sssd heimdal-clients msktutil
3. Редактируем /etc/krb5.conf, в качестве отступов используется табуляция
[libdefaults] default_realm = CONTOSO.COM [realms] CONTOSO.COM = < kdc = DC admin_server = dc.contoso.com default_domain = contoso.com >[login] krb4_convert = true krb4_get_tickets = false [domain_realm] .contoso.com = CONTOSO.COM contoso.com = CONTOSO.COM
4. Редактируем файл /etc/hosts, указываем FQDN для данного хоста:
127.0.0.1 localhost 127.0.1.1 .contoso.com
5. Пробуем получить Kerberos ticket от имени администратора домена:
root@ubuntu:~# kinit YourDomainAdmin YourDomainAdmin@CONTOSO.COM's Password:
root@ubuntu:~# klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: YourDomainAdmin@CONTOSO.COM Issued Expires Principal Dec 1 15:08:27 2018 Dec 2 01:08:22 2018 krbtgt/CONTOSO.COM@CONTOSO.COM
Если тикет получен успешно, то теперь можно сгенерировать Kerberos principals для данного хоста, регистр важен:
msktutil -c -b 'CN=YourComputersOU' -s HOST/HOSTNAME.contoso.com -k /etc/sssd/HOSTNAME.keytab --computer-name HOSTNAME --upn HOSTNAME$ --server dc.contoso.com —user-creds-only msktutil -c -b 'CN=YourComputersOU' -s HOST/HOSTNAME -k /etc/sssd/HOSTNAME.keytab --computer-name HOSTNAME --upn HOSTNAME$ --server dc.contoso.com --user-creds-only
Сейчас наш хост должен отобразиться в списке компьютеров в каталоге. Если все так — удаляем полученный Kerberos ticket:
kdestroy
6. Создаем файл /etc/sssd/sssd.conf со следующим содержимым:
[sssd] services = nss, pam config_file_version = 2 domains = contoso.com [nss] entry_negative_timeout = 0 debug_level = 3 [pam] debug_level = 3 [domain/contoso.com] debug_level = 3 ad_domain = contoso.com ad_server = dc.contoso.com enumerate = false id_provider = ad auth_provider = ad chpass_provider = ad access_provider = simple simple_allow_groups = users #каким группам разрешено логиниться, через запятую. Есть ограничение — названия групп должны быть с маленькой буквы. ldap_schema = ad ldap_id_mapping = true fallback_homedir = /home/%u default_shell = /bin/bash ldap_sasl_mech = gssapi ldap_sasl_authid = $ ldap_krb5_init_creds = true krb5_keytab = /etc/sssd/.keytab
Описание параметров конфигфайла sssd можно посмотреть тут
Устанавливаем права доступа для файла sssd.conf:
chmod 600 /etc/sssd/sssd.conf
Перезапускаем SSSD service
service sssd restart
7. Редактируем настройки PAM
Плохое решение:
редактируем файл /etc/pam.d/common-session, после строки
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Хорошее решение:
переопределить параметры через системные настройки PAM, вызываем
pam-auth-update
и отмечаем пункты sss auth и makehomdir. Это автоматически добавит
строчку выше в common-session и она не будет перезатерта при обновлении системы.
Теперь мы можем логиниться на машине доменными пользователями, которым разрешен вход.
P.S.: Можно дать права на использование sudo доменным группам. Используя visudo, редактируем файл /etc/sudoers, или лучше, как рекомендует maxzhurkin и iluvar, создаем новый файл в /etc/sudoers.d/ и редактируем его
visudo -f /etc/sudoers.d/ваш_файл
добавляем требуемую группу — например, Domain Admins (если в названии группы есть пробелы — их необходимо экранировать):
%Domain\ Admins ALL=(ALL) ALL
P.S.S.: Спасибо gotch за информацию о realmd. Очень удобно — если не нужны специфические настройки, то ввод машины в домен занимает, по сути, три (как заметил osipov_dv четыре) команды:
1. Устанавливаем нужные пакеты:
sudo apt install realmd samba-common-bin samba-libs sssd-tools krb5-user adcli
2. Редактируем файл /etc/hosts, указываем FQDN для данного хоста:
127.0.0.1 localhost 127.0.1.1 .contoso.com
3. Проверяем, что наш домен виден в сети:
realm discover contoso.com
4. Вводим машину в домен:
sudo realm --verbose join contoso.com -U YourDomainAdmin --install=/
5. Редактируем настройки PAM
sudo pam-auth-update
Дополнительный плюс данного варианта — сквозная авторизация на файловых ресурсах домена.
Для того чтоб при входе не указывать дополнительно к логину домен, можно добавить суффикс по умолчанию. В файле /etc/sssd/sssd.conf, в блоке [sssd] добавляем строку:
default_domain_suffix = contoso.com
Настройка сервера
Измените имя сервера, если это необходимо. Его можно задать в окне менеджера сервера:

Добавим службу Active Dirrectory и DNS на сервер. Для этого откроем окно добавления ролей в менеджере сервера:

В окне для выбора сервисов установим галочки "Active Directory Domain Services" и "DNS Server":

Во всех остальных пунктах даем согласие на установку.
После завершения установки сервисов вам надо перейти к настройке домена. Для этого откройте меню уведомлений и выберите пункт "Promote this server to a domain controller":

На первой вкладке укажите опцию для создания нового домена и укажите его название:

Введите пароль сброса:

На следующей вкладке оставляем все как есть., т.к. наш сервер сам является DNS сервером:

На следующих трёх вкладках также оставляем все как есть:



Перед запуском процесса установки ознакомимся с уведомлениями об ошибках.. И если необходимо, устраняем возникшие проблемы. В нашем случае уведомления не являются критичными:

После установки Active Directory сервер перезагрузится. Если настройка прошла успешно, то нас попросят войти в аккаунт на этот раз доменного пользователя:

Добавление новых пользователей:
Откроем утилиту управления пользователями и компьютерами домена:

Для удобства можно создать отдельную дирректорию Domain Users, где будем создавать доменных пользователей:


Добавим нового пользователя user:




Аналогичным образом добавьте остальных пользователей, которые должны быть в домене.
Установка центра сертификации Active Directory:
Установите драйверы для работы с Рутокеном на сервер. Их можно получить тут. После этого можно приступить к настройке центра сертификации и выдачи сертификатов для пользователей. Это можно сделать по данной инструкции. Настройку авторизации с помощью сертификатов можно воспроизвести по этой инструкции.
Для пользоватей Linux
Для аутентификации пользователей через linux машины. Помимо токенов с ключами и сертификатов пользователей, вам также необходимо направить им корневой сертификат УЦ.
Его можно получить здесь:




Настройка клиента Linux
Настройка подключения к домену
Astra Linux Smolensk
Для Astra Linux Smolensk чтобы подключиться к домену (не настраивая двухфакторную аутентификацию), можно воспользоваться следующей инструкцией.
Если во время выполнения инструкции панель " Настройки клиента Active Directory " не будет запускаться, то введите в командной строке следующую команду:
доступ к X11 для root
xhost +SI:localuser:root
Она предоставит пользователю root доступ к графическому интерфейсу среды.
В первую очередь настроим подключение к домену. Это можно сделать с помощью следующей последовательности команд:
Настройка DNS
######################################################### ############## Меняем доменное имя клиента ############## ######################################################### # Меняем имя клиента в нашем домене astradomain.ad на client sudo hostnamectl set-hostname client.astradomain.ad # После данного этапа потребуется перезагрузка ######################################################### ### Настройка подключения. Изменяем адрес DNS сервера ### ######################################################### # узнайте название вашего соединения. Они могут отличаться CON_NAME="Проводное соединение 1" # название интерфейса, которое использует ваше соединение INT_NAME="eth0" # адрес dns сервера DNS_SERVER_IP=10.0.2.37 # отключаем соединение sudo nmcli con down "$CON_NAME" # настраиваем сетевую карту соединения - по умолчанию $INT_NAME sudo nmcli con mod "$CON_NAME" connection.interface-name $INT_NAME # настраиваем DNS - вместо DNS_SERVER_IP указать IP-адрес сервера DNS. При необходимости указываем адрес локального сервера DNS. В нашем случае в качестве DNS сервера выступал сам сервер FreeIPA. Поэтому был указан его IP адрес sudo nmcli con mod "$CON_NAME" ipv4.dns "$DNS_SERVER_IP 8.8.8.8" sudo nmcli con mod "$CON_NAME" ipv4.ignore-auto-dns yes # включаем сетевое соединение sudo nmcli con up "$CON_NAME" # Проверка подключения ping server.astradomain.ad ######################################################### ############# Установка необходимых пакетов ############# ######################################################### # для пользователей систем с менеджером пакетов yum sudo yum install -y realmd PackageKit # для пользователей систем с менеджером пакетов apt-get sudo apt-get install -y realmd packagekit # Узнаем какие пакеты еще необходимы для подключения к домену realm discover astradomain.ad # Список необходимых для работы пакетов будет выведен в следующем формате # required-package: pkg1 # required-package: pkg2 # required-package: pkg3 # . # Доустановим отсутствующие пакеты # для пользователей систем с менеджером пакетов yum sudo yum install -y pkg1 pkg2 pkg3 . # для пользователей систем с менеджером пакетов apt-get sudo apt-get install -y pkg1 pkg2 pkg3 . ######################################################### ################# Подключение к домену ################## ######################################################### # Подключимcя к домену # Пользователь user должен обладать правами подключения устройств в домен. sudo realm join astradomain.ad --user=user # Установим пакет krb5-workstation # для пользователей систем с менеджером пакетов yum sudo yum install -y krb5-workstation # для пользователей систем с менеджером пакетов apt-get sudo apt-get install -y krb5-user # для пользователей Alt linux sudo apt-get install -y krb5-workstation # Если в домене есть пользователь user, к которому можно подключиться с помощью пароля, то можно осуществить проверку настройки получив тикет для него kinit user@ASTRADOMAIN.AD # Проверка получения тикета klist # Удаляем тикет kdestroy
Настройка автоматического создания домашней директории
Когда доменный пользователь аутентифицируется в системе необходимо чтобы для него автоматически создавался домашний каталог.
Это можно сделать в настройках pam. Для этого в файле
/etc/pam.d/common-session для систем основанных на Debian
/etc/pam.d/system-auth для систем основанных на Red Hat
/etc/pam.d/system-auth-sss-only для пользователей Alt linux
активируем модуль pam_mkhomedir.so, после pam_sss.so. Содержимое файла будет выглядеть следующем образом:
Настройка автоматического создания каталога
. session optional pam_sss.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 .
Проверка аутентификации под пользователем в домене без Рутокена
Если в домене есть пользователь user, под которым можно аутентифицироваться без смарт-карты, то можно проверить предыдущую надстройку аутентифицируясь под ним. Для начала можно попробовать аутентифицироваться через командную строку:
Настройка автоматического создания каталога
su user@astradomain.ad

Настройка клиента для аутентификации в домене с помощью Рутокена
Упрощенная настройка
Для упрощенной настройки можно воспользоваться утилитой для работы с токенами. Описание упрощенной настройки можно прочитать тут.
Ручная настройка
Установка необходимых пакетов для работу:
Установка libnss3-tools
# для пользователей систем с менеджером пакетов yum sudo yum install -y nss-tools opensc krb5-pkinit # для пользователей систем с менеджером пакетов apt-get sudo apt-get install -y libnss3-tools opensc krb5-pkinit
Для ручной настройки также потребуется установить библиотеку librtpkcs11ecp. Ее можно получить тут. Установим данную библиотеку.
Установка библиотеки pkcs11
# Установка пакета для систем основанных на red hat sudo rpm -i librtpkcs11ecp-2.0.5.1-1.x86_64.rpm # Установка пакета для Debian систем sudo dpkg -i librtpkcs11ecp-2.0.5.1-1.x86_64.deb
Добавление корневого сертификата и сертификатов токена в БД
Установка libnss3-tools
mkdir /etc/pki/nssdb sudo certutil -N -d /etc/pki/nssdb --empty-password
Добавление корневого сертификата в БД:
Установка libnss3-tools
sudo certutil -d /etc/pki/nssdb -A -n 'CA-ROOT-CERT' -t CT,CT,CT -a -i /path/to/ca_cert.pem
Добавление сертификатов с Рутокена:
Добавление сертификатов с Рутокена
sudo modutil -dbdir /etc/pki/nssdb -add "Rutoken PKCS11" -libfile librtpkcs11ecp.so
Проверку того, что сертификаты добавились в БД можно осуществить с помощью команды
Добавление сертификатов с Рутокена
# перезапустите сервис pcscd на случай, если он выключен sudo systemctl restart pcscd # проверяем наличие сертификатов в БД sudo certutil -L -d /etc/pki/nssdb -h all

Настройка SSSD
Для того, чтобы аутентификация корректно работала на лок скрине. В настройках sssd нужно указать название сервиса, использующегося при аутентификации через лок скрин, чтобы сделать его доверенным. У каждой графической оболочки свое название данного сервиса. Узнать название вашей графической оболочки можно с помощью команды:
Название графической оболочки
echo $XDG_CURRENT_DESKTOP
Вот список соответствий названий графических оболочек и сервиса, используемого лок скрином. Данный список не является полным.
MATE → mate-screensaver
X-Cinnamon → cinnamon-screensaver
fly →
KDE → kde
GNOME → xdg-screensaver
Сконфигурируем SSSD. Для этого отредактируем файл /etc/sssd/sssd,conf. Он должен выглядеть примерно следующим образом:
/etc/sssd/sssd.conf
[sssd] domains = astradomain.ad config_file_version = 2 services = nss, pam [domain/astradomain.ad] ad_domain = astradomain.ad krb5_realm = ASTRADOMAIN.AD realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True fallback_homedir = /home/%u@%d access_provider = ad # Если хотим подключатся к пользователям домена не вводя имя домена use_fully_qualified_names = False # Для пользователей Astra Linux также нужно добавить строчку отключения групповых политик ad_gpo_access_control = permissive # Для активации входа по смарт-картам [pam] pam_cert_auth = True # Указываем название сервиса, используемого лок скрином. Если сервис отсутствует, то данную строку не используют pam_p11_allowed_services = +
Перезапустим сервис SSSD
перезапуск сервиса sssd
sudo systemctl restart sssd
Настройка Kerberos
Скопируем корневой сертификат в директорию /etc/pki/tls/certs/.
Копирование корневого сертификата
sudo cp /path/to/ca_cert.pem /etc/pki/tls/certs/
Для настройки Kerberos изменим содержимое файла /etc/krb5.conf. Секция [libdefaults] должна содержать следующее:
/etc/krb5.conf
. [libdefaults] . # Путь до дерриктории с корневым сертификатов с постфиксом .pem pkinit_anchors = DIR:/etc/pki/tls/certs/ # Адрес KDC pkinit_kdc_hostname = server.astradomain.ad # Пропускаем проверку EKU сертификата pkinit_eku_checking = kpServerAuth default_ccache_name = KEYRING:persistent:% # Имя домена по умолчанию default_realm = ASTRADOMAIN.AD # Путь д сертификатов и ключей pkinit_identities = PKCS11:librtpkcs11ecp.so # Для совместимости с AD canonicalize = True .
Проверка настройки с помощью получения тикета для пользователя user, который аутентифицируется по Рутокену
получение тикета для пользователя user
# Получение тикета. Должно быть предложено ввести ПИН-код токена kinit user # Проверка получения тикета klist # Сброс тикета kdestroy

Попытка аутентификации по смарт-карте
Попробуйте аутентифицироваться под доменным пользователем user по смарт-карте в системе:
Аутентфиикация пользователя user
su user

Если аутентификация не прошла успешно, то попробуйте изменить конфигурацию pam модулей, иначе можете пропустить данную часть
Настройка pam модулей
Для аутентификации пользователя в системе с помощью смарт-карты необходимо изменить содержимое pam модулей
Для систем основанных на Debian
Файл /etc/pam.d/common-auth должен содержать следующие строки:
Настройка автоматического создания каталога
. auth [success=2 default=ignore] pam_sss.so forward_pass auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure .
Для систем основанных на Red Hat
Файл /etc/pam.d/system-auth должен содержать следующие строки:
Настройка автоматического создания каталога
. auth [default=1 ignore=ignore success=ok] pam_localuser.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet_success auth sufficient pam_sss.so forward_pass .
Аутентфикация через гритер
Проверьте аутентификацию через гритер через лок скрин.


Для пользователей Astra Linux предложение ввода ПИН-кода не отображается. В поле ввода пароля просто введите ПИН-код от Рутокена:


- Нет меток