Содержание
Введение
Зачастую возникает необходимость ввести 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 - DOMAINusername. # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. 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 — он тоже работает):
Последовательность строк в файлах имеет значение!
/etc/pam.d/common-auth
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
/etc/pam.d/common-account
account sufficient pam_winbind.so account required pam_unix.so
/etc/pam.d/common-session
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
/etc/pam.d/common-password
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» (без кавычек).
Готово, все настройки завершены. Перезагружайтесь и пытайтесь войти с учетной записью пользователя домена.
Офф-лайн авторизация
Часто возникает ситуация, когда домен-контроллер недоступен по различным причинам — профилактика, отключение света или вы принесли ноутбук домой и хотите поработать. В этом случае для 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
Ссылки
В этой статье будет описан процесс добавления Linux-машины (Ubuntu 20.04) в домен Windows AD.
Шаг 1. Установка пакетов и подготовка
sudo apt updatesudo apt upgrade
После этого установите требуемые пакеты.
sudo apt -y install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit
Далее мы настроим все инструменты. Вам требуется знать:
- Домен: office.local
- IP DNS-сервера: 192.168.0.1
- IP второго DNS-сервера: 192.168.0.2
Шаг 2. Настройка DNS
Откройте конфигурационный файл netplan:
sudo nano /etc/netplan/*.yaml
Если вы видите там «dhcp4: true», то есть ваш DHCP-сервер настроен корректно, переходите к следующему шагу. Если вы настраиваете параметры сетевого подключения вручную, ознакомьтесь с примером настройки:
network:ethernets:enp0s3:addresses:- 192.168.0.15/24gateway4: 192.168.0.10nameservers:addresses: [192.168.0.1, 192.168.0.2]search:- office.localoptional: trueversion: 2
- addresses — это IP, назначаемый сетевой карте;
- gateway4 — IP роутера;
- nameservers — DNS-сервера;
- search — целевой домен.
sudo netplan apply
Шаг 3. Обнаружение домена, присоединение к нему и проверка результата.
В первую очередь требуется обнаружить домен:
realm discover office.local
Вы увидите что-то подобное. Это означает, что настройки сети верны и машина получила ответ от домена. Если нет, вам необходимо проверить настройки сети, домен и работоспособность DNS.
office.localtype: kerberosrealm-name: OFFICE.LOCALdomain-name: office.localconfigured: no...
Затем присоединитесь к домену AD. Замените admin1 на имя администратора и укажите пароль.
realm join -U admin1 office.localPassword for admin1:
Проверьте, возможен ли прием информации о пользователе AD. Замените user1 на имя пользователя вашего домена.
id user1@office.localuid=687821651(user1@office.local) gid=687800512(user1@office.local) groups=687800512(domain users@office.local)
Шаг 4. Последние настройки и авторизация.
Необходимо произвести настройку, чтобы в будущем каждый раз не добавлять имя домена к имени пользователя.
sudo nano /etc/sssd/sssd.conf
Измените значение use_fully_qualified_names на False. Перезагрузите и проверьте:
sudo systemctl restart sssdid useruid=687821651(user1@office.local) gid=687800512(user1@office.local) groups=687800512(domain users@office.local)
Теперь нужно настроить создание домашних каталогов для пользователей AD при входе в систему.
sudo nano /etc/pam.d/common-session#add this line in the end of filesession optional pam_mkhomedir.so skel=/etc/skel umask=077
Войдите в систему как пользователь AD.
su – userPassword:Creating directory '/home/user1@office.local'.user1@ubuntu-server:~$
Это означает, что вы успешно вошли в систему как пользователь AD.
Также вы можете разрешить авторизацию для некоторых пользователей и групп AD или же ограничить других. В приведенном ниже примере настроен запрет для всех пользователей, кроме user0, user1 и группы Main Admins.
sudo realm deny –allsudo realm permit user0@office.local user1@office.localsudo realm permit -g 'Main Admins'
Настройка пользователей AD для получения root-прав такая же, как и для локальных, но выполняется в другом файле.
sudo nano /etc/sudoers.d/admins
Добавьте к нему нужные строки. Например:
user ALL=(ALL) ALL%Domain\ Admins ALL=(ALL) ALL
191028
Санкт-Петербург
Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700
300
ООО «ИТГЛОБАЛКОМ ЛАБС»
191028
Санкт-Петербург
Литейный пр., д. 26, Лит. А
+7 (812) 403-06-99
700
300
ООО «ИТГЛОБАЛКОМ ЛАБС»
Contents
-
Introduction
- Used terms
- Kerberos
-
Join AD domain
- Required software
- Join
- Testing
-
Setup Authentication
- nsswitch
- Testing
- PAM
-
Final configuration
- One last thing
- Usage
- Automatic Kerberos Ticket Refresh
- Troubleshooting
-
Resources
- Automated Methods
Introduction
This Howto describes how to add an Ubuntu box in an Active Directory domain and to authenticate the users with AD.
Note: Centrify Express and Likewise Open are alternative solutions for Linux systems to authenticate to an Active Directory domain. For Centrify Express see DirectControl. For Likewise Open see LikewiseOpen.
Used terms
term |
definition |
AD |
Active Directory |
DC |
Domain Controller |
lab.example.com |
AD domain |
win2k3.lab.example.com |
DC FQDN |
10.0.0.1 |
DC IP |
LAB.EXAMPLE.COM |
Kerberos Realm |
linuxwork |
computername of the Ubuntu workstation |
linuxwork.lab.example.com |
FQDN of the Ubuntu workstation |
ntp.example.com |
timeserver (NTP) |
Kerberos
The first step in joining an Active Directory domain is to install and configure Kerberos. See Samba/Kerberos for details.
Join AD domain
Required software
You need to install the winbind and samba packages. The packages smbfs and smbclient are useful for mounting network shares and copying files.
Ubuntu 10.04 and later should also install the libnss-winbind and libpam-winbind packages.
The package smbfs is optional, but includes useful client utilities, including the smbmount command. Also useful is the smbclient package, which includes an FTP-like client for SMB shares.
Join
The first step in joining the Active Directory domain is to edit /etc/samba/smb.conf:
file: /etc/samba/smb.conf
[global] security = ads realm = LAB.EXAMPLE.COM # If the system doesn't find the domain controller automatically, you may need the following line # password server = 10.0.0.1 # note that workgroup is the 'short' domain name workgroup = LAB # winbind separator = + idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /home/%D/%U template shell = /bin/bash client use spnego = yes client ntlmv2 auth = yes encrypt passwords = yes winbind use default domain = yes restrict anonymous = 2
Adding valid users = @»Domain Users» to the [global] section will allow all Domain Users to see all of the shares avaliable without a password. This is the equivlient to allowing «Everyone» to read all shares. If you want to restrict reading a share then you will have to specify valid users for that share.
The «winbind use default domain» parameter is useful in single-domain enterprises and causes winbind to treat any username that isn’t qualified with a domain name as a username in the domain to which winbind is joined. Omit this parameter if you are concerned about confusion between local accounts on your systems and accounts in the default domain. The «winbind separator» directive is optional, and the default value is the usual backslash «» Domain and User separator. You can use «+» if you know of a specific reason «» will not work in your environment.
Be sure to restart the Samba and Winbind services after changing the /etc/samba/smb.conf file:
sudo /etc/init.d/winbind stop sudo /etc/init.d/samba restart sudo /etc/init.d/winbind start
Request a valid Kerberos TGT for an account using kinit, which is allowed to join a workstation into the AD domain. Now join to the domain, if the ticket was valid you should not need to supply a password — even if prompted you should be able to leave it blank.
This next step gave me the error: kinit(v5): Cannot resolve network address for KDC in realm LAB.EXAMPLE.COM while getting initial credentials even though nslookup win2k3 and host 10.0.0.1 would both return the correct entries. To correct this problem, I had to edit my /etc/hosts file and add the following to it: 10.0.0.1 win2k3.lab.example.com
sudo kinit Administrator@EXAMPLE.COM sudo net ads join Using short domain name – LAB Joined 'linuxwork' to realm 'LAB.EXAMPLE.COM'
If the Kerberos auth was valid, you should not get asked for a password. However, if you are not working as root and are instead using sudo to perform the necessary tasks, use the command sudo net ads join -U username and supply your password when prompted. Otherwise, you will be asked to authenticate as root@LAB.EXAMPLE.COM instead of a valid account name. You can also supply a password if you don’t want to get prompted. Just use net ads join -U <username>%<password> for this. Maybe it’s useful for unattended installations where you want to add machines to an AD automatically.
If your Active Directory server is not running DDNS as well (eg. if you’re running a separate DNS server) you may get the error:
sudo net ads join Failed to join domain: failed to find DC for domain LAB.EXAMPLE.COM
To fix this, specify the AD server to the «net join» command:
sudo net ads join -S WIN2K3 -U <username>%<password>
You’ll get a warning about not being able to update DNS, but you will successfully join the AD!
Testing
Using a clean install of 10.04, I did not have to modify any PAM files to get authentication working. I had to edit common-session to get the home directories created, but that is it.
Setup Authentication
nsswitch
file: /etc/nsswitch.conf
passwd: compat winbind group: compat winbind shadow: compat
I needed to add hosts: files dns to /etc/nsswitch.conf to avoid the settings in /etc/hosts to be ignored.
Don´t forget to restart winbind again after editing /etc/nsswitch.conf!!!
Testing
You can check that the Domain has successfully been joined by:
wbinfo -u
You should get a list of the users of the domain.
I needed to make shadow: compat winbind in /etc/nsswitch.conf to make wbinfo -u work.
And a list of the groups. Be patient these queries can take time.
wbinfo -g
Check Winbind nsswitch module with getent.
This step may or may not work. If you only see local users, try connecting with a Windows machine anyways. (Tested under Ubuntu 9.10 x64)
sudo getent passwd root:x:0:0:root:/root:/bin/bash ... LAB+administrator:x:10000:10000:Administrator:/home/LAB/administrator:/bin/bash LAB+gast:x:10001:10001:Gast:/home/LAB/gast:/bin/bash ...
Note that the domain name (here, «LAB+») is displayed by getent only if you have not set winbind use default domain = yes in smb.conf.
sudo getent group root:x:0: daemon:x:1: bin:x:2: ... LAB+organisations-admins:x:10005:administrator LAB+domänen-admins:x:10006:manuel,administrator LAB+domänen-benutzer:x:10000: LAB+domänen-gäste:x:10001: LAB+linux-admins:x:10004:manuel ...
PAM
With this configuration you can access the workstation with local accounts or with domain accounts. On the first login of a domain user a home directory will be created. This PAM configuration assumes that the system will be used primarily with domain accounts. If the opposite is true (i.e., the system will be used primarily with local accounts), the order of pam_winbind.so and pam_unix.so should be reversed. When used with local accounts, the configuration shown here will result in a failed authentication to the Windows/Samba DC for each login and sudo use. This can litter the DC’s event log. Likewise, if local accounts are checked first, the /var/log/auth.log will be littered with failed logon attempts each time a domain account is accessed.
Note: You can use pam-auth-update to add the necessary entries for winbind authentication. If you installed libpam-winbind above, this step is all you need to do to configure pam. You may want to add the line to automatically create the home directory.
sudo pam-auth-update
This PAM configuration does not acquire a Kerberos TGT at login. To acquire a ticket, use kinit after logging in, and consider using kdestroy in a logout script.
file: /etc/pam.d/common-account
account sufficient pam_winbind.so account required pam_unix.so
file: /etc/pam.d/common-auth
auth sufficient pam_winbind.so auth sufficient pam_unix.so nullok_secure use_first_pass auth required pam_deny.so
On a Ubuntu 7.10 (Gutsy Gibbon) and 9.04 (Jaunty Jackalope) systems, these changes to pam.d/common-auth result in not being able to log in as a local user, for example by ssh. Your luck may be better, but test immediately just in case.
This one allows login for AD users and local users (tested with Ubuntu 9.10)
file: /etc/pam.d/common-auth
auth sufficient pam_unix.so nullok_secure auth sufficient pam_winbind.so require_membership_of=domänen-admins use_first_pass auth requisite pam_deny.so auth required pam_permit.so auth optional pam_ecryptfs.so unwrap
ecryptfs does not work with AD users. Login is successful with local users and AD users which are members of AD group domänen-admins
file: /etc/pam.d/common-session
session required pam_unix.so session required pam_mkhomedir.so umask=0022 skel=/etc/skel
file: /etc/pam.d/sudo
auth sufficient pam_winbind.so auth sufficient pam_unix.so use_first_pass auth required pam_deny.so @include common-account
Final configuration
Each domain needs a directory in /home/.
sudo mkdir /home/LAB
One last thing
If you want to be able to use an active directory account to manage your Ubuntu box, you need to add it to the sudoers file. For that, you will need to edit the file /etc/group an add your username to the admin group and whatever other group you need(plugdev,audio,cdrom just to mention a few). it will be like:
....... admin:x:117:olduser,ActiveDirectoryUser .......
Where, olduser, is your current linux user and, ActiveDirectoryUser, is the new administrator. Another way to make a Domain Group a sudoer in your ubuntu is to edit the file /etc/sudoers (using the command ‘visudo’) and add the following line
%adgroup ALL=(ALL) ALL
Where, adgroup, is a group from your active directory. Keep in mind that spaces in the group name are not allowed. You can use ‘%domain admins’, without quotes.
Usage
Logon with DOMAIN+USERNAME, unless you included «winbind use default domain» in your smb.conf, in which case you may log in using only USERNAME.
login: LAB+manuel Password: ***** ... LAB+manuel@linuxwork:~$
Automatic Kerberos Ticket Refresh
To have pam_winbind automatically refresh the kerberos ticket
Add the winbind refresh tickets line to smb.conf :
file: /etc/samba/smb.conf
# winbind separator = + winbind refresh tickets = yes idmap uid = 10000-20000
And modify /etc/pam.d/common-auth:
file: /etc/pam.d/common-auth
auth sufficient pam_winbind.so krb5_auth krb5_ccache_type=FILE auth sufficient pam_unix.so nullok_secure use_first_pass auth required pam_deny.so
Troubleshooting
If the Winbind PAM module in /var/log/auth.log says that the AD-user is not existing restart winbind. It might be best to restart the whole workstation.
sudo /etc/init.d/winbind restart
If when logging into the machine one gets a «no logon servers» error winbindsamba may not be starting properly. Try restarting them manually, and then logging in.
-If a manual restart works, then to fix this issue one needs to change scripts S20samba and S20winbind to S25samba and S25winbind in the /etc/rc2.d, rc3.d, rc4.d, rc5.d folders. The understanding is that this causes samba and winbind to startup later in the boot order for each runlevel. So that they start after S24avahi-daemon. If you then find that you must wait a bit before you can log in, you need to set «winbind enum users» and «winbind enum groups» in /etc/samba/smb.conf to ‘no’.
name service cache daemon
The name service cache daemon (nscd) can interfere with winbind, as winbind maintains its own cache. Remove it.
sudo apt-get remove nscd
Some names or groups are resolved with getent, but others are not
The range of your idmap parameter is not wide enough to encompass all the users or groups
idmap uid = 16777216-33554431 idmap gid = 16777216-33554431
Adding more than one Linux machine to a Windows network
The above procedure allows you to add as many Linux machines as you like. However, the UID assigned to a given user may not be the same across all the machines. It created file ownership & rights issues when files/folders are shared between these machines. See Question #21806 on https://answers.launchpad.net/ubuntu/ for details. Therefore it is advisable to specify the UID mapping method
idmap backend = rid:YOURDOMAIN=70000-1000000 idmap uid = 70000-1000000 idmap gid = 70000-1000000 winbind use default domain = yes security = ADS
The newer syntax is (with old style you can get NT_STATUS_OBJECT_NAME_COLLISION in /var/log/samba/log.winbindd)
idmap domains = YOURDOMAIN idmap config YOURDOMAIN:backend = rid idmap config YOURDOMAIN:range = 70000-1000000 winbind use default domain = yes security = ADS
Resources
-
The Samba and Active Directory Wiki contains very detailed instructions.
Automated Methods
The SADMS package allows for automated joining to Active Directory through a GUI interface. http://sadms.sourceforge.net/
CategorySecurity
На большом количестве разных интернет-ресурсов можно встретить описание процедуры присоединения серверов на базе ОС Linux к домену Active Directory, и практически везде в таких описаниях в виде неотъемлемой части присутствует установка Samba с последующим использованием Winbind. Мы тоже не стали в этом плане исключением. В этой заметке я хочу рассмотреть пример использования альтернативного средства расширения функционала аутентификации и авторизации в Linux – службы SSSD (System Security Services Daemon), которая будет автоматически настроена с помощью пакета realmd (Realm Discovery). В этом примере нами будет настроена аутентификация и авторизация на сервере Debian GNU/Linux 8.6 (Jessie) с подключением к домену Active Directory (на базе Windows Server 2012 R2).
Общую информацию о SSSD можно получить здесь — FedoraProject Wiki – SSSD и здесь — FedoraHosted Wiki – sssd. На русском языке небольшое описание есть в статье Датавед — Настройка SSSD и интересный комментарий есть в ветке форума Pro-LDAP.ru — Сводка систем аутентификации. Меня же SSSD заинтересовала после того, как я наткнулся на пару интересных статей в блоге Red Hat, где SSSD рассматривается как более продвинутая альтернатива Winbind —Overview of Direct Integration Options и SSSD vs Winbind. Даже не взирая на то, что SSSD имеет некоторые ограничения, такие как, например, отсутствие поддержки NTLM (зачем он нужен, если есть Kerberos), эта штука всё равно выглядит интересно.
Как сказано в документе Configuring_sssd_with_ad_server поддержка Active Directory (AD) появилась в SSSD начиная с версии 1.9.0. Проверим версию доступную нам в репозиториях только что установленной Debian Jessie:
# apt-cache show sssd
Package: sssd
Version: 1.11.7-3
Installed-Size: 42
Maintainer: Debian SSSD Team
Architecture: amd64
Depends: python-sss (= 1.11.7-3), sssd-ad (= 1.11.7-3), sssd-common (= 1.11.7-3), sssd-ipa (= 1.11.7-3), sssd-krb5 (= 1.11.7-3), sssd-ldap (= 1.11.7-3), sssd-proxy (= 1.11.7-3)
Description-en: System Security Services Daemon -- metapackage
Provides a set of daemons to manage access to remote directories and authentication mechanisms. It provides an NSS and PAM interface toward the system and a pluggable backend system to connect to multiple different account sources. It is also the basis to provide client auditing and policy services for projects like FreeIPA. This package is a metapackage which installs the daemon and existing authentication back ends.
Multi-Arch: foreign
Homepage: https://fedorahosted.org/sssd/
Section: utils
Priority: extra
Filename: pool/main/s/sssd/sssd_1.11.7-3_amd64.deb
Size: 13248
...
Итак, имеющаяся в репозиториях Debian версия имеет поддержку AD, хотя и не является самой актуальной версией.
Предварительные требования
Прежде чем приступить к установке и настройке SSSD, убедимся в том, что на нашей Linux-системе корректно настроен DNS клиент, то есть, как минимум, в файле /etc/resolv.conf есть ссылки на DNS-серверы, которые отвечают за разрешение имён в домене Active Directory:
# cat /etc/resolv.conf
search ad.holding.com
nameserver 10.1.0.9
nameserver 10.6.1.8
Также, в силу того, что SSSD будет использовать Kerberos, нам нужно убедиться в том, что у нас корректно настроен NTP-клиент и время синхронизировано с контроллерами домена AD. Устанавливаем NTP-клиент и открываем на настраиваем его конфигурационный файл:
# apt-get install ntp
# nano /etc/ntp.conf
В файле меняем строчки указывающие на NTP-сервер. В качестве источника времени указываем контроллеры домена AD:
server 10.1.0.9 iburst
server 10.6.1.8 iburst
Перезапускаем службу ntp и проверяем статус синхронизации времени:
# service ntp restart
# ntpq -4 -p
# date -R
Синхронизация времени настроена и теперь можно приступать к настройке SSSD.
Установка realmd и присоединение к домену Active Directory
Для автоматизации создания конфигурации SSSD существует очень удобный инструмент – пакет realmd (Realm Discovery). Документацию об использовании этого инструмента можно найти по адресу freedesktop.org — realmd docs. Утилита realm, входящая в этот пакет способна автоматически обнаружить информацию о домене AD и поможет нам простым и удобным способом выполнить присоединение нашей Linux-системы к этому домену с автоматической настройкой системы аутентификации Linux (PAM/NSS) и её интеграцией с SSSD.
Установим пакет realmd:
# apt-get install realmd
Проверим как работает обнаружение домена, выполнив realm discover (подробности здесь)
# realm discover ad.holding.com --verbose
* Resolving: _ldap._tcp.ad.holding.com
* Performing LDAP DSE lookup on: 10.2.0.8
* Performing LDAP DSE lookup on: 10.4.5.2
* Performing LDAP DSE lookup on: 10.2.5.3
* Successfully discovered: ad.holding.com
ad.holding.com
type: kerberos
realm-name: AD.HOLDING.COM
domain-name: ad.holding.com
configured: no
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
Как видим, из службы DNS по служебным SRV-записям успешно получена информация о домене и определён набор пакетов, которые нужно установить и настроить в систему для успешного подключения к домену.
Перед запуском процедуры автоматической установки и настройки пакетов с последующим присоединением к домену, при желании (опционально) мы можем настроить дополнительные параметры для работы утилиты realm. Для этого можно создать и настроить конфигурационный файл realmd.conf:
# touch /etc/realmd.conf
Информацию о поддерживаемых опциях файла можно найти в онлайн-справке, либо в локальной справке man realmd.conf. Например, зададим произвольные имя и версию ОС, которые будут отправлены в качестве значений атрибутов operatingSystem и operatingSystemVersion при создании учётной записи компьютера в домене AD
[active-directory]
os-name = Debian GNU/Linux
os-version = 8.6 (Jessie)
Теперь перейдём к процедуре присоединения нашего Linux-компьютера к домену с помощью команды realm join. В ходе выполнения этой процедуры будет выполнено несколько действий:
- Будет установлено ПО необходимое для присоединения и последующей авторизации в домене AD (пакеты adcli, libpam-sss, libnss-sss, sssd, sssd-tools);
- Будет создана учётная запись компьютера в домене AD;
- Будет сгенерирован keytab-файл /etc/krb5.keytab для поддержки Kerberos;
- Будет сконфигурирована и запущена служба sssd
- Будут настроены конфигурационные файлы PAM/NSS для поддержки доменной аутентификации
Пример выполнения команды:
# realm join --verbose --user=petya --user-principal="host/kom-app31.ad.holding.com@AD.HOLDING.COM" --computer-ou="OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com" kom-dc01.ad.holding.com
Все доступные к использованию опции можно посмотреть в онлайн-документации. В рассматриваемом нами примере Linux-компьютер с именем хоста KOM-APP31 будет присоединяться к домену AD.HOLDING.COM, а в процессе присоединения для создаваемой в домене учётной записи компьютера будет использоваться Organizational Unit (OU) Linux ServersKOMad.holding.com. Присоединение к домену будет выполняться с использованием подключения к ближайшему к нам контроллеру домена kom-dc01.ad.holding.com. Обратите внимание на то, что если в качестве последнего параметра явно указан контроллер домена, то он и будет в дальнейшем использоваться в качестве источника проверки учётных данных. Если же вместо имени конкретного контроллера домена указать имя домена, то для определения контроллеров домена используемых для аутентификации в дальнейшем будет использоваться механизм авто-обнаружения по SRV-записям в DNS, что не всегда является желательной конфигурацией, хотя и сводит к минимуму возможные дополнительные правки конфигурационных файлов после «джойна». Помимо этого при вызове команды нами используется ряд опций:
- user – логин доменного пользователя с правами, достаточными для ввода компьютера в домен AD. От имени этого пользователя будет выполняться присоединение компьютера к домену и модификация атрибутов доменной учётной записи компьютера. В классической ситуации — это пользователь с правами администратора домена, так как именно администраторы домена по умолчанию в AD могут обновлять значение атрибута servicePrincipalName. Однако я не очень люблю для «попсовых» задач использовать привилегии такого уровня, поэтому здесь я использую рядового доменного пользователя, у которого есть права на создание и модификацию объектов типа Computer в OU указанном в опции computer-ou;
- user-principal – строка регистрации принципала Kerberos, которая будет использоваться для генерации keytab-файла и регистрации значений атрибута userPrincipalName в свойствах учётной записи компьютера в домене AD.
Теперь о том, зачем мы здесь используем эту опцию.
Указывать в явном виде такое значение, как используется в нашем примере, вовсе не обязательно, так как по сути утилита adcli, которая используется в фоновом режиме в процессе «джойна» должна сама регистрировать значение вида host/serverfqdn@REALM. Однако в нашем случае из репозиториев Debian автоматически устанавливается устаревшая версия (0.7.5-1) этой утилиты, которая имеет проблему описанную в статье adcli creates wrong kerberos keytab entry with uppercase HOST, то есть при генерации keytab-файла записи типа host/* создаются в верхнем регистре, то есть HOST/*. А это, в свою очередь, может в дальнейшем привести к проблеме использования keytab-файла такими службами как, например, sshd. Судя по документу Red Hat Bugzilla — Bug 1267319 этот баг исправлен в adcli версии 0.8.0-1, но так как у нас нет этого обновления, мы используем обходное решение, то есть в явном виде задаём нужный нам формат записи в опции user-principal.; - computer-ou – имя OU, в котором мы хотим создать учётную запись компьютера в домене. Если учётная запись уже существует, то она будет обновлена.
- verbose – понятное дело, подразумевает расширенный вывод информации о всех происходящих действиях.
Пример выполнения команды в моём конкретном случае:
* Resolving: _ldap._tcp.kom-dc01.ad.holding.com
* Resolving: kom-dc01.ad.holding.com
* Performing LDAP DSE lookup on: 10.1.0.9
* Successfully discovered: ad.holding.com
Password for petya:{здесь введём пароль пользователя}
* Unconditionally checking packages
* Resolving required packages
* Installing necessary packages: adcli, libpam-sss, libnss-sss, sssd, sssd-tools
* LANG=C /usr/sbin/adcli join --verbose --domain ad.holding.com --domain-realm AD.HOLDING.COM --domain-controller 10.1.0.9 --computer-ou OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com --login-type user --login-user petya --stdin-password
* Using domain name: ad.holding.com
* Calculated computer account name from fqdn: KOM-APP31
* With user principal: host/kom-app31.ad.holding.com@AD.HOLDING.COM
* Using domain realm: ad.holding.com
* Sending netlogon pings to domain controller: ldap://10.1.0.9
* Received NetLogon info from: KOM-DC01.ad.holding.com
* Wrote out krb5.conf snippet to /var/cache/realmd/adcli-krb5-hRFuGh/krb5.d/adcli-krb5-conf-5nYX3C
* Authenticated as user: petya@AD.HOLDING.COM
* Looked up short domain name: KOM
* Using fully qualified name: KOM-APP31
* Using domain name: ad.holding.com
* Using computer account name: KOM-APP31
* Using domain realm: ad.holding.com
* Calculated computer account name from fqdn: KOM-APP31
* Generated 120 character computer password
* Using keytab: FILE:/etc/krb5.keytab
* Using fully qualified name: KOM-APP31
* Using domain name: ad.holding.com
* Using computer account name: KOM-APP31
* Using domain realm: ad.holding.com
* Looked up short domain name: KOM
* Computer account for KOM-APP31$ does not exist
! Couldn't find a computer container in the ou, creating computer account directly in: OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com
* Calculated computer account: CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com
* Created computer account: CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com
* Set computer password
* Retrieved kvno '2' for computer account in directory: CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com
* Modifying computer account: dNSHostName
* Modifying computer account: userAccountControl
* Modifying computer account: operatingSystem, operatingSystemVersion, operatingSystemServicePack
* Modifying computer account: userPrincipalName
! Couldn't set service principals on computer account CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com: 00002083: AtrErr: DSID-03151785, #1:
0: 00002083: DSID-03151785, problem 1006 (ATT_OR_VALUE_EXISTS), data 0, Att 90303 (servicePrincipalName)
! Couldn't authenticate with keytab while discovering which salt to use: KOM-APP31$@AD.HOLDING.COM: Client 'KOM-APP31$@AD.HOLDING.COM' not found in Kerberos database
* Added the entries to the keytab: KOM-APP31$@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* Added the entries to the keytab: host/kom-app31.ad.holding.com@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* Added the entries to the keytab: HOST/KOM-APP31@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* Cleared old entries from keytab: FILE:/etc/krb5.keytab
* Added the entries to the keytab: HOST/KOM-APP31@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* Added the entries to the keytab: RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* Cleared old entries from keytab: FILE:/etc/krb5.keytab
* Added the entries to the keytab: RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM: FILE:/etc/krb5.keytab
* /usr/sbin/update-rc.d sssd enable
* /usr/sbin/service sssd restart
* Successfully enrolled machine in realm
В моём примере видно, что процесс ввода в домен завершился успешно, однако с заполнением атрибута servicePrincipalName в свойствах учётной записи компьютера в домене возникла проблема, так как указанному в опции —user пользователю petya банально не хватило прав на это действие. Об этом я в общем-то и писал выше, то есть проблему эту я создал себе сам для большего контроля над процессом. Чтобы исправить это, я выполню данное действие в домене вручную с помощью утилиты setspn с любой доменной Windows-машины уже с правами доменного администратора:
C:> setspn -A HOST/kom-app31.ad.holding.com kom-app31
Проверка домена DC=ad,DC=holding,DC=com
Регистрация ServicePrincipalNames для CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com
HOST/kom-app31.ad.holding.com
Обновленный объект
Проверяем результат:
C:> setspn -L kom-app31
Зарегистрирован ServicePrincipalNames для CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com:
HOST/kom-app31.ad.holding.com
Теперь можем приступить к проверке результатов работы realm join, хотя по большому счёту делать это имеет смысл только в случае «траблшутинга» или необходимости внесения в конфигурационные файлы дополнительных правок, чтобы учесть собственную специфику, как в нашем случае.
Проверяем результат работы realm join
В ходе присоединения к домену утилита realm автоматически выполнила установку нужных пакетов — adcli, libpam-sss, libnss-sss, sssd, sssd-tools. При этом, наша Linux-система осталась свободной от монструозной Samba с её Winbind, и это, в некоторой степени, не может не радовать. Более того, в системе мы даже не обнаружим классически привычного для Kerberos пакета krb5-user. Поэтому если мы, по какой-то причине, всё-таки заходим заглянуть внутрь сгенерированного keytab-файла, то нам придётся таки установить соответствующий пакет (по крайней мере другого способа посмотреть keytab я не знаю):
# apt-get install krb5-user
# klist -e -k -t /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
2 10/13/2016 10:52:10 KOM-APP31$@AD.HOLDING.COM (des-cbc-crc)
2 10/13/2016 10:52:10 KOM-APP31$@AD.HOLDING.COM (des-cbc-md5)
2 10/13/2016 10:52:10 KOM-APP31$@AD.HOLDING.COM (arcfour-hmac)
2 10/13/2016 10:52:10 KOM-APP31$@AD.HOLDING.COM (aes128-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 KOM-APP31$@AD.HOLDING.COM (aes256-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 host/kom-app31.ad.holding.com@AD.HOLDING.COM (des-cbc-crc)
2 10/13/2016 10:52:10 host/kom-app31.ad.holding.com@AD.HOLDING.COM (des-cbc-md5)
2 10/13/2016 10:52:10 host/kom-app31.ad.holding.com@AD.HOLDING.COM (arcfour-hmac)
2 10/13/2016 10:52:10 host/kom-app31.ad.holding.com@AD.HOLDING.COM (aes128-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 host/kom-app31.ad.holding.com@AD.HOLDING.COM (aes256-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 HOST/KOM-APP31@AD.HOLDING.COM (des-cbc-crc)
2 10/13/2016 10:52:10 HOST/KOM-APP31@AD.HOLDING.COM (des-cbc-md5)
2 10/13/2016 10:52:10 HOST/KOM-APP31@AD.HOLDING.COM (arcfour-hmac)
2 10/13/2016 10:52:10 HOST/KOM-APP31@AD.HOLDING.COM (aes128-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 HOST/KOM-APP31@AD.HOLDING.COM (aes256-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM (des-cbc-crc)
2 10/13/2016 10:52:10 RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM (des-cbc-md5)
2 10/13/2016 10:52:10 RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM (arcfour-hmac)
2 10/13/2016 10:52:10 RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM (aes128-cts-hmac-sha1-96)
2 10/13/2016 10:52:10 RestrictedKrbHost/KOM-APP31@AD.HOLDING.COM (aes256-cts-hmac-sha1-96)
Как видим, в нашем keytab-файле присутствуют записи. которые мы ранее указывали в опции —user-principal.
***
Проверим наличие настроенного утилитой realm файла /etc/sssd/sssd.conf. При необходимости можно сразу подправить файл, чтобы разрешить аутентификацию по коротким именам, например petya, то есть, без указания доменного суффикса в формате petya@ad.holding.com. Для этого можно либо убрать параметр «use_fully_qualified_names = True» либо в глобальную секцию «[sssd]» добавить доменный суффикс по умолчанию. Я выбираю второй вариант. Помимо этого мы можем добавить нужные нам дополнительные серверы аутентификации — контроллеры домена, расширив значение параметра ad_server и добавив, при необходимости, параметр ad_backup_server (подробнее здесь). Указывать в явном виде конкретные контроллеры домена может быть полезно в случае, если в домене много контроллеров и автоматический механизм обнаружения по SRV-записям в DNS возвращает далеко расположенные контроллеры, что может вызвать дополнительные задержки в процессе аутентификации. В итоге файл примет следующий вид:
[sssd]
domains = ad.holding.com
config_file_version = 2
services = nss, pam
default_domain_suffix = ad.holding.com
[domain/ad.holding.com]
ad_server = kom-dc01.ad.holding.com, kom-dc02.ad.holding.com
ad_backup_server = msk-dc01.ad.holding.com, msk-dc02.ad.holding.com
ad_domain = ad.holding.com
krb5_realm = AD.HOLDING.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%d/%u
access_provider = ad
Практика показала, что даже в случае явного указания контроллеров домена, в случае если в лесу AD несколько доменов, возможна ситуация, при которой поиск доменных пользователей не будет возвращать результатов. В таком случае в секцию [domain/ad.holding.com] можно попробовать добавить дополнительные параметры, ограничивающие поиск:
[domain/ad.holding.com]
...
subdomains_provider = none
ldap_idmap_default_domain_sid = S-1-5-21-xxx-xxx-xxx
Первый параметр отключает запросы к другим поддоменам внутри леса, а второй параметр определяет SID домена, в котором должен выполняться поиск. SID всех доменов в лесу AD можно легко получить на любом доменном Windows-компьютере с помощью PowerShell:
(Get-ADForest).Domains | %{Get-ADDomain -Server $_} | Select name, domainsid
***
Дополнительно пришлось столкнуться с ситуацией, когда при определении членства в группах безопасности для пользователя возвращался неполный перечень групп. Например команда id petya выводила только информацию об основной группе пользователя (например domain users). Обнаружилось и описание этой проблемы: sssd ticket 2667 — id_provider = ad requires ldap_use_tokengroups = False to see secondary groups. В качестве обходного решения этой проблемы предполагается отключение параметра ldap_use_tokengroups в секции домена:
[domain/ad.holding.com]
...
ldap_use_tokengroups = False
...
***
Ещё одна ситуация, с которой можно столкнуться в доменах Active Directory с большим количеством групп и пользователей – исчерпание пула idmap, используемого по умолчанию в SSSD. В таком случае команда типа getent group <имя группы> может не возвращать членство группы, а команда типа id <имя пользователя> может возвращать неполный список доменных групп пользователя. При этом, если запустить sssd интерактивно (службу предварительно нужно остановить) с расширенным дебагом…
# service sssd stop
# sssd -i --debug-level=3
…то в результате выполнения выше обозначенных команд можно обнаружить ошибку типа:
[sdap_idmap_sid_to_unix] (0x0080): Could not convert objectSID [SID пользователя/группы] to a UNIX ID
Для решения этой проблемы можно попробовать расширить используемый в SSSD по умолчанию размере пула idmap с 200000 до, например, 2000000. Делается это в секции описания домена в sssd.conf:
[domain/ad.holding.com]
...
ldap_idmap_range_size = 2000000
...
Подробнее об idmap и его границах в sssd можно почитать в man sssd-ad
***
Чтобы внесённые в sssd.conf изменения вступили в силу, перезапускаем службу sssd с очисткой кэшей sss:
# service sssd stop
# rm -f /var/lib/sss/db/*
# rm -f /var/lib/sss/mc/*
# service sssd start
Убедимся в том, что служба sssd успешно запущена и настроена на автоматический запуск:
# service sssd status
● sssd.service - System Security Services Daemon
Loaded: loaded (/lib/systemd/system/sssd.service; enabled)
Active: active (running) since Tue 2016-10-14 23:10:13 MSK; 4s ago
Process: 10310 ExecStart=/usr/sbin/sssd -D -f (code=exited, status=0/SUCCESS)
Main PID: 10311 (sssd)
CGroup: /system.slice/sssd.service
├─10311 /usr/sbin/sssd -D -f
├─10312 /usr/lib/x86_64-linux-gnu/sssd/sssd_be --domain ad.holding.com --debug-to-files
├─10313 /usr/lib/x86_64-linux-gnu/sssd/sssd_nss --debug-to-files
└─10314 /usr/lib/x86_64-linux-gnu/sssd/sssd_pam --debug-to-files
...
***
Проверить то, что SSSD успешно прописан в качестве NSS/PAM провайдера можно, заглянув в ряд системных файлов — /etc/nsswitch.conf и /etc/pam.d/common-*. Файл nsswitch.conf привожу информативно без внесения в него каких-либо правок и убрав из вывода его комментарии, чтобы показать, что в нём появились вызовы sss:
passwd: compat sss
group: compat sss
shadow: compat sss
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files sss
ethers: db files
rpc: db files
netgroup: nis sss
Проверим файл /etc/pam.d/common-session. Внесём в этот файл дополнительную правку — в конец файла добавим строку определяющую директиву создания домашнего каталога в случае его отсутствия. Таким образом, для вновь подключаемых к серверу доменных пользователей автоматически будут создаваться домашние каталоги по шаблону указанному в параметре fallback_homedir в конфигурации sssd.conf. Результирующий файл (без вывода комментариев) получится следующий:
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_sss.so
session optional pam_systemd.so
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
Другие файлы, также без вывода комментариев, привожу чисто информативно, так как их правка не требуется, и нам лишь можно убедиться в том, что в указанных файлах есть вызовы библиотеки pam_sss.so.
Файл /etc/pam.d/common-auth :
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_sss.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so
Файл /etc/pam.d/common-account :
account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
account requisite pam_deny.so
account required pam_permit.so
account sufficient pam_localuser.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
Файл /etc/pam.d/common-password :
password requisite pam_pwquality.so retry=3
password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
password sufficient pam_sss.so use_authtok
password requisite pam_deny.so
password required pam_permit.so
Проверяем доступ к пользователям и группам Active Directory
Теперь можно проверить возможность получения информации о пользователе из домена AD. При желании можно проверить разные форматы представления учётной записи (с NetBIOS-именем домена, с доменным суффиксом в виде UPN):
# getent passwd petya
petya@ad.holding.com:*:1668597447:1668100510:Петя Резинкин:/home/ad.holding.com/petya:/bin/bash
# getent passwd KOM\petya
petya@ad.holding.com:*:1668597447:1668100510:Петя Резинкин:/home/ad.holding.com/petya:/bin/bash
# getent passwd petya@ad.holding.com
petya@ad.holding.com:*:1668597447:1668100510:Петя Резинкин:/home/ad.holding.com/petya:/bin/bash
По аналогии проверяем то, что из домена нам возвращается информация об интересующей нас группе безопасности и входящих в эту группу доменных пользователях:
# getent group "KOM-SRV-Linux-Admins@ad.holding.com"
kom-srv-linux-admins@ad.holding.com:*:1668876454:petya@ad.holding.com,vovan@ad.holding.com
Как видим, всё в порядке. И при этом SSSD очень шустро и без граблей, с которыми мне ранее приходилось сталкиваться в Winbind, возвращает требуемые объекты каталога AD.
Ограничение доступа через доменные группы безопасности
Теперь нам нужно подумать о том, как ограничить доступ доменных пользователей для входа на наш Linux-сервер, так как в конфигурации по умолчанию все доменные пользователи, успешно прошедшие аутентификацию, смогут войти в нашу Linux-систему. Это подтвердит команда realm list, в которой нам нужно обратить внимание на строчку login-policy
# realm list
ad.holding.com
type: kerberos
realm-name: AD.HOLDING.COM
domain-name: ad.holding.com
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
login-formats: %U@ad.holding.com
login-policy: allow-realm-logins
Разрешим вход только для конкретной доменной группы, например KOM-SRV-Linux-Admins, с помощью команды realm permit:
# realm permit --groups KOM-SRV-Linux-Admins@ad.holding.com
В результате этой команды в конфигурационный файл /etc/sssd/sssd.conf в секции, описывающей подключение к соответствующему домену, будет внесено изменение:
...
[domain/ad.holding.com]
...
access_provider = simple
simple_allow_groups = KOM-SRV-Linux-Admins@ad.holding.com
Проверим то, как изменился вывод realm list:
# realm list
ad.holding.com
...
login-policy: allow-permitted-logins
permitted-logins:
permitted-groups: KOM-SRV-Linux-Admins@ad.holding.com
Как видим, политика login-policy изменилась, и теперь присутствует явное указание разрешённой доменной группы доступа.
***
После настройки ограничения доступа совсем не лишним будет выполнить ряд простых тестов, чтобы убедиться в том, что эти ограничения действительно работают так как мы этого ожидаем. Например, сначала можно проверить возможность входа с доменным пользователем, включённым в группу доступа, затем другим доменным пользователем, но уже не входящим в группу доступа, затем локальным пользователем Linux-сервера и т.д. При проверке доменной аутентификации обратите внимание на то, что первый вход пользователя, ранее не обращавшегося к Linux-серверу может сопровождаться незначительной задержкой, однако все последующие входы будут выполняться молниеносно. Это связано с тем, что sssd имеет собственный механизм кэширования успешно проверенных учётных данных пользователя и способен выполнить аутентификацию даже в случае временной недоступности контроллеров домена.
Доступ к sudo
Для добавления возможности повышения привилегий с помощью команды sudo для доменных пользователей для простоты воспользуемся ранее упомянутой доменной группой безопасности KOM-SRV-Linux-Admins, хотя можно использовать и любую другую доменную группу, например с более узким составом членов.
Создадим файл, в котором будет описано разрешающее правило для sudo:
# touch /etc/sudoers.d/kom-srv-linux-admins
Обратите внимание на комментарии написанные в файле /etc/sudoers.d/README. Имя создаваемого файла не должно заканчиваться знаком «~» и иметь в своём составе точек. В файл добавим всего одну строку вида:
%KOM-SRV-Linux-Admins@ad.holding.com ALL=(ALL) ALL
Установим ограничивающие разрешения на созданный и настроенный файл:
# chmod 0440 /etc/sudoers.d/kom-srv-linux-admins
Проверяем результат. Войдя в систему от имени доменного пользователя, входящего в ранее разрешённую для sudo доменную группу KOM-SRV-Linux-Admins, пробуем выполнить любую команду с повышением привилегий через sudo:
petya@ad.holding.com@KOM-APP31:~$ sudo whoami
[sudo] password for petya@ad.holding.com: {вводим пароль пользователя petya}
root
Как видим, команда выполняется успешно с повышением привилегий.
В некоторых источниках, как например здесь приводится пример того, что для совместной работы sudo и sssd нужно устанавливать пакет libsss-sudo, хотя я такой пакет не устанавливал и sudo при этом работает, отталкиваясь от членства доменной группы безопасности. Поэтому надобность libsss-sudo для меня пока остаётся загадкой.
Удалённый доступ по протоколу SSH
Если говорить про SSH, то никакой специальной настройки sshd я не выполнял, так как по умолчанию ssh-сервер уже настроен на использование PAM, а тот в свою очередь был ранее автоматически настроен на использование доменной аутентификации с помощью утилиты realm.
Однако если вы захотите настроить Single sign-on (SSO) из Putty при подключении c Windows-машины по ранее описанной методике, то здесь без установки пакета kerb5-user, как я понял, опять же не обойтись.
# apt-get install krb5-user
В файле /etc/ssh/sshd_config достаточно раскомментировать и включить параметры GSSAPI:
...
# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes
...
При этом AllowGroups можно не заполнять, так как будет использоваться членство групп описанное ранее в sssd с помощью realm permit. После правки перезапускаем службу ssh-сервера и проверяем работу SSO
# service ssh restart
<
p align=»center»>***
Резюмируя, можно сказать, что с помощью realmd и sssd настройка подключения Linux-машины к домену Active Directory несколько упрощается и становится более наглядной по сравнению с ранее описанным вариантом, а также не влечёт за собой необходимости использования Samba со «всеми вытекающими». Поэтому наверняка стоит задуматься об использовании данных инструментов для последующих «джойнов».
Дополнительные источники информации:
- FedoraHosted.org — sssd Wiki — Configuring_sssd_with_ad_server
- Red Hat Enterprise Linux Blog — SSSD-vs-Winbind
- RHEL7 Documentation — System Level Authentication Guide — 7.3. SSSD and Identity Providers (Domains)
- RHEL7 Documentation — System Level Authentication Guide — 7.2. SSSD and System Services
- Андрей Маркелов — Обзор Red Hat Directory Server и RHEL IdM
- jhrozek Blog — Anatomy of SSSD user lookup
- Alan D Moore Blog — Joining Debian 8 to Active Directory
- Датавед — Настройка SSSD
- Форум проекта Pro-LDAP.ru — Сводка систем аутентификации
- Сергей Яремчук — Подключаемся к Active Directory с помощью realmd
Как мне ввести в домен Ubuntu 20.04 | 18.04 к домену Windows? Могу ли я присоединить Debian 10 к домену Active Directory?
Эта статья была написана, чтобы показать вам, как использовать realmd для присоединения сервера или рабочего стола Ubuntu 20.04 | 18.04 / Debian 10 к домену Active Directory. Домен Active Directory является центральным узлом информации о пользователях в большинстве корпоративных сред.
Например, в инфраструктуре моей компании ключевым требованием является то, чтобы все пользователи прошли аутентификацию во всех системах Linux с учетными данными Active Directory. Это должно работать как для Debian, так и для дистрибутивов Linux на основе Red Hat.
В этом руководстве будет показано, как настроить SSSD для получения информации из доменов в одном лесу ресурсов Active Directory. Если вы работаете с несколькими лесами AD, это руководство может вам не подойти. Мы также пойдем дальше и настроим правила sudo для пользователей, которые входят в систему через AD. Вот схема, изображающая установку и как она работает.
Итак, выполните следующие действия, чтобы присоединиться к домену Ubuntu 20.04 | 18.04 / Debian 10 в Active Directory (AD).
Шаг 1. Обновите свой APT
Начните с обновления вашей системы Ubuntu / Debian Linux.
sudo apt -y update
Это важно, поскольку установка может завершиться ошибкой, если сервер установлен только что.
Для Ubuntu 20.04 | 18.04 добавьте следующие репозитории в файл sources.list
sudo tee -a /etc/apt/sources.list <<EOF
deb http://us.archive.ubuntu.com/ubuntu/ bionic universe
deb http://us.archive.ubuntu.com/ubuntu/ bionic-updates universe
EOF
Шаг 2. Задайте имя хоста сервера и DNS
Установите правильное имя хоста для вашего сервера с правильным доменным компонентом.
sudo hostnamectl set-hostname myubuntu.example.com
Подтвердите свое имя хоста:
$ hostnamectl
Static hostname: myubuntu.example.com
Icon name: computer-vm
Chassis: vm
Machine ID: 5beb7ac3260c4f00bcfbe1088f48b8c7
Boot ID: b2a0d9abe43b455fb49484dbaa59dc41
Virtualization: vmware
Operating System: Ubuntu 18.04.1 LTS
Kernel: Linux 4.15.0-29-generic
Architecture: x86-64
Убедитесь, что DNS настроен правильно:
$ cat /etc/resolv.conf
Ubuntu 20.04 | 18.04 поставляется с systemd-resolve, который вам нужно отключить, чтобы сервер мог напрямую обращаться к вашему сетевому DNS.
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Если вы используете DHCP, вы можете обновить DNS-сервер вручную.
$ sudo unlink /etc/resolv.conf
$ sudo vim /etc/resolv.conf
Шаг 3. Установите необходимые пакеты
Для присоединения системы Ubuntu 20.04 | 18.04 / Debian 10 к домену Active Directory (AD) требуется ряд пакетов.
sudo apt update
sudo apt -y install realmd libnss-sss libpam-sss sssd sssd-tools adcli samba-common-bin oddjob oddjob-mkhomedir packagekit
Только после успешной установки зависимостей вы можете приступить к обнаружению домена Active Directory в Debian 10 / Ubuntu 20.04 / 18.04.
Команда realm discover возвращает полную конфигурацию домена и список пакетов, которые должны быть установлены для регистрации системы в домене.
$ sudo realm discover example.com
example.com
type: kerberos
realm-name: EXAMPLE.COM
domain-name: example.com
configured: no
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
Замените example.com своим действующим доменом AD.
Шаг 5. Присоединитесь к Ubuntu 20.04 | 18.04 / Debian 10 к домену Active Directory (AD)
Учетная запись администратора AD требуется для интеграции вашего компьютера Linux с доменом Windows Active Directory. Проверьте и подтвердите учетную запись администратора AD и пароль.
Команда realm join настроит локальный компьютер для использования с указанным доменом, настроив как локальные системные службы, так и записи в домене идентификации. У команды есть несколько параметров, которые можно проверить с помощью:
$ realm join --help
Базовое выполнение команды:
$ sudo realm join -U Administrator example.com
Password for Administrator:
Где:
Администратор – это имя учетной записи администратора, используемой для интеграции машины в AD.
example.com – это имя домена AD
Команда сначала пытается подключиться без учетных данных, но при необходимости запрашивает пароль.
Просмотр сведений о текущей области.
$ realm list
example.com
type: kerberos
realm-name: EXAMPLE.COM
domain-name: example.com
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: sssd-tools
required-package: sssd
required-package: libnss-sss
required-package: libpam-sss
required-package: adcli
required-package: samba-common-bin
login-formats: %U@example.com
login-policy: allow-realm-logins
В системах на основе RHEL домашний каталог пользователя будет создан автоматически. В Ubuntu / Debian вам необходимо включить эту функцию.
sudo bash -c "cat > /usr/share/pam-configs/mkhomedir" <<EOF
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
EOF
Затем активируйте с помощью:
sudo pam-auth-update
Выберите <OK>
Убедитесь, что выбрано “activate mkhomedir” с помощью звездочки – [*]
Затем выберите <Ok>, чтобы сохранить изменения.
Ваш файл конфигурации sssd.conf находится в /etc/sssd/sssd.conf . При каждом изменении файла требуется перезагрузка.
Статус должен быть запущен.
$ systemctl status sssd
Если интеграция работает, должна быть возможность получить информацию о пользователе AD.
$ id jmutai@example.com
uid=1783929917(jmutai@example.com) gid=1784800513(domain users@example.com) groups=1783870513(domain users@example.com)
Шаг 6. Контроль доступа – Ограничьте до пользователя / группы
Доступ к зарегистрированному серверу можно ограничить, разрешив только определенных пользователей и группы.
Ограничение для пользователей
Чтобы разрешить пользователю доступ через SSH и консоль, используйте команду:
$ sudo realm permit user1@example.com
$ sudo realm permit user2@example.com user3@example.com
Разрешить доступ к группе – Примеры
$ sudo ream permit -g sysadmins
$ sudo realm permit -g 'Security Users'
$ sudo realm permit 'Domain Users' 'admin users'
Это изменит файл sssd.conf .
Если вместо этого вы хотите разрешить доступ всем пользователям, запустите:
$ sudo realm permit --all
Чтобы запретить доступ всем пользователям домена, используйте:
$ sudo realm deny --all
Шаг 7. Настройте доступ через Sudo
По умолчанию у пользователей домена не будет разрешения на повышение привилегий до root. Пользователям должен быть предоставлен доступ на основе имен пользователей или групп.
Давайте сначала создадим файл разрешений sudo.
$ sudo vi /etc/sudoers.d/domain_admins
Добавить одного пользователя:
user1@example.com ALL=(ALL) ALL
Добавить еще одного пользователя:
user1@example.com ALL=(ALL) ALL
user2@example.com ALL=(ALL) ALL
Добавить группу
%group1@example.com ALL=(ALL) ALL
Добавьте группу с пробелами.
%security users@example.com ALL=(ALL) ALL
%system super admins@example.com ALL=(ALL) ALL
Шаг 8. Проверьте доступ по SSH
Получите доступ к серверу удаленно, поскольку пользователю AD разрешено входить в систему.
$ ssh user1@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:wmWcLi/lijm4zWbQ/Uf6uLMYzM7g1AnBwxzooqpB5CU.
ECDSA key fingerprint is MD5:10:0c:cb:22:fd:28:34:c6:3e:d7:68:15:02:f9:b4:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Это подтверждение того, что наша конфигурация прошла успешно.
Посетите вики-страницы realmd и sssd, чтобы узнать больше.
Оригинал статьи на английском здесь.
Для упрощения добавления Ubuntu или Debian в домен Active Directory вместо связки samba+winbind можно использовать пакет realmd (Realm Discovery), который позволяет автоматически настроить службу SSSD (System Security Services Daemon) в Linux. Эта статья применима для Ubuntu 20.04/22.04 и Debian 10/11.
Прежде всего обновите пакеты на вашем хосте Linux:
$ sudo apt -y update
Выведите текущее имя хоста:
$ hostnamectl
Если нужно, измените имя хоста:
$ sudo hostnamectl set-hostname ubnt22.vmblog.ru
Проверьте, что в Linux корректно настроен клиент DNS и он указывает на ваши контроллеры домена AD:
# cat /etc/resolv.conf
nameserver 192.168.42.10 nameserver 192.168.142.10 search vmblog.ru
Т.к. пакет SSSD используется Kerberos для аутентификации, убедиться, что у вас корректно настроен NTP клиент и настроена синхронизация времени с контроллерами домена AD. Можно настроить так:
$ sudo systemctl status systemd-timesyncd
$ sudo nano /etc/systemd/timesyncd.conf
NTP=192.168.42.10
$ sudo systemctl restart systemd-timesyncd
Установите необходимые пакеты:
$ apt -y install realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common-bin oddjob oddjob-mkhomedir packagekit
Проверьте, что ваш хост может обнаружить домен AD:
$ realm discover vmblog.ru --verbose
vmblog.ru type: kerberos realm-name: VMBLOG.RU domain-name: vmblog.ru configured: no server-software: active-directory client-software: sssd required-package: sssd-tools required-package: sssd required-package: libnss-sss required-package: libpam-sss required-package: adcli required-package: samba-common-bin
Вы можете задать атрибуты вашего хоста Linux, которые нужно сохранить в учетной записи компьютера в Active Directory (атрибуты operatingSystem и operatingSystemVersion):
$ nano /etc/realmd.conf
[active-directory] os-name = Ubuntu GNU/Linux os-version = 22.04 (Jammy Jellyfish)
Для добавления Linux хоста в домен Active Directory вам понадобится учетная запись AD с правами администратора домена (или пользователь, которому делегированы права на добавление компьютеров в домен).
В самом простом случае для добавления хоста Ubuntu/Debian в домен достаточно выполнить команду:
$ sudo realm join -U apetrov vmblog.ru
Введите пароль доменного пользователя.
По умолчанию для вашего хоста Linux будет создана учетная запись компьютера AD в корневом OU (Organizational Unit) с именем Computers. Вы можете сразу поместить вам хост в нужную OU. Для этого используйте другую команду добавления в домен:
$ sudo realm join --verbose --user=apetrov --computer-ou="OU=Linux Servers,OU=HQ,DC=vmblog,DC=ru" vmblog.ru
Проверьте, что ваш хост теперь находится в домене AD:
$ sudo realm list
type: kerberos realm-name: VMBLOG.RU domain-name: vmblog.ru configured: kerberos-member server-software: active-directory client-software: sssd required-package: sssd-tools required-package: sssd required-package: libnss-sss required-package: libpam-sss required-package: adcli required-package: samba-common-bin login-formats: %U@vmblog.ru login-policy: allow-realm-logins
Чтобы автоматически создавать домашний каталог пользователям, выполните:
sudo bash -c "cat > /usr/share/pam-configs/mkhomedir" <<EOF
Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
EOF
$ sudo pam-auth-update
Выберите пункт activate mkhomedir.
Проверьте конфигурацию sssd в файле:
$ cat /etc/sssd/sssd.conf
Чтобы применить изменения из файла sssd.conf, нужно перезапустить службу:
$ systemctl status sssd
Теперь вы может выполнить аутентификацию в Linux с помощью учетной записи Active Directory (указывается в формате UPN: user@vmblog.ru).
Проверьте, что вы можете получить информацию о пользователе AD:
$ id apetrov@vmblog.ru
Можно переключиться на пользователя:
su - apetrov@vmblog.ru
Creating directory '/home/apetrov@vmblog.ru'. apetrov@vmblog.ru@ubnt22:~$
Чтобы разрешить доменным пользователям вход на хост Linux (консоль+SSH), выполните:
$ realm permit apetrov1@vmblog.ru ivanov2@vmblog.ru
Или разрешить доступ для пользователей доменных групп безопасности:
$ ream permit -g LinuxAdmins@vmblog.ru
Чтобы разрешить, запретить доступ всем пользователям домена:
$ sudo realm permit --all
$ sudo realm deny --all
Вы можете разрешить определенным пользователям и группам повышать привилегии с помощью sudo. Создайте файл:
$ sudo nano /etc/sudoers.d/linux-admins
Добавьте в него пользователей и/или группы, которым разрешено sudo:
%LinuxAdminx@vmblog.ru ALL=(ALL) ALL aivanov@vmblog.ru ALL=(ALL) ALL
Измените права на файл:
$ chmod 0440 /etc/sudoers.d/linux-admins
Теперь попробуйте аутентифицироваться на вашем Linux хосте с доменной учетной записью.
Процесс добавления rpm-based дистрибутивов (CentOS/Rocky Linux/RHEL/Fedora) в домен Active Directory немного отличается и описан в отдельной статье.
Состояние перевода: На этой странице представлен перевод статьи Active Directory integration. Дата последней синхронизации: 31 октября 2015. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Важно: Так как Arch Linux использует систему распространения rolling release,возможно,некоторая информация на странице может быть устаревшей из-за изменений в пакетах или конфигурациях,сделанных разработчиками. Никогда слепо не следуйте этой или любой другой инструкции. Когда в инструкции сказано изменить какой-либо файл, обязательно сделайте бэкап. Проверяйте дату последней проверки статьи.
Основной задачей системных администраторов являются попытки совместного изпользования разнообразных окружений. Мы имеем в виду смешивание разных серверных операционных систем (Обычно Microsoft Windows & Unix/Linux). Управление пользователями и аутентификацией на данный момент является наиболее сложной задачей. Популярнейший способ решения это задачи — Directory Server. Существует много открытых и коммерческих решений для разный типов *NIX; однако, только немногие решают проблему взаимодействия с Windows. Активный Каталог (AD) — служба каталогов созданная Microsoft для доменных сетей Windows. Он входит в большинство операционных систем Windows Server. Сервера,на которых запущен AD, называются контроллерами доменов(domain controllers)
Активный каталог используется как главное средство администрирования сети и безопасности.Он отвечает за аутентификацию и авторизацию все пользователей и компьютеров в доменной сети Windows, назначая и следя за правилами безопасности для всех компьютеров в сети, также устанавливая и обновляя ПО на компьютерах в этой сети. Например,когда пользователь авторизуется в компьютер,который является частью доменной сети, AD проверяет его пароль и яляется он обычным пользователем или же системным администратором.
Активный католог использует Lightweight Directory Access Protocol (LDAP) версий 2 и 3, Kerberos и DNS.
Эти же стандарты доступны в Linux, но их комбинирование — непростая задача. Эта статья поможет вам настроить хост Arch Linux для аутентификация в домене AD.
Эта статья объясняет, как интегрировать хост Arch Linux в сущестующий домен AD.
Перед продолжением у вас должен быть существующий домен AD, и пользователь с правами на добавление пользователей и компьютерных аккаунтов.
Эта сатья не предназначена ни как полное описание AD,ни как полно описание работы с Samba. Обратитесь к разделу ресурсов для дополнительной информации.
Терминология
Если вы не знакомы с AD, здесь приведены некоторые ключевые слова, которые будет полезно знать.
- Домен(Domain) : Имя,используемое для группы компьютеров и аккаунтов.
- SID : Каждый компьютер,присоединяющийся к сети должен иметь уникальный SID / Системный идентификатор.
- SMB : Блок сообщения сервера.
- NETBIOS: Network naming protocol used as an alternative to DNS. Mostly legacy, but still used in Windows Networking.
- WINS: Windows Information Naming Service. Used for resolving Netbios names to windows hosts.
- Winbind: Protocol for windows authentication. Протокол для авторизации windows.
Настройка
Настройка AD
Важно: Эта часть не была проверена, продолжайте с отсторожностью.
Обновление GPO
Возможно, нужно будет отключить Digital Sign Communication (Always) в настройках групп AD. А именно:
Local policies
->Security policies
->Microsoft Network Server
->Digital sign communication (Always)
-> выбратьdefine this policy
и поставить «галочку» наdisable
.
Если вы используете Windows Server 2008 R2, то вам нужно настроить GPO в GPO for Default Domain Controller Policy -> Computer Setting -> Policies -> Windows Setting -> Security Setting -> Local Policies -> Security Option -> Microsoft network client: Digitally sign communications (always)
Настройка Linux хоста
Следующие несколько шагов — начало конфигурации хоста. Вам понадобиться root или sudo доступ.
Установка
Установите следующие пакеты:
- samba, см. Samba
- pam-krb5
- ntp или openntpd, см. также NTPd или OpenNTPD
Обновление DNS
AD сильно зависит от DNS. Вам нужно будет обновить /etc/resolv.conf
, чтобы использовать контроллеры доменов AD:
/etc/resolv.conf
nameserver <IP1> nameserver <IP2>
Замените <IP1> и <IP2> IP адресами для сервера AD.Есили ваши AD домены не позволяют использовать DNS форвардинг или рекурсию,возможно,придётся добавить некоторые вещи.
Если ваша машина имеет дуалбут Windows и Linux, стоит использовать разные имена DNS и netbios для linux,если обе операционные системы будут членами одного домена.
Настройка NTP
См. NTPd или OpenNTPD для инструкции по настройке NTP. Стоит отметить, что OpenNTPD больше не поддерживается.
При настройке используйте IP адреса серверов AD.Как альтернативу можно использовать другие NTP сервера,которые обеспечат синхронизацию AD в то же место.Тем не менее,AD обычно запускают NTP в качестве службы.
Убедитесь,что демон настроен на sync automatically on startup.
Kerberos
Допустим,что ваша AD называется example.com. Далее допустим что ваша AD управляется двумя доменными контроллерами, главным и вторичным, которые называются PDC и BDS, pdc.example.com и bdc.example.com соответственно. Их адреса будут,например, 192.168.1.2 и 192.168.1.3. Следите за написанием,верхний регистр очень важен.
/etc/krb5.conf
[libdefaults] default_realm = EXAMPLE.COM clockskew = 300 ticket_lifetime = 1d forwardable = true proxiable = true dns_lookup_realm = true dns_lookup_kdc = true [realms] EXAMPLE.COM = { kdc = PDC.EXAMPLE.COM admin_server = PDC.EXAMPLE.COM default_domain = EXAMPLE.COM } [domain_realm] .kerberos.server = EXAMPLE.COM .example.com = EXAMPLE.COM example.com = EXAMPLE.COM example = EXAMPLE.COM [appdefaults] pam = { ticket_lifetime = 1d renew_lifetime = 1d forwardable = true proxiable = false retain_after_close = false minimum_uid = 0 debug = false } [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/kdc.log admin_server = FILE:/var/log/kadmind.log
Примечание: Heimdal 1.3.1 не принимает DES шифрование,которое необходимо для аутентификации AD до Windows Server 2008. Скорее всего вам придётся добавить
allow_weak_crypto = true
в раздел [libdefaults]
Создание ключа Kerberos
Теперь во можете запросить ключи для AD (верхний регистр необходим):
kinit administrator@EXAMPLE.COM
Можно использовать любое имя пользователя,у которого есть права администратора домена.
Подтверждение ключа
Запустите klist чтобы проверить,получили ли вы токен,должно быть нечто подобное:
# klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@EXAMPLE.COM Valid starting Expires Service principal 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 02/05/12 21:27:47
pam_winbind.conf
Если вы получаете ошибки «/etc/security/pam_winbind.conf не найден»,создайте этот файл и отредактируйте его следующим образом:
/etc/security/pam_winbind.conf
debug=no debug_state=no try_first_pass=yes krb5_auth=yes krb5_cache_type=FILE cached_login=yes silent=no mkhomedir=yes
Samba
Samba — бесплатная реализация протокола SMB/CIFS. Также она включает инструменты для Linux машин,которые заставляют их вести себя будто Windows сервера и клиенты.
Примечание: Настройка может разниться в зависимости от конфигурации сервера Windows. Будьте готовы изучать и решать проблемы.
В этом разделе мы сначала сфокусируемся на работе аутентификации с помощью изменения секции ‘Global’. Далее, мы вернёмся к остальным.
/etc/samba/smb.conf
[Global] netbios name = MYARCHLINUX workgroup = EXAMPLE realm = EXAMPLE.COM server string = %h Arch Linux Host security = ads encrypt passwords = yes password server = pdc.example.com idmap config * : backend = rid idmap config * : range = 10000-20000 winbind use default domain = Yes winbind enum users = Yes winbind enum groups = Yes winbind nested groups = Yes winbind separator = + winbind refresh tickets = yes template shell = /bin/bash template homedir = /home/%D/%U preferred master = no dns proxy = no wins server = pdc.example.com wins proxy = no inherit acls = Yes map acl inherit = Yes acl group control = yes load printers = no debug level = 3 use sendfile = no
Теперь надо «объяснить» Samba, что мы будет использовать базы даннх PDC для аутенификации.Будем использовать winbindd, который входит в поставку Samba.Winbind указывает UID и GID Linux машины для AD. Winbind использует UNIX реализацию RPC вызовов, Pluggable Authentication Modules (aka PAM) и Name Service Switch (NSS), чтобы разрешить допуск пользователей и Windows AD на Linux-машинах. Лучшая часть winbindd то,что вам не нужно размечать самому, от вас требуется только указать диапазон UID и GID! Именно их мы объявили в smb.conf.
Обновите файл настроек samba чтобы включить демона winbind
/etc/conf.d/samba
##### /etc/conf.d/samba ##### #SAMBA_DAEMONS=(smbd nmbd) SAMBA_DAEMONS=(smbd nmbd winbindd)
Далее, настройте samba
так, для запуска вместе со стартом системы. См. Daemons для подробностей.
Запуск и проверка сервисов
Запуск Samba
Надеемся,вы ещё не перезагрузились! Хорошо. Если у вас запущена X-сессия — выходите из неё,чтобы проверить вход в другой терминал не выходя из своей сессии.
Запуск Samba (включая smbd, nmbd и winbindd):
Если вы проверите список процессов,то заметите,что на самом деле winbind не запустился. Быстрый осмотр логов говорит,что SID для этого хоста может быть получен от домена:
# tail /var/log/samba/log.winbindd
[2012/02/05 21:51:30.085574, 0] winbindd/winbindd_cache.c:3147(initialize_winbindd_cache) initialize_winbindd_cache: clearing cache and re-creating with version number 2 [2012/02/05 21:51:30.086137, 2] winbindd/winbindd_util.c:233(add_trusted_domain) Added domain BUILTIN S-1-5-32 [2012/02/05 21:51:30.086223, 2] winbindd/winbindd_util.c:233(add_trusted_domain) Added domain MYARCHLINUX S-1-5-21-3777857242-3272519233-2385508432 [2012/02/05 21:51:30.086254, 0] winbindd/winbindd_util.c:635(init_domain_list) Could not fetch our SID - did we join? [2012/02/05 21:51:30.086408, 0] winbindd/winbindd.c:1105(winbindd_register_handlers) unable to initialize domain list
Присоединение к Домену
Вам нужен аккаунт администратора AD чтобы сделать это. Пусть наш логин: Administrator. Комана — ‘net ads join’
# net ads join -U Administrator
Administrator's password: xxx Using short domain name -- EXAMPLE Joined 'MYARCHLINUX' to realm 'EXAMPLE.COM'
Перезапуск Samba
winbindd не смог запуститься потому,что пока что мы не домен.
Перезапустите сервис Samba и winbind тоже должен запуститься.
NSSwitch говорит Linux хосту как получить игформацию из различных источников и к каком порядке это сделать. В нашем случае мы добаим AD как дополнительный источник для пользователей, групп и хостов.
/etc/nsswitch.conf
passwd: files winbind shadow: files winbind group: files winbind hosts: files dns wins
Проверка Winbind
Проверим, может ли winbind получить доступ к AD. Следующие команды возвращают список пользователей AD:
# wbinfo -u
administrator guest krbtgt test.user
- Note мы создали пользователя AD ‘test.user’ в домменом контоллере.
Можно сделать то же самое для групп AD:
# wbinfo -g
domain computers domain controllers schema admins enterprise admins cert publishers domain admins domain users domain guests group policy creator owners ras and ias servers allowed rodc password replication group denied rodc password replication group read-only domain controllers enterprise read-only domain controllers dnsadmins dnsupdateproxy
Проверка nsswitch
Дабы убедиться,что наш хост имеет доступ к домену для пользователей и групп, мы проверим настройки nsswitch, используя ‘getent’. Следующий вывод показывает,как оно дожно выглядеть на нетронутом Arch Linux:
# getent passwd
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false mail:x:8:12:mail:/var/spool/mail:/bin/false ftp:x:14:11:ftp:/srv/ftp:/bin/false http:x:33:33:http:/srv/http:/bin/false nobody:x:99:99:nobody:/:/bin/false dbus:x:81:81:System message bus:/:/bin/false ntp:x:87:87:Network Time Protocol:/var/empty:/bin/false avahi:x:84:84:avahi:/:/bin/false administrator:*:10001:10006:Administrator:/home/EXAMPLE/administrator:/bin/bash guest:*:10002:10007:Guest:/home/EXAMPLE/guest:/bin/bash krbtgt:*:10003:10006:krbtgt:/home/EXAMPLE/krbtgt:/bin/bash test.user:*:10000:10006:Test User:/home/EXAMPLE/test.user:/bin/bash
Для групп:
# getent group
root:x:0:root bin:x:1:root,bin,daemon daemon:x:2:root,bin,daemon sys:x:3:root,bin adm:x:4:root,daemon tty:x:5: disk:x:6:root lp:x:7:daemon mem:x:8: kmem:x:9: wheel:x:10:root ftp:x:11: mail:x:12: uucp:x:14: log:x:19:root utmp:x:20: locate:x:21: rfkill:x:24: smmsp:x:25: http:x:33: games:x:50: network:x:90: video:x:91: audio:x:92: optical:x:93: floppy:x:94: storage:x:95: scanner:x:96: power:x:98: nobody:x:99: users:x:100: dbus:x:81: ntp:x:87: avahi:x:84: domain computers:x:10008: domain controllers:x:10009: schema admins:x:10010:administrator enterprise admins:x:10011:administrator cert publishers:x:10012: domain admins:x:10013:test.user,administrator domain users:x:10006: domain guests:x:10007: group policy creator owners:x:10014:administrator ras and ias servers:x:10015: allowed rodc password replication group:x:10016: denied rodc password replication group:x:10017:krbtgt read-only domain controllers:x:10018: enterprise read-only domain controllers:x:10019: dnsadmins:x:10020: dnsupdateproxy:x:10021:
Проверка команд Samba
Попробуйте некоторые команды,чтобу увидеть,может ли Samba взаимодействовать с AD:
# net ads info
[2012/02/05 20:21:36.473559, 0] param/loadparm.c:7599(lp_do_parameter) Ignoring unknown parameter "idmapd backend" LDAP server: 192.168.1.2 LDAP server name: PDC.example.com Realm: EXAMPLE.COM Bind Path: dc=EXAMPLE,dc=COM LDAP port: 389 Server time: Sun, 05 Feb 2012 20:21:33 CST KDC server: 192.168.1.2 Server time offset: -3
# net ads lookup
[2012/02/05 20:22:39.298823, 0] param/loadparm.c:7599(lp_do_parameter) Ignoring unknown parameter "idmapd backend" Information for Domain Controller: 192.168.1.2 Response Type: LOGON_SAM_LOGON_RESPONSE_EX GUID: 2a098512-4c9f-4fe4-ac22-8f9231fabbad Flags: Is a PDC: yes Is a GC of the forest: yes Is an LDAP server: yes Supports DS: yes Is running a KDC: yes Is running time services: yes Is the closest DC: yes Is writable: yes Has a hardware clock: yes Is a non-domain NC serviced by LDAP server: no Is NT6 DC that has some secrets: no Is NT6 DC that has all secrets: yes Forest: example.com Domain: example.com Domain Controller: PDC.example.com Pre-Win2k Domain: EXAMPLE Pre-Win2k Hostname: PDC Server Site Name : Office Client Site Name : Office NT Version: 5 LMNT Token: ffff LM20 Token: ffff
# net ads status -U administrator | less
objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user objectClass: computer cn: myarchlinux distinguishedName: CN=myarchlinux,CN=Computers,DC=leafscale,DC=inc instanceType: 4 whenCreated: 20120206043413.0Z whenChanged: 20120206043414.0Z uSNCreated: 16556 uSNChanged: 16563 name: myarchlinux objectGUID: 2c24029c-8422-42b2-83b3-a255b9cb41b3 userAccountControl: 69632 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 0 lastLogoff: 0 lastLogon: 129729780312632000 localPolicyFlags: 0 pwdLastSet: 129729764538848000 primaryGroupID: 515 objectSid: S-1-5-21-719106045-3766251393-3909931865-1105 ...<snip>...
Настройка PAM
Теперь мы будем менять разные правила в PAM, чтобы допустить пользователей AD к использованию системы для входа и к sudo доступу. Когда вы меняете правила, запоминание их порядка и помечены ли они как required или как sufficient критически важно,если вы хотите,чтобы всё работало,как вы задумали.Вам не стоит отклоняться от этих правил,если только вы не знаете как писать правила для PAM
В случае со входом,PAM следует сначала запросить аккаунт AD и проверять локальные аккаунты только если аккаунту AD не соответствует локальный аккаунт.Поэтому, мы добавим записи,которые включат pam_winbindd.so
в процесс аутентификации.
Главный процесс аутентификации в конфигурации PAM Arch Linux находится в /etc/pam.d/system-auth
. Начав со стандартной конфигурации из pambase
, измените её следующим образом:
system-auth
Раздел «auth»
Найдите строку:
auth required pam_unix.so ...
Удалите её, и замените следующим:
auth [success=1 default=ignore] pam_localuser.so auth [success=2 default=die] pam_winbind.so auth [success=1 default=die] pam_unix.so nullok auth requisite pam_deny.so
Раздел «account»
Найдите строку:
account required pam_unix.so
Под ней допишите следующее:
account [success=1 default=ignore] pam_localuser.so account required pam_winbind.so
Раздел «session»
Найдите строку:
session required pam_unix.so
Под ней допишите следующее:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel session [success=1 default=ignore] pam_localuser.so session required pam_winbind.so
Раздел «password»
Найдите строку:
password required pam_unix.so ...
Удалите её и замените следующими:
password [success=1 default=ignore] pam_localuser.so password [success=2 default=die] pam_winbind.so password [success=1 default=die] pam_unix.so sha512 shadow password requisite pam_deny.so
Проверка входа
Теперь запустите новую сессию/войдите через ssh и попробуйте войти,использую данные аккаунта AD. Имя домена опционально, так как это было задано в настройках Winbind как ‘default realm’. Заметьте,что в случае с ssh, вам нужно изменить /etc/ssh/sshd_config
, чтобы он разрешал аутентификацию через kerberos: (KerberosAuthentication yes)
.
test.user EXAMPLE+test.user
Оба должны работать. Стоит подметить,что /home/example/test.user
будет создан автоматически.
Войдите в другую сессию использую аккаунт Linux. Удостоверьтесь,что всё ещё можете войти как root — запомните,что вы должны быть под аккаунтом root как минимум в одной сессии!
Настройка общих файлов
Ранее мы пропустили настройку общих файлов. Теперь,когда всё работает, вернитесь к /etc/smb.conf
и добавьте эксопрт для хостов,которые вы желаете сделать доступными в Windows
/etc/smb.conf
[MyShare] comment = Example Share path = /srv/exports/myshare read only = no browseable = yes valid users = @NETWORK+"Domain Admins" NETWORK+test.user
В примере выше, ключевое слово NETWORK. Не путайте его с именем домена. Для добавления групп,добавьте символ ‘@’ к группе. Заметьте, Domain Admins
заключается в «цитаты», чтобы Samba корректно считывала их,когда просматривает файл конфигурации.
Добавление файла keytab и включение беспарольного входа на машину через Kerber и ssh
Это объясняет,как сгенерировать keytab файл,который вам нужен,например,чтобы включить беспарольный вход на машину через Kerber и ssh с другой машины в том же домене. Допустим, что у вас много компьютеров в домене и вы только что добавили сервер/рабочую станцию использую описание выше в ваш домен, в котором пользователям нужен ssh для работы — например рабочаю станция GPU или вычислительный узел OpenMP и т.д. В этом случае вам, наверное, не захочется вводить пароль каждый раз при входе. С другой стороны аутентификация с помощью ключа используется множеством пользователей, в этом случае нужных полномочий для,например,монтирования общего NFSv4 с Kerberos. Так что это поможет включить беспарольные входы на машины используя «kerberos ticket forwarding».
Создание key tab файла
Запустите ‘net ads keytab create -U administrator’ как суперпользователь дабы создать keytab файл в ‘/etc/krb5.keytab’. Она напишет ваи,что необходимо включить аутентификацию с помощью keytab в файле конфигурации, чтобы мы могли совершить следующий шаг. Иногда возникают проблемы, если файл krb5.keytab уже существует,в таком случае нужно переименовать его и запустить команду ещё раз, это должно помочь.
# net ads keytab create -U administrator
Проверьте содержание файла следующим образом:
# klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/myarchlinux.example.com@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 host/MYARCHLINUX@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM 4 MYARCHLINUX$@EXAMPLE.COM
Включение входа через keytab
Теперь вам нужно указать winbind,что он должен использовать keytab файлы,добавив следующий строки в /etc/samba/smb.conf:
/etc/samba/smb.conf
kerberos method = system keytab dedicated keytab file = /etc/krb5.keytab
В итоге всё должно выглядеть примерно так:
/etc/samba/smb.conf
[Global] netbios name = MYARCHLINUX workgroup = EXAMPLE realm = EXAMPLE.COM server string = %h Arch Linux Host security = ads encrypt passwords = yes password server = pdc.example.com kerberos method = system keytab dedicated keytab file = /etc/krb5.keytab idmap config * : backend = tdb idmap config * : range = 10000-20000 winbind use default domain = Yes winbind enum users = Yes winbind enum groups = Yes winbind nested groups = Yes winbind separator = + winbind refresh tickets = yes template shell = /bin/bash template homedir = /home/%D/%U preferred master = no dns proxy = no wins server = pdc.example.com wins proxy = no inherit acls = Yes map acl inherit = Yes acl group control = yes load printers = no debug level = 3 use sendfile = no
Перезапустите winbind.service с помощью ‘systemctl restart winbind.service’ с привелегиями суперпользователя.
# systemctl restart winbind.service
Проверьте,всё ли работает,получив тикет для вашей системы и запустив
# kinit MYARCHLINUX$ -kt /etc/krb5.keytab
Эта команда не должна написать ничего в консоль,ондако ‘klist’ должен показать что-то вроде этого:
# klist
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: MYARCHLINUX$@EXAMPLE.COM Valid starting Expires Service principal 02/04/12 21:27:47 02/05/12 07:27:42 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 02/05/12 21:27:47
Некоторые частые ошибки : a)забывают поставить $ или b) игнорируют чувствительный регистр — он должен быть точно таким же,как записьв keytab
Подготовка sshd на сервере
Всё,что нам нужно сделать — это добавить некоторые опции в sshd_config и перезапустить sshd.service.
Измените ‘/etc/ssh/sshd_config’ чтобы он выглядел так в нужных местах:
# /etc/ssh/sshd_config
... # Изсенить на no чтобы выключить s/key пароли ChallengeResponseAuthentication no # Опции Kerberos KerberosAuthentication yes #KerberosOrLocalPasswd yes KerberosTicketCleanup yes KerberosGetAFSToken yes # Опции GSSAPI GSSAPIAuthentication yes GSSAPICleanupCredentials yes ...
Перезапустите sshd.service:
# systemctl restart sshd.service
Добавление опций, нужных для клиента
Для начала нам нужно убедиться в том, что тикеты доступны для клиента. Обычно всё работает, но, на всякий случай, используйте следующий параметр:
forwardable = true
Далее надо добавить опции:
GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
в наш файл .ssh/config
, который говорит ssh использовать эту опцию, как альтернативу: можно использовать ‘ssh -o’ (смотрите страницу справочного руководства ssh(1)).
Проверка установки
Клиент:
Убедитесь,что у вас правильный тикет, используя ‘kinit’. Затем подключитесь к своем машине через ssh
ssh myarchlinux.example.com
Вы должны подключится без просьбы ввести пароль
Если у вас также включна аутентификация ключем,нужно выполнить
ssh -v myarchlinux.example.com
чтобы увидеть,какой метод аутентификации используется на самом деле.
Для дебага вы можете включить DEBUG3 на сервере и посмотреть лог через ‘journalctl’
Настройка для полной аутентификации Kerberos без пароля.
Если ваши клиенты не используют доменные аккаунты на их локальных машинах (по какой бы то не было причине),довольно сложно будет научить их использовать ‘kinit’ перед тем,как ssh подключится к рабочей станции.Так что есть классный способ это решить:
Генерирование keytab, которые будет принимать AD
Пользователь должен выполнить:
ktutil addent -password -p username@EXAMPLE.COM -k 1 -e RC4-HMAC - enter password for username - wkt username.keytab q
Теперь провертьте файл:
kinit -kt username.keytab
Оно не должно спросить пароль, теперь просто скопируйте это в ‘~/.bashrc’, это позволит не вводит пароль каждый раз.
Интересно знать
Файл ‘username.keytab’ не спецефичен для машины,и,следовательно,может быть скопирован на другие машины. Например,мы создали файл на Linux машине и скопировали на Mac клиента так как команды в неё другие…
Смотрите также
- Wikipedia: Active Directory
- Wikipedia: Samba
- Wikipedia: Kerberos
- Samba: Documentation
- Samba Wiki: Samba & Active Directory[устаревшая ссылка 2020-08-02 ⓘ]
- Samba Man Page: smb.conf
Коммерческие решения
- Centrify
- Likewise
Введение
Зачастую возникает необходимость ввести 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
Не обязательно, но если вы что-то поменяете — перезагрузите компьютер для применения изменений.
Настройка синхронизации времени
Настройка авторизации через 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 [email protected]
Вместо username естественно стоит вписать имя существующего пользователя домена.
Имя домена необходимо писать заглавными буквами!
Если вы не получили никаких ошибок — значит вы настроили всё верно и домен отдаёт вам билет Kerberos. Кстати, некоторые распространённые ошибки перечислены чуть ниже.
Убедиться в том, что билет получен, можно выполнив команду
klist
Удалить все билеты (они вам вообще говоря не нужны) можно командой
kdestroy
Итак, будем считать, что авторизацию вы настроили, пора настроить непосредственно вход в домен, об этом после списка распространённых ошибок kinit
.
Распространённые ошибки kinit
Настройка Samba и вход в домен
Используемые параметры команды 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 - DOMAINusername. # Возможно именно это вам и нужно, однако обычно проще этот параметр включить. 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 запрашивает у 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 — он тоже работает):
Последовательность строк в файлах имеет значение!
/etc/pam.d/common-auth
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
/etc/pam.d/common-account
account sufficient pam_winbind.so account required pam_unix.so
/etc/pam.d/common-session
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
/etc/pam.d/common-password
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» (без кавычек).
Готово, все настройки завершены. Перезагружайтесь и пытайтесь войти с учетной записью пользователя домена.
Офф-лайн авторизация
Часто возникает ситуация, когда домен-контроллер недоступен по различным причинам — профилактика, отключение света или вы принесли ноутбук домой и хотите поработать. В этом случае для 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
Взято с сайта — http://help.ubuntu.ru/wiki/%D0%B2%D0%B2%D0%BE%D0%B4_%D0%B2_%D0%B4%D0%BE%…
Что бы ограничить вход пользователей домена на машинку нужно довбавить в
/etc/pam.d/login
account required pam_access.so
и в /etc/security/access.conf
— : group : ALL