Полноценный ввод рабочей станции Ubuntu Linux в Windows-домен

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Так как последние версии Samba позволяют вводить рабочую станцию или сервер под управлением OS Linux в домен Windows практически без "танцев с бубном", мы проработали подробный план по вводу в домен для систем на базе Ubuntu Linux.

Ввод Linux в Windows домен

Данная инструкция была многократно опробирована в рамках крупного проекта.

Цели:

  • Интегрировать рабочую станцию в домен INFERNO
  • Реализовать возможность авторизации с использованием учетных записей домена
  • Организовать доступ к рабочей станции для определенных групп пользователей
  • Предоставить административные функции (sudo) для определенной группы пользователей
  • Организовать общий сетевой ресурс и ограничить доступ для определенных групп пользователей
  • Дополнительно предоставить возможность offline-авторизации в случае временной недоступности домена

Установка и настройка:

1. Установим пакеты необходимые для интеграции с Windows-доменом:

# aptitude install krb5-user samba winbind libnss-winbind libpam-winbind

2. Для полноценной интеграции с доменом уровня выше 2003, необходима корректная настройка клиента DNS, а именно, необходимо указать домен поиска по умолчанию и DNS-сервер, на котором имеются сервисные записи ресурсов Windows домена.

В нашем случае файл /etc/resolv.conf ,если не используется автоматическая настройка с использованием DHCP, приобретает вид:

nameserver 172.16.0.3
search inferno.inferno.com

В случае использования автогенерируемого файла resolv.conf (средствами resolvconf) в файл /etc/interfaces необходимо добавить записи:

dns-nameservers 172.16.0.3
dns-search inferno.inferno.com

3. Основой работы Windows-домена уровня включая 2003 и выше является служба Kerberos, за пользовательскую часть которой отвечает пакет krb5-user. На этапе установки пакета у вас будет запрошен REALM-домена и адреса Kerberos серверов обслуживающих домен.

В последних версиях пакета эта информация не требуется и все сведения для нормального функционирования Kerberos-клиента получаются посредством DNS-запросов к сервисным записям, а конфигурационный файл /etc/krb5.conf приобретает вид:

[libdefaults]
default_realm = INFERNO.INFERNO.COM
dns_lookup_realm = true
dns_lookup_kdc = true
rdns = true
ticket_lifetime = 24h
forwardable = yes

[login]
krb4_convert = true
krb4_get_tickets = false

Проверить корректность настроек службы Kerberos можно выполнив команду получения «билета»:

# kinit chernousov@INFERNO.INFERNO.COM

Обратите внимание, что имя домена указано прописными буквами - это принципиальный момент ,в противном случае,вы получите ошибку: kinit: KDC reply did not match expectations while getting initial credentials). Проверьте полученные "билеты" командой klist, и если вы получили список выданных "билетов" kerberos, то можно приступать к присоединению рабочей станции к домену.

4. Ввод рабочей станции или сервера под управлением OS Linux несколько сложнее чем Windows. И первым этапом необходимо провести базовую настройку конфигурационного файла /etc/samba/smb.conf.

Минимальный файл конфигурации достаточный для подключения к домену windows (с комментариями) приведен ниже:

[global]
# Рабочая группа (Сокращенное наименование домена)
workgroup = INFERNO
# Описание сервера отопражается при выводе перечня компьютеров домена или рабочей группы
# %h (системное имя linux хоста).
server string = %h server (Samba, Ubuntu)
# Выключаем встроенный wins-сервер.
wins support = no
# Полное имя домена к которому подключена станция
realm = INFERNO.INFERNO.COM
# Разрешаем nmbd поиск NetBIOS имен с использованием DNS.
dns proxy = yes
# Расположение log-файлов.
log file = /var/log/samba/log.%m
# Ограничивам размер каждого log-файла в килобайтах.
max log size = 1000
# В syslog пишем только минимум информации, например о
#крахе службы (основные данные в персональный log samba)
syslog = 0
# Можно назначить скрипт который будет отпабатывать в случае
# краха службы samba (например перезапуск и отправка письма администраторам)
# panic action = /usr/share/samba/panic-action %d
# Роль сервера (отдельный сервер или член домена)
server role = member server
# Запросы с неправильным паролем будут отклонены, если такое имя пользователя существует.
# Если не существует, то такие запросы будут считаться как попытки зайти гостем
map to guest = bad user

# Интерпретатор командной строки для доменных пользователей
template shell = /bin/bash

Подключение к домену выполняется следующей командой:

# net ads join -U "chernousov@INFERNO.INFERNO.COM"

Обратите внимание, что имя домена аналогично REALM и пишется прописными буквами, в противном случае, возможны проблемы взаимодействия со службой Kerberos. В результате выполнения команды вы получите следующий вывод:

Enter chernousov@INFERNO.INFERNO.COM's password:
Using short domain name -- INFERNO
Joined 'INFER-ANALYSER' to dns domain 'inferno.inferno.com'

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

5. Перезапускаем службы smbd, nmbd и winbind.

# service smbd restart
# service nmbd restart
# service winbind restart

6. Настраиваем обработку учетных данных пользователей домена на рабочей станции Linux

При интеграции служб учетных записей Windows и Linux необходимо учитывать, что Windows использует SID-записи, а Linux использует UID и GID. Преобразование из одного типа записей в другой может осуществляться несколькими методами, разница в которых состоит лишь в том, будут ли числовые идентификаторы Linux-пользователей вошедших при помощи домена идентичными на всех рабочих станциях Linux подключенных к домену, или нет.

Для обеспечения уникальности числовых идентификаторов GID и UID предназначена служба Active Directory Microsoft Windows Services для UNIX (служба NIS) описываемая RFC 2307. В случае развертывания службы становится доступна дополнительная вкладка Unix Attributes в свойствах пользователя, где необходимо задать GID и UID для каждого из пользователей. Такой метод необходим только в ряде случаев взаимодействия Unix-сервисов, например, в случае использования NFS ,как показывает практика,можно обойтись без обеспечения такого функционала. Так же, имеются некоторые проблемы, которые могут возникнуть в результате использования RFC 2307, например, в случае если администратор забудет назначить Unix-идентификаторы, получение сведений о пользователе вызовет ошибку.

Мы не будем рассматривать сервисы RFC 2307. Рассмотрим несколько типовых команд wbinfo, которые нам понадобятся в дальнейшем.

а. Получаем список пользователей домена:

# wbinfo -u
INFERNO\guest
INFERNO\administrator
INFERNO\tsinternetuser
INFERNO\iusr_dc
INFERNO\iwam_dc
INFERNO\iusr_dc2
INFERNO\valiev
INFERNO\mac
INFERNO\verkeev
INFERNO\bochevarov
INFERNO\vdgg

б. Получаем список доменных групп:

# wbinfo -g
INFERNO\domain users
INFERNO\domain computers
INFERNO\domain guests
INFERNO\group policy creator owners
INFERNO\domain admins

в. Получаем Windows SID пользователя:

# wbinfo --name-to-sid="INFERNO\Chernousov"
S-1-5-21-1177238915-436374069-1343024091-5713 SID_USER (1)

г. Преобразовываем Windows SID в Linux UID:

# wbinfo --sid-to-uid=S-1-5-21-1177238915-436374069-1343024091-5713
-1

На этом месте остановимся подробнее. Как вы видите, в результате преобразования мы получили: 1. Это означает, что служба конвертации идентификаторов работает не правильно. Модифицируем наш конфигурационный файл, добавив в него следующие параметры:

idmap config * : backend = tdb
idmap config * : range = 10000 - 49999

После модификации перезапустим службы и проверим выполнение команды из пункта г:

# wbinfo --sid-to-uid=S-1-5-21-1177238915-436374069-1343024091-5713
10001

В этом режиме на каждом клиенте используется собственная база данных для преобразования имен в Windows и Linux идентификаторы. Для работы с учетными записями домена и Kerberos этого вполне достаточно.

Обратите внимание на переменную range. Она описывает диапазон, исходя из которого, будут выдаваться Unix-идентификаторы в процессе запроса данных. Этим, собственно, и объясняются расхождения UID для пользователей домена на разных рабочих станциях.

7. Настраиваем связку «Локальный пользователь → Доменный пользователь».

Это достаточно просто. Необходимо в конфигурационный файл /etc/nsswitch.conf к параметрам passwd и group добавить метод winbind, в результате, должно получиться вот так:

passwd: compat winbind
group: compat winbind

Для задействования этого функционала необходима установленная библиотека libnss-winbind. Следующим этапом необходимо удостовериться, что интеграция доменных учетных записей прошла успешно, для чего, выполните следующую команду:

# id "INFERNO\chernousov"

Если все правильно, то вы увидите список доменных групп и их преобразование в локальные идентификаторы. Например, вот так:

uid=10001(INFERNO\chernousov) gid=10000(INFERNO\domain users) группы=10000(INFERNO\domain users),
10001(INFERNO\группа с запрещением репликации паролей rodc),10002(INFERNO\domain admins),
10003(INFERNO\rocket_access),10004(INFERNO\unix users),10005(INFERNO\unix admins)

Так же, рекомендую проверить назначение домашнего каталога и интерфейса командной строки для пользователя по умолчанию. Для этого служит команда getent:

# getent passwd "INFERNO\chernousov"

Большую часть параметров можно переопределить, но нас вполне устроят и значения по умолчанию.

INFERNO\chernousov:*:10001:10000:Anton Chernousov:/home/INFERNO/chernousov:/bin/bash

8. Следующим этапом рассмотрим авторизацию пользователей и вопросы разграничения доступа.

За авторизацию доменных пользователей отвечает библиотека libpam-winbind. Описания методов PAM-авторизации пользователей находятся в каталоге /etc/pam.d/ и при установке библиотеки необходимые параметры настраиваются автоматически. Можете проверить доступ, попробовав подключиться к рабочей станции по SSH указав учетные данные доменного пользователя.

# ssh "INFERNO\chernousov"@172.16.3.61

Если авторизоваться у вас получилось, то это означает, что настройка прошла успешно. Стоит лишь обратить ваше внимание, что автосоздание домашних каталогов пользователей в Ubuntu отключено по умолчанию. Для изменения такого поведения выполните в консоли команду:

# dpkg-reconfigure libpam-runtime

Выберите параметр «Create home directory on login» и повторите вход доменным пользователем. Каталог будет создан автоматически.

По умолчанию всем пользователям домена разрешен доступ на рабочую станцию, но нам требуется определить доступ определенной группе пользователей домена, а остальным запретить. Для этого служит конфигурационный файл /etc/security/pam_winbind.conf по умолчанию он отсутствует, но вы можете скопировать его из каталога /usr/share/doc/libpam-winbind/examples/pam_winbind.conf

В данном файле можно настроить несколько параметров, во первых, как я уже сказал выше, рызрешим доступ только для одной группы пользователей, для чего определим ее SID в домене:

# wbinfo --name-to-sid="INFERNO\unix users"
S-1-5-21-1177238915-436374069-1343024091-5725 SID_DOM_GROUP (2)

И установим параметр require_membership_of в полученный SID:

require_membership_of = S-1-5-21-1177238915-436374069-1343024091-5725

В данном файле мы можем, так же, настроить параметры кеширования учетных данных и offline-авторизации:

cached_login = yes

Для работы offline авторизации в конфигурационный файл /etc/samba/smb.conf необходимо добавить параметр:

winbind offline logon = yes

Так-же, нам необходимо предоставить определенной группе пользователей права администратора на этой рабочей станции. В linux-терминологии предоставим им доступ к выполнению любых операций через sudo. Для этого в файл /etc/sudoers добавим доменную группу INFERNO\unix admins:

%INFERNO\\unix\ admins ALL=(ALL:ALL) ALL

Обратите внимание на экранирование пробелов и символа\.

9. Следующим этапом разрешим пользователям доступ определенным каталогам на linux-машине по протоколу smb (общие ресурсы Windows). Например, предоставим доменным пользователям доступ к каталогу /opt/share с правами только на чтение.

Создадим каталог /opt/share и установим его группу владельцев в «пользователи домена»:

# mkdir /opt/share
# chgrp -R "INFERNO\domain users" /opt/share

В файл /etc/samba/smb.conf добавим описание ресурса и ограничим доступ к нему для группы пользователей домена.

[share]
comment = Public domain share
path = /opt/share/
browseable = yes
read only = no
create mask = 0775
directory mask = 0775
valid users = @"INFERNO\domain users"

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

Вы должны быть вошедший в чтобы отправить комментарий