Ввод в домен на базе Windows 2003
Ввод в домен на базе Win 2003 рабочей станции под управлением Simply Linux
Задача
Ввести в домен на базе Winows Server 2003 машину под управлением Simply Linux.
Дано
- Windows Server 2003;
- Simply Linux (обновленный до бранча 5.1);
- Права администратора домена OFFICE.DOMEN.LOCAL (имя вашего домена).
Устанавливаем необходимые пакеты
samba-swat samba-client samba-winbind krb5-kinit libkrb5 ntpdate pam_mount
Настраиваем сетевое соединение
Необходимо добиться резолва имен ваших машин в сети. Например, имя контроллера домена -- DC3.OFFICE.DOMEN.LOCAL, а его ip-адрес -- 192.168.10.11. Он же является DNS- и WINS-сервером в сети.
Проверяем его доступность по ip-адресу:
ping 192.168.10.11 PING 192.168.10.11 (192.168.10.11) 56(84) bytes of data. 64 bytes from 192.168.10.11: icmp_seq=1 ttl=128 time=0.138 ms 64 bytes from 192.168.10.11: icmp_seq=2 ttl=128 time=0.217 ms
Проверяем его доступность по имени узла:
ping DC3 ping: unknown host DC3
Для того, чтобы узел отвечал по имени, необходимо указать домен поиска OFFICE.DOMEN.LOCAL. В Центре Управления Системой это указывается в настройках сетевого интерфейса в поле Домены поиска. Не забываем нажать Применить.
Проверяем его доступность по имени узла:
ping DC3 PING DC3.office.domen.local (192.168.10.11) 56(84) bytes of data. 64 bytes from dc3.office.domen.local (192.168.10.11): icmp_seq=1 ttl=128 time=0.137 ms 64 bytes from dc3.office.domen.local (192.168.10.11): icmp_seq=2 ttl=128 time=0.147 ms
В файл /etc/hosts добавляем запись о нашей машине:
127.0.0.1 localhost.localdomain localhost 127.0.0.1 wslinux.office.domen.local wslinux
По имени DC3 узел отвечает, но вот если попробовать его пинговать, указав полное имя домена DC3.OFFICE.DOMEN.LOCAL -- получим ошибку:
ping DC3.OFFICE.DOMEN.LOCAL ping: unknown host DC3.OFFICE.DOMEN.LOCAL
И соответственно в домен машину мы ввести не сможем. Ищем файл /etc/nsswitch.conf, в нем строку с hosts:
У по умолчанию она имеет вид:
hosts: files nisplus nis mdns4_minimal [NOTFOUND=return] dns mdns4 fallback
И приводим ее к такому виду:
hosts: files dns nisplus nis mdns4_minimal [NOTFOUND=return] mdns4 fallback
Сохраняем изменения и проверяем:
ping DC3.OFFICE.DOMEN.LOCAL PING DC3.OFFICE.DOMEN.LOCAL (192.168.10.11) 56(84) bytes of data. 64 bytes from dc3.office.domen.local (192.168.10.11): icmp_seq=1 ttl=128 time=0.201 ms 64 bytes from dc3.office.domen.local (192.168.10.11): icmp_seq=2 ttl=128 time=0.133 ms
Настраиваем сервисы самбы
Теперь необходимо включить в автозапуск необходимые службы. Выполним следующие команды от рута:
# chkconfig --list | grep smb smb 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Смотрим, на каких уровнях запускается самба, если ничего не задано -- включаем нужные уровни:
# chkconfig --levels 2345 smb on
Проверяем:
# chkconfig --list | grep smb smb 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Делаем то же самое для winbind:
# chkconfig --list | grep winbind winbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig --levels 2345 winbind on
Запускаем сервис самба:
# service smb start
Чтобы сервис swat запускался автоматически: в файле /etc/xinetd.d/swat меняем значение disable с yes на no и перезапускаем службу:
# service xinetd restart
Запускаем swat в браузере: http://localhost:901 (либо же правим /etc/samba/smb.conf соотвественно)
Во вкладке GLOBALS ставим следующие значения:
Workgroup = OFFICE (указываем первую часть имени домена) Realm = OFFICE.DOMEN.LOCAL (полное имя домена) Netbios name = WSLINUX (netbios имя нашего компьютера) Security = ads (это режим domain member)
Подтверждаем изменения нажав кнопку commit changes наверху страницы. И последние значения настраиваем, переключившись в режим advanced view (сложный):
# ip-адрес контроллера домена (в новой версии при Security = ads строку Password server требуется замаскировать) Password server = 192.168.10.11
# Диапазоны идентификаторов для виртуальных пользователей и групп. idmap uid = 10000 - 40000 idmap gid = 10000 - 40000 winbind enum users = yes winbind enum groups = yes
# Использовать домен по умолчанию для имён пользователей. Без этой опции имена пользователей и групп # будут использоваться с доменом, т.е. вместо username - DOMAIN\username. winbind use default domain = yes
# Если вы хотите разрещить использовать командную строку для пользователей домена, то # добавьте следующую строку, иначе в качестве shell'а будет вызываться /bin/false template shell = /bin/bash
# Для автоматического обновления билета Kerberos модулем pam_winbind.so нужно добавить строчку winbind refresh tickets = yes
Снова подтверждаем изменения (сохранить изменения). Далее во вкладке STATUS запускаем или перезапускаем службы, Restart All (замечу что winbindd на этом этапе еще не работает).
Настраиваем синхронизацию времени с нашим контроллером домена
Проверяем уровни запуска службы:
# chkconfig --list | grep ntpd ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Задаем необходимые:
# chkconfig --levels 345 ntpd on
Добавляем в конфигурационный файл /etc/ntpd.conf запись о сервере времени для синхронизации, все остальное комментируем:
#servers pool.ntp.org servers 192.168.10.11
Запускаем синхронизацию времени:
# ntpdate 192.168.10.11 17 Aug 11:03:44 ntpdate[14747]: step time server 192.168.10.11 offset 82.524429 sec
И только после этого запускаем службу:
# service ntpd start
Настраиваем службу аутентификации для получения билетов Kerberos
Для того что бы Kerberos производил аутентификацию на контролере домена, а не на локальной машине, правим /etc/krb5.conf. Приводим его к виду (обратите внимание на регистр, где заглавными, так и должно быть):
[libdefaults] default_realm = OFFICE.DOMEN.LOCAL dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes [realms] OFFICE.DOMEN.LOCAL = { kdc = 192.168.10.11 } [domain_realm] .office.domen.local = OFFICE.DOMEN.LOCAL office.domen.local = OFFICE.DOMEN.LOCAL [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false }
- NB: При отсутствии параметра admin_server, у пользователя будет отсутствовать возможность сменить свой пароль средствами Kerberos --solo 14:03, 2 ноября 2012 (MSK)
Пробуем получить билет авторизации:
# kinit admin@OFFICE.DOMEN.LOCAL Password for mad_max@OFFICE.DOMEN.LOCAL:
где admin -- имя доменного админа, а OFFICE.DOMEN.LOCAL -- имя вашего домена (именно заглавными).
Если все прошло хорошо, в ответ на этот запрос вы ответа не получите.
Проверяем наличие билета командой klist, вывод должен быть примерно такой:
# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: admin@OFFICE.DOMEN.LOCAL Valid starting Expires Service principal 08/17/10 11:11:58 08/17/10 21:12:04 krbtgt/OFFICE.DOMEN.LOCAL@OFFICE.DOMEN.LOCAL renew until 08/18/10 11:11:58
Правим /etc/nsswitch.conf примерно до такого вида:
passwd: files winbind shadow: tcb files winbind group: files winbind gshadow: files
Чтобы изменения в конфиге /etc/nsswitch.conf вступили в силу без перезагрузки, нужно от рута дать команду:
# ldconfig
Вводим в домен
Для ввода в домен необходимо дать команду:
# net ads join -U admin admin's password: Using short domain name -- OFFICE Joined 'WSLINUX' to realm 'OFFICE.DOMEN.LOCAL'
где admin -- имя доменного админа, а admin's password — пароль доменного админа.
- NB: Для корректного ввода в домен может потребоваться предварительный останов демонов smb и winbind --solo 14:12, 2 ноября 2012 (MSK)
Проверить, что мы вошли в домен можно командой wbinfo -u (велика вероятность, что она отработает только после перезагрузки компьютера):
$ wbinfo -u OFFICE\гость OFFICE\администратор OFFICE\user1 OFFICE\user2 …
Для того, чтобы в нашу систему можно было логиниться под доменными аккаунтами и авторизация шла через winbind, необходимо привести /etc/pam.d/gdm к виду:
#%PAM-1.0 auth include system-auth auth required pam_nologin.so account include system-auth password include system-auth session include system-auth session optional pam_console.so
(Для KDE4 это файл /etc/pam.d/kde4)
А /etc/pam.d/system-auth-winbind к виду (если его нет, то создать):
#%PAM-1.0 auth required pam_securetty.so auth required pam_nologin.so auth sufficient pam_tcb.so shadow fork prefix=$2a$ count=8 nullok auth sufficient pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login use_first_pass auth include system-auth-use_first_pass account sufficient pam_tcb.so shadow fork account sufficient pam_winbind.so use_first_pass password sufficient pam_winbind.so password required pam_passwdqc.so config=/etc/passwdqc.conf password sufficient pam_tcb.so use_authtok shadow fork prefix=$2a$ count=8 nullok write_to=tcb password include system-auth-use_first_pass session required pam_mkhomedir.so skel=/etc/skel/ umask=0077 session required pam_mktemp.so session required pam_limits.so session sufficient pam_tcb.so session sufficient pam_winbind.so
- NB: Может это кому-то покажется несекьюрным, но в своей конфигурации я закомментировал первую строку(auth required pam_securetty.so) для нормального использования консоли доменным пользователем --Tora-bora 19:02, 19 октября 2012 (MSD)
И /etc/pam.d/system-auth-use_first_pass-winbind к виду(если его нет, то создать):
#%PAM-1.0 auth sufficient pam_winbind.so use_first_pass auth sufficient pam_tcb.so shadow fork prefix=$2y$ count=8 nullok use_first_pass password sufficient pam_winbind.so use_authtok password sufficient pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb
Не забываем переключить авторизацию на winbind
- (Внимание! Восле такой манипуляции на KDesktop 6 пропадает возможность залогиниться вообще, поэтому я решил сделать обход - см.Примечание --Tora-bora 19:02, 19 октября 2012 (MSD))
# control system-auth winbind
С такими конфигами будет работать авторизация из gdm, gnome-screensaver, ssh.
Перезагружаемся и можем логинится как локальными пользователями системы, так и доменными. Но стоить помнить один ньюанс. Если логин вашего локального пользователя совпадает с доменным, то будет попытка входа только локальным пользователем.
Добавляем пользователей с административными привилегиям (sudo)
Разрешаем всем вызывать sudo:
# control sudo public
Разрешаем группе администраторов LinuxAdmins (должна быть создана) повышать свои привилегии без запроса пароля:
# echo '%OFFICE\\LinuxAdmins ALL= NOPASSWD : ALL' >> /etc/sudoers
Настраиваем автомонтирование сетевых ресурсов
Устанавливаем smbnetfs, samba, samba-client, fuse-smb.
Создаем /etc/fuse.conf и добавляем запись:
user_allow_other (не забываем нажимать enter после строчки)
Добавляем в /etc/modules запись:
fusermount public (не забываем нажимать enter после строчки)
Копируем /usr/share/doc/smbnetfs/smbnetfs.conf в /home/%username%/.smb/
Копируем /etc/samba/smb.conf в /home/%username%/.smb/
Добавляем пользователя в группу fuse.
Создаем в домашнем каталоге каталог (например) /home/%username%/net
Создаем скрипт запуска в удобном для нас месте (например) /home/%username%/.smb/net со следующим содержанием:
#!/bin/sh smbnetfs /home/%username%/net
Делаем скрипт исполняемым и помещаем в автозапуск, например в .bash_profile.
Библиография
Инструкция составлена с применением следующих ресурсов:
- http://privats.ru/2009/08/integraciya-linux-centos-v-active-directory-part-1.html
- http://ftp.linux.kiev.ua/pub/mirrors/ftp.altlinux.org/Master/2.2/docs/admin-html/ch12s07.html
- http://team.ru/soft/altlinux_domen.shtml
- http://forum.altlinux.org/index.php?topic=376.0
- http://help.ubuntu.ru/wiki/ввод_в_домен_windows
Примечание
KDesktop
На KDesktop мне не удалось настроить вход в домен AD используя
# control system-auth winbind
Взамен этого можно сделать некоторые ручные манипуляции
- делаем ссылку system-auth указывающую на system-auth-winbind
- делаем ссылку system-auth-use_first_pass указывающую на system-auth-use_first_pass-winbind
- файл /etc/pam.d/kde4 приводим к виду:
#%PAM-1.0 auth required pam_group.so auth include system-auth-winbind auth required pam_nologin.so account include system-auth-winbind password include system-auth-winbind session include system-auth-winbind
- файл /etc/pam.d/kde4-kscreensaver приводим к виду:
#%PAM-1.0 auth required pam_securetty.so auth required pam_nologin.so auth sufficient pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login auth sufficient pam_tcb.so shadow fork prefix=$2a$ count=8 nullok use_first_pass
Доступ к локальным группам
- Внимание! Указанное ниже является не полностью безопасным решением, применяйте, если понимаете риск.
Чтобы все доменные пользователи были включены в определенные локальные группы (могли переключаться в root, запускать VirtualBOX и проч.) нужно добавить в /etc/security/group.conf
*;*;*;Al0000-2400;wheel,audio,cdrom,cdwriter,vboxusers,scanner
- первая звездочка - «все сервисы», они же - пути авторизации (например, xdm, kdm, su, ssh и т.д. и т.п.)
- вторая звездочка - «все tty».
- третья звездочка - «все пользователи». Тут можно сделать вышеупомянутое перечисление, через запятую.
- четвертое поле - это время. Здесь - «круглосуточно»
- пятое поле - в какие, собственно группы надо включить пользователя.
И включить строку
auth required pam_group.so
в конф. файл входа в систему( для KDE это /etc/pam.d/kde4)
Переустановка
После переустановки системы (при сохранении раздела /home) необходимо выставить владельца домашнего каталога доменного пользователя (владелец меняется)
chown -R ivanov /home/DOMAIN/ivanov/
Смена имени хоста
Если нужно сменить имя хоста, править HOSTNAME в файле /etc/sysconfig/network
Два IP-адреса
Замечены проблемы со входом доменного пользователя при наличии двух IP-адресов. На этапе первого входа пользователя лучше от второго IP временно отказаться.
Дополнения
- В случае появления ошибки ERROR_DNS_GSS_ERROR, удалите пакет hostname-hook-hosts и удалите из /etc/hosts строку определения
127.0.0.1 <имя хоста>...
Настройка LightDM
В /etc/lightdm/lightdm.conf раскомментируйте строку в группе [SeatDefaults]:
greeter-hide-users=true
Это позволит вводить имя пользователя вручную, а не прокручивать огромный список доступных доменныx пользователей.
Также полезно выключить выбор языка. В файле /etc/lightdm/lightdm-gtk-greeter.conf в группе [greeter] укажите
show-language-selector=false