Предположим у нас есть уже существующая среда Windows с Аctive Directory и в этой середе находятся несколько компьютеров с Ubuntu. Нужно что бы пользователи Windows могли без труда войти на компьютер с Ubuntu используя свой логин и пароль, и без проблем получить доступ к ресурсам сети.

Самый простой способ интеграции Ubuntu в сеть Active Directory – использовать Likewise-open, но увы он не всегда корректно работает и пока не понимаешь досконально как он функционирует решать возникающие проблемы очень трудно. Другой способ о котором пойдет речь в статье – настройка через samba и winbind.

Операционная система Ubuntu-Desktop 10.4 LTS, DNS: Linux-04.mydomain.local, IP: 192.168.3.104, домен MYDOMAIN.LOCAL, контроллер домена srv-dc.mydomain.local.

1. Настройка NTP

Многие не уделяют настройке синхронизации времени должного внимания, но по своему опыту скажу что лучше один раз настроить и забыть, а не вспоминать об этом раз в полгода.

root@Linux-04:~# apt-get install ntp

Открываем для редактирования файл /etc/ntp.conf, коментируем все имеющиеся теги server и добавляем свой сервер времени:

# You do need to talk to an NTP server or two (or three).
#server ntp.ubuntu.com
server srv-dc.mydomain.local

Перезапускаем сервис ntp для применения новых параметров.

root@Linux-04:~# service ntp restart

2. Настройка Kerberos

Удаляем avahi-daemon – службу обнаружения сетевых сервисов через mDNS/DNS-SD, в корпоративной среде пользы от нее не много, кроме того она мешает разрешать DNS имена заканчивающиеся local.

root@Linux-04:~# apt-get remove avahi-daemon

Устанавливаем необходимые пакеты

root@Linux-04:~# apt-get install krb5-user winbind samba

Во время установки kerberos 5 попросит задать область по умолчанию (имя домена) MYDOMAIN.LOCAL, обязательно в верхнем регистре.
Приводим /etc/krb5.conf к следующему виду:

[libdefaults]
    default_realm = MYDOMAIN.LOCAL             # Realm используемый по умолчанию
                                               # имя нашего домена, в верхнем
                                               # регистре
[realms]
    MYDOMAIN.LOCAL = {
        kdc = srv-dc.mydomain.local            # Список контроллеров домена для
                                               # нашего realm
        admin_server = srv-dc.mydomain.local   # Контроллер домена на котором
                                               # выполняются все модификации -
                                               # для win2k3 не принципиально.
        default_domain = MYDOMAIN.LOCAL        # Имя домена по умолчанию
    }
 
[domain_realm]                                 # Настройка отображения DNS-области
    .mydomain.local = MYDOMAIN.LOCAL           # в область Kerberos, при написании
    mydomain.local = MYDOMAIN.LOCAL            # нужно соблюдать регистр

Получаем тикет:

root@Linux-04:~# kinit admin
Password for admin@MYDOMAIN.LOCAL:

Проверяем:

root@Linux-04:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@MYDOMAIN.LOCAL
 
Valid starting     Expires            Service principal
05/01/11 17:46:23  05/02/11 03:46:20  krbtgt/MYDOMAIN.LOCAL@MYDOMAIN.LOCAL
renew until 05/02/11 17:46:23

3. Настройка SAMBA

Редактируем файл /etc/samba/smb.conf

[global]
    workgroup = MYDOMAIN                      # Имя рабочей группы
    realm = MYDOMAIN.LOCAL                    # Имя домена
    security = ADS                            # ADS - режим работы samba-сервера
                                              # как члена домена
    password server = srv-dc.mydomain.local   # список контроллеров домена
 
    local master = No                 # Не использовать samba как локальный
                                      # мастер-браузер для подсети.
    domain master = No                # Не использовать samba как мастер-
                                      # браузер для домена
    dns proxy = Yes                   # Если имя не найдено в WINS, разрешаем его
                                      # поиск на DNS-сервере.
 
    idmap uid = 10000 - 40000         # Определяем диапазон uid для сопоставления
                                      # с SID пользователей домена
    idmap gid = 10000 - 40000         # Определяем диапазон gid для сопоставления
                                      # с группами домена
    template shell = /bin/bash        # Разрешаем доменным пользователям исполь-
                                      # зовать командную строку
    winbind enum users = Yes          # Разрешаем Winbind перечислять доменных
                                      # пользователей
    winbind enum groups = Yes         # Разрешаем Winbind перечислять доменные
                                      # группы
    winbind use default domain = Yes  # Позволяет не использовать доменное имя при
                                      # аутентификации пользователей, актуально при
                                      # использовании одного домена.
    winbind refresh tickets = Yes     # Разрешаем Winbind обновлять тикеты
 
# Стандартная процедура отключения принтеров
    load printers = No                # Отключаем загрузку принтеров
    printcap name = /dev/null
    disable spoolss = Yes             # Отключаем spoolss
    show add printer wizard = No      # Отключаем отображение "Мастера установки
                                      # принтеров".

Проверяем правильность конфигурационного файла samba:

root@Linux-04:~# testparm

Вводим машину в домен:

root@Linux-04:~# net ads join -U admin
Enter admin's password:
Using short domain name -- MYDOMAIN
Joined 'LINUX-04' to realm 'mydomain.local'

Добавляем в автозагрузку и запускаем сервисы winbind и smbd:

root@Linux-04:~# update-rc.d winbind defaults
root@Linux-04:~# service winbind start
root@Linux-04:~# update-rc.d smbd defaults
root@Linux-04:~# service smbd start

Проверяем может ли winbind получить список пользователей из Active Directory:

root@Linux-04:~# wbinfo -u

Затем точно такая же проверка для групп:

root@Linux-04:~# wbinfo -g

4. Настройка авторизации

Правим /etc/nsswitch.conf, добавляем winbind после «passwd: comapt» и «group: compat»

passwd:         compat winbind
group:          compat winbind
shadow:         compat
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis

Проверяем, в результате мы должны увидеть весь список пользователей, локальных и пользователей из Active Directotry:

root@Linux-04:~# getent passwd

Такая же проверка для групп пользователей:

root@Linux-04:~# getent group

Что бы автоматически создавать домашние папки для пользователей домена, добавляем в конец файла /etc/pam.d/common-session следующую строчку:

session  optional  pam_mkhomedir.so skel=/etc/skel/ umask=0077

Все.

12 Коммент. : “Интеграция Ubuntu в домене Windows”

  1. guyver пишет:

    Интересно.
    А почем в убунте не сделали как в opensuse где подобная интеграция идет изкаропки и настраивается в yast ?

  2. Alsigned пишет:

    @guyver
    У каждого дистрибутива свои особенности. ;)

    Я склоняюсь к тому что linux все-таки должен работать в linux-подобной среде, думаю такого же мнения придерживаются и разработчики Ubuntu. Если уж сильно хочется из графической оболочки подключиться к домену или не хочется заморачиваться с настройкой – можно воспользоваться Likewise-open. Включать же возможность подключения к Active Directory в дистрибутив на мой взгляд не целесообразно, потому что linux в домене Windows используется не так часто и в подавляющем большинстве случаев он окажется бесполезным.

  3. Дмитрий Пономарев пишет:

    Автор, в качестве FQDN сервера NTP можно, да правильнее с т.з. обеспечения высокодоступности, указывать имя корневого домена AD (т.е. «»mydomain.local» в Вашем случае), а не конкретный контроллер домена.

    Моя практика показывает, что Linux-клиенты «не любят» AES в Kerberos, подписание сообщений SMB и входящий NTLMv2. Автор, Вы можете подтвердить это?..

  4. Alsigned пишет:

    Добрый день, @Дмитрий Пономарев

    Идея не плохая, правда с учетом того что разница во времени по умолчанию может составлять 5мин, реальную выгоду от нее мы получим только в случае если контроллер домена умрет минимум на неделю. Честно говоря, samba в домене тема заезженная, странно что я раньше не натыкался на такое решение.

    1. AES kerberos – о проблемке слышал, но сам на граблях из-за нее не стоял.

    2. Подписание сообщений SMB – не сталкивался.

    3. Входящий NTLMv2 – немножко не понятное описание, для нормальной поддержки NTLMv2 нужна samba >= 3.3, в данном примере используется версия 3.4.7.

    Смоделируй ситуацию где возникают первые две проблемы, охота покопаться. ;)

  5. vadim пишет:

    В ubuntu для настройки pam используется pam-auth-update. Поэтому для создания каталогов пользователей нужно добавить в файл /usr/share/pam-configs/winbind строки:

    Session:
    required pam_mkhomedir.so umask=0022 skel=/etc/skel
    Session-Initial:
    required pam_mkhomedir.so umask=0022 skel=/etc/skel

    Далее, если не планируется предоставлять доступ к самому компьютеру по smb то нет необходимости запускать smbd и nmbd. Достаточно только winbindd. Если нет клиентов под Windows 9x то можно отключить netbios:
    disable netbios = yes

    И наконец, для маппинга unix uid и sid домена лучше использовать nss модуль hash. Он более надежен, не требует хранения tdb файлов и позволяет иметь одинаковые uid на всех unix компьютерах.
    idmap backend = hash
    idmap uid = 10000-4000000000
    idmap gid = 10000-4000000000
    winbind nss info = hash
    idmap cache time = 1800

  6. Lightnin_Hopkins пишет:

    А вот вводить в домен обязятельно
    net ads join -U admin
    если у меня уже есть там учетка?

  7. ViT пишет:

    > Добавляем в автозагрузку … сервисы winbind и smbd:
    Зачем? при установке пакетов они автоматически добавляются туда? или это так, «на всякий пожарный»?

    > # Стандартная процедура отключения принтеров
    во многих мануалах вижу это действо. опятьже не понимаю зачем? а если понадобиться расшарить принтер?

  8. winterheart пишет:

    u[b]nb[/b]utu? Как так можно слажать :) ?

  9. Alsigned пишет:

    @vadim

    Спасибо за дополнения, обязательно поразбираюсь и поправлю в статье.

  10. Alsigned пишет:

    @Lightnin_Hopkins

    Не понял твой вопрос. Учетная запись у тебя или у компьютера?

    На самом деле можно вообще этим всем не заморачиваться, для входа в систему используешь локальную учетку, при подключении к виндовым шарам виндовую, дополнительно ставишь галочку «Запомнить пароль навсегда», а на контроллере домена в свойствах пользователя устанавливаешь галочку «Срок действия пароля не ограничен» ;)

  11. Alsigned пишет:

    @ViT

    Добавляем в автозагрузку … сервисы winbind и smbd:
    Зачем? при установке пакетов они автоматически добавляются туда? или это так, «на всякий пожарный»?

    Ты совершенно прав – на «всякий пожарный», и из-за недоверия к немножко новой для меня операционной системе. В статье обязательно поправлю.

    Стандартная процедура отключения принтеров
    во многих мануалах вижу это действо.

    Это делается для того что бы не использовать бесполезный сервис, а в подавляющем большинстве случаев что бы избавиться от ошибок в логах ;) Расшарить на несколько пользователей USB/LPT принтер можно при помощи железного принт-сервера, такое решение намного лучше нежели чем подключать его через компьютер.

  12. Alsigned пишет:

    @winterheart

     u[b]nb[/b]utu? Как так можно слажать :) ?

    Я почти к каждой статье получаю 1-2 подобных комментарев. Поэтому активно ищу человека который займется на волонтерских началах проверкой орфографии и опечаток. Пока безрезультатно ;)

    PS: Кроме меня так слажали еще 580 000 раз – http://www.google.ru/search?q=Unbutu

Трекбеки/Пинги

  1. Блог «Админа-Маньяка» – Интеграция Unbutu в домене Windows | Блогеры о юниксах - [...] Читать далее: http://www.alsigned.ru/?p=1429 [...]

Оставить комментарий