вторник, 13 июля 2010 г.

Ubuntu в домене Windows

Авторские права: Исаев Р. А.

Цели:
1. Обеспечить авторизацию пользователя в домене Active Directory
2. Обеспечить прозрачную и сквозную авторизацию на ресурсах сети
3. Закрыть для пользователя использование внешних носителей таких как Flash, CD,
Floppy.

Все команды в этом руководстве требуют прав root так, что я обычно пользуюсь sudo -i
Все конфиги используются в действующей сети.

DOMAIN ваш домен. dc это сокращение от domain controller

1. Редактируем часовой пояс

#mcedit /etc/default/rcS
ставим UTC=no

2. Настраиваем сеть.
Проверяем наличие пинга до домен-контроллера(DC) по полному доменному имени (FQDN),
если проблемы - настраиваем /etc/resolv.conf

# ping dc.domain.ru

#mcedit /etc/default/ntpdate

NTPSERVERS="dc.domain.ru" <--- меняем эту cтроку указывая домен контроллер
в домене с несколькими домен контроллерами главным сервером времени является
эмулятор PDC. остальные dc берут время у него.

Даем команду на синхронизацию

#/etc/network/if-up.d/ntpdate

Прописываем полное FQDN для настраиваемой машины workstation

# mcedit /etc/hosts

127.0.0.1 workstation.domain.ru localhost workstation

Тестим

# ping workstation.domain.ru

3. Начнем ставить пакеты для работы в домене:

#apt-get install samba smbfs winbind libpam-mount

smbfs нужен для монтирование сетевых папок. Он делает два файла в /sbin/(u)mount.cifs

Дополнительно кому нужен ssh доступ к рабочей станции и наличие редакторов, файл
менеджеров:

#apt-get install mc gnome-commander openssh-server

А теперь конфигурируем SAMBA для работы в домене создадим папку для пользователей домена:

$mkdir /home/DOMAIN

Правим конфиг

# mcedit /etc/samba/smb.conf

Код:

[global]
unix charset = UTF-8
dos charset = CP866
display charset = UTF-8
workgroup = DOMAIN
server string = %h server (Samba, Ubuntu)
; У кого есть wins можете включить
wins support = no
; и прописать wins сервер
; wins server = 192.168...
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
# вот тут мы показываем, что используем AD
security = ads
# если стоит * то samba сама будет искать домен контроллер через dc, или же можно
перечислить их IP адреса через пробел в явном виде. Или указать один #IP для того dc на
котором хотите авторизоваться. Для отказоустойчивости лучше указать несколько dc или *
password server = *
realm = DOMAIN.RU
#Внимание realm пишется большими буквами !!!
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
invalid users = root
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword
:* %n\n
*passwd:*password\supdated\ssuccessfully* .
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
winbind enum groups = yes
winbind enum users = yes
#домашняя папку у пользователя будет в папке с именем домена. Лучше ее создать заранее
вручную.
template homedir = /home/%D/%U
client use spnego = yes
winbind use default domain = yes
winbind refresh tickets = yes
restrict anonymous = 2
# строки ниже, чтобы рабочая станция не пыталась стать обозревателем в сети.
domain master = no
local master = no
preferred master = no
os level = 0

Проверяем конфигурацию SAMBA:
# testparm

4. Даем команду чтобы демоны перечитали конфигурацию:

#/etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start

5. Подключаем машину в домен

#net ads join –U administrator

Далее будет запрос пароля доменного админа. Вместо доменного админа можно указать
любую пользовательскую учетку. Да, у пользователя есть право ввести ПК в домен, но
ограниченное кол-вот раз .

В случае успеха видим:

Using short domain name – DOMAIN
Joined ‘namepc’ to realm ‘DOMAIN.RU’

Если такая машина уже существует увидим

Failed to set password for machine account (NT_STATUS_ACCESS_DENIED)
Failed to join domain !

Если будет такая ошибка содержащая что то про principal name, а в AD появится учетка, но со знаком красного крестика значит смотри и проверяй /etc/hosts

При рассинхронизации времени с DC возможно появление ошибки из-за несовпдаения
времени на DC и на workstation. Перегрузитесь для синхронизации времени с DC и повторно попытайтесь ввести в домен Ubuntu.
ВСЕ ! ПК в домене.

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

1. /etc/pam.d/common-auth

# /etc/pam.d/common-auth - authentication settings common to all services
auth required pam_mount.so
auth optional pam_group.so
auth sufficient pam_unix.so nullok_secure use_first_pass
auth sufficient pam_winbind.so use_first_pass krb5_auth krb5_ccache_type=FILE debug
auth required pam_deny.so


Опция debug нужна для отладки. Сыплет лишними данными в /var/log/auth.log
Полезно при проблемах, а так можно ее не ставить.
Первая строка “auth required pam_mount.so” принимает пароль.
Опция required указывает на обязательность этого модуля.
Если он будет провален по каким то причинам PAM даст ответ “не пускать”.
Дальше идет модуль pam_group.so то что он optional указывает на неважность выполнения этого модуля для общего ответа. То есть будет ли выполнен pam_group корректно или нет - неважно.
Дальше идут модули авторизации для локальных учеток pam_unix.so и для доменных pam_winbind.so
В моем конфиге пароль принимет pam_mount поэтому в модулях, которые принимают пароль указана опция use_first_pass, если ее не указать, то пароль придется вводить вручную несколько раз. Опция sufficient работает так, что положительный ответ любого из модулей авторизует пользователя, а отрицательный ответ одного из них не играет роли. Зато отрицательный ответ обоих будет обломом. Например входит локальный пользователь модуль unix даст ответ ДА, winbind не найдет в домене
такой учетки и даст ответ НЕТ (или найдет учетку, но пароли не совпадут). Здесь надо предупредить, что неверные попытки авторизоваться по существующей учетке в домене приведут к ее блокировке. Мое мнениие, что стоит избегать совпадения имен учеток на самом ПК и в домене. Последний модуль обязателен и в ЛЮБОМ случае отказывает во входе. Если дело дошло до него значит все плохо и никто из модулей не сказал ДА.

Pam_group нужен для вытягивания из домена групп в которые он входит. Так же в моей конфигурации winbind авторизуется по Kerberos посему никакие kerberos пакеты мы не
ставили. Билет пользователь получает при входе автоматически и билет кербероса кешируется в файлике.


2. /etc/pam.d/common-account

account sufficient pam_winbind.so
account required pam_unix.so

3. /etc/pam.d/common-password

password sufficient pam_unix.so nullok obscure md5
password sufficient pam_winbind.so

файл common-password начинает работать когда приходит время менять пароль (принудительная смена пароля по истечению срока) или когда запускается утилита для смены пароля passwd.

4. /etc/pam.d/common-session

session required pam_winbind.so
session required pam_unix.so
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
session optional pam_foreground.so

5. etc/pam.d/sudo

#%PAM-1.0
auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_deny.so
@include common-account

Файл sudo работает при запуске утилиты sudo или при попытке запустить любое из административных приложений в GNOME (KDE не испытывал). Обеспечивает нормальную работу Synaptic и прочих подобных приложений выдающих табличку на
пароль для административных действий.

6. /etc/pam.d/gdm

auth requisite
pam_nologin.so
auth required
pam_env.so
@include common-auth
@include common-account

session required
pam_limits.so
@include common-session
#session required
pam_mount.so use_first_pass
@include common-pammount

#строка нужна для создания
домашней папки после монтирования шары !!! создать папку в сетевой шаре до монтирования не
выйдет будет ошибка.

session required
pam_mkhomedir.so umask=0022 skel=/etc/skel
@include common-password

А вот файл указующий в каком порядке вызывать авторизационные скрипты и авторизовывать пользователя входящего через графический GDM интрефейс. Как видите тут строка создания домашней папки идет после common-pammount то есть после монтирования сетевого ресурса с файл-сервера w2k3
Тем у кого профиль лежит на рабочей станции эта строку рекомендуется поместить в
/etc/pam.d/common-session
Строки для keyring я убрал ибо не пользуюсь им.

7. А теперь вернемся к модулю перечисления групп pam_group из файла etc/pam.d/common-auth

У нас есть возможность включить доменного пользователя в те или иные ЛОКАЛЬНЫЕ группы ubuntu станции. Таким образом мы можем управлять правами пользователя домена на локальные ресурсы. Подключение флешек, аудио устройства, сканеры и т.д.
И у модуля есть файл конфигурации. Я привожу его в сокращенном виде. рекомендую поглядеть оригинал там много образцов и показаны интересные вещи.

#mcedit /etc/security/group.conf

# the syntax of the lines is as follows:
#
#
services;ttys;users;times;groups
#для пользователей.
*;*;*;Wk0900-2200;adm,audio,scanner,lpadmin
#для админов.
*;*;usysop;Al0000-2400;adm,audio,scanner,cdrom,floppy,plugdev,admin,dip,video,netdev,lpadmin,powerdev
*;*;admin-domena;Al0000-
2400;adm,audio,scanner,cdrom,floppy,plugdev,admin,dip,video,netdev,lpadmin,powerdev

Первый параметр сервис, для нас это любой будет, второй терминал (консоль или терминал), третий это имя пользователя домена!, четвертый это разрешенное время входа для этого пользователя. Пятый параметр это локальные группы. Членство в группе admin дает право на sudo. В данном случае пользователи имеют право ставить принтера, и пользоваться локальными ресурсами ПК на полную катушку.

У меня есть подозрение, что из-за того что модуль pam_group грузится с опцией optional ограничение по времени работать не станет, тогда для ограничения входа по времени модулую скорее всего нужно будет поставить вместо optional required в common-auth

8. Файл очень важен /etc/nsswitch.conf
passwd: compat winbind
group: compat winbind
shadow: compat
hosts: files dns
networks: files dns
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: files winbind

9. Редактированием /etc/sudoers
Туда надо добавить либо пользователя домена либо группу домена
Например так

# User privilege specification
root ALL=(ALL) ALL
domain-user ALL=(ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
%support ALL=(ALL) ALL

Здесь support и domain-user доменная группа и пользователь.

Настройка окончена !

Комментариев нет:

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