Входим в Linux под учетной записью из домена NT

постановка задачи

Имеется сеть, организованная в домен Windows NT (для определенности, с именем FIRST). Так же имеется PDC (Primary Domain Controller), именуемый main. Установив на один (или несколько) компьютеров сети ОС Linux, мы хотим, чтобы пользователи входили в Linux под учетными записями, которые хранятся на PDC. Объяснять для чего это нужно я в этой статье не берусь.

отказ от ответственности

Все описанное ниже представляет собой лишь последовательность моих действий и ни в коем случае не претендует на полноту и исключительность. Нет ни какой гарантии, что у вас все будет работать точно так же, как и у меня, поэтому вся ответственность за выполняемые вами действия возлагается только на вас и никого более. Я лишь могу гарантировать, что описанная ниже конфигурация работает на моей машине с ОС ASPLinux 7.2, которая изрядно мной изменена (также описанная последовательность действий проверена на ASPLinux 7.3 сразу после установки).

варианты решения и что для этого нужно

Для решения поставленной задачи можно воспользоваться двумя методами. Выбор какого-то конкретного метода зависит от ваших задач и предпочтений.
1. Метод с использованием модуля pam_smb. При использовании данного метода необходим PAM-модуль (Pluggable Authentication Modules), который можно установить как из RPM-пакета (в моем случае pam_smb-1.1.6), так и собрав его вручную из исходных текстов. Исходные тексты можно найти на pamsmb.sourceforge.net.
2. Метод с использованием утилиты winbind. В данном случае будет необходим пакет Samba. Что касается меня, то я использовал RPM-пакеты, входящие в дистрибутив ASPLinux 7.3 (это samba-2.2.3a, samba-common-2.2.3a и samba-client-2.2.3a). Если вы будете собирать пакет Samba из исходников самостоятельно, то вам необходимо включить утилиту winbind, а так же поддержку PAM.

сравнение описанных методов

Прежде чем перейти к действиям, предлагаю вашему вниманию короткое сравнение описанных ниже методов решения задачи. Я не буду глубоко вдаваться в подробности, а приведу только самые явные преимущества и недостатки каждого из методов.
1. Метод с модулем pam_smb.
Преимущества: прост в реализации, не требует запуска различных демонов, учетная запись пользователя имеет такой же вид, как в NT-домене.
Недостатки: при наличии большого количества пользователей домена, которые работают на одном и том же компьютере, вам придется вести учетные записи этих пользователей вручную.
2. Метод с утилитой winbind.
Преимущества: лишен недостатка, возникающего при большом количестве пользователей; позволяет разрешать сетевые имена компьютеров (NetBIOS-имена).
Недостатки: сравнительная сложность настройки, необходим запущенный демон — winbind; к учетной записи добавляется еще наименование домена (удлинение имени учетной записи).

инструкции к варианту с pam_smb

1. Правим /etc/pam_smb.conf.
Файл /etc/pam_smb.conf содержит три строки: в первой строке указывается имя домена, в котором предполагается производить авторизацию, вторая и третья строки — имена PDC и SDC (Secondary Domain Controller) соответственно. В нашем случае этот файл должен выглядеть следующим образом:

FIRST
main

Внимание: В данном файле нет комментариев! В нем должно содержаться только три строки!

2. Правим конфигурационные файлы PAM.
Данные файлы хранятся в /etc/pam.d/. Имя файла конфигурации похоже или прямо соответствует приложению, к которому данная конфигурация относится. В моем случае, т.к. я использую для авторизации KDM (KDE Display Manager), я правил файл /etc/pam.d/kde. Вносим следующие изменения:
Заменяем группу модулей с типом auth на:

auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_smb_auth.so
auth required/lib/security/pam_nologin.so

Заменяем группу модулей с типом account на:

account required /lib/security/pam_pwdb.so

Заменяем группу модулей с типом password на:

password required /lib/security/pam_pwdb.so shadow nullok use_authtok

Заменяем группу модулей с типом session на:

session required /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0077
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_console.so

3. Добавление учетной записи в /etc/passwd.
Для использования данного механизма авторизации вам необходимо добавить в файл /etc/passwd учетную запись, аналогичную учетной записи домена Windows NT (можно воспользоваться командой adduser). При этом вы должны задать все необходимые атрибуты (домашний каталог, группу, оболочку (shell) и т.п.). Пароль указывать нет необходимости, поскольку он будет сверяться с информацией, хранящейся на сервере.
4. Попытка авторизации.
В моем случае, перезапустив KDM, в строке login я ввожу sloth (где sloth — моя учетная запись). В поле password, ввожу пароль, соответсвующий моей учетной записи в домене Windows NT.
Также вы можете авторизироваться под учетной записью, которая является локальной (не входящей в Windows NT домен) — под любой, кроме учетной записи root.

инструкции к варианту с winbind

1. Правим smb.conf.
У меня данный файл находится /etc/samba/smb.conf. Могу предположить, что у вас он находится там же. В этот файл вносим следующие изменения и дополнения:

winbind separator = +
template shell = /bin/bash
template homedir = /home/%U
winbind uid = 10000-20000
winbind gid = 10000-20000

Это то, что, скорее всего, вам придется добавлять самостоятельно. После чего изменяем уже имеющиеся параметры:

workgroup = FIRST ; имя нашего домена
security = domain
password server = main ; имя PDC, предварительно внесенное в файл /etc/samba/lmhosts
encrypt passwords =yes

Все остальные параметры были оставлены по умолчанию.

2. Правим конфигурационные файлы PAM.
Данные файлы хранятся в /etc/pam.d/. Имя файла конфигурации похоже или прямо соответствует приложению, к которому данная конфигурация относится. В моем случае, т.к. я использую для авторизации KDM (KDE Display Manager), я правил файл /etc/pam.d/kde. Вносим следующие изменения:

Заменяем группу модулей с типом auth на:

auth required /lib/security/pam_securetty.so
auth required/lib/security/pam_nologin.so
auth sufficient /lib/security/pam_winbind.so
auth required /lib/security/pam_pwdb.so use_first_pass shadow nullok

Заменяем группу модулей с типом account на:

account required /lib/security/pam_winbind.so

Заменяем группу модулей с типом password на:

password required /lib/security/pam_winbind.so

Заменяем группу модулей с типом session на:

session required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_mkhomedir.so skel=/etc/skel/ umask=0077
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_console.so

3. Внесение изменений в файл /etc/nsswitch.conf
Добавляем слово winbind в следующие строки:

passwd: files winbind
group: files winbind

4. Перезапуск (запуск) сервисов smb и winbind.
Для перезапуска отконфигурированных сервисов выполняем из под пользователя root:

# /etc/init.d/smb restart
# /etc/init.d/winbind restart

Если при останове сервисов возникли ошибки, то значит, скорее всего, они не были запущены. Чтобы сервисы запускались при загрузке компьютера необходимо добавить символьные ссылки в /etc/rc.d/rcX.d/, где X соответсвует вашему уровню запуска (в моем случае это 5). Перейдя в /etc/rc.d/rc5.d/ я выполняю следующие действия:

# ln -s ../init.d/smb S91smb
# ln -s ../init.d/winbind S91winbind

Данные действия выполняются с правами пользователя root.

5. Присоединение компьютера к домену Windows NT.
Выполняем следующую команду с правами root:

# smbpasswd -j FIRST -r main -U Administrator

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

Joined domain FIRST.

Для проверки успешности наших действий можно запустить команду:

# wbinfo -t

Которая, при удачном выполнении, должна выдать:

Secret is good

6. Попытка авторизации.
В моем случае, перезапустив KDM, в строке login я ввожу FIRST+sloth (где FIRST — имя домена, «+» — разделитель, указанный в файле smb.conf, sloth — моя учетная запись. Если в качестве разделителя вы планируете использовать другие символы, к примеру, "\", то я рекомендую вам в конфигурационном файле (smb.conf) указывать его в двойных кавычках.
В поле password, ввожу пароль, соответсвующий моей учетной записи в домене Windows NT. Также вы можете авторизироваться под учетной записью, которая является локальной (информация о ней храниться на вашем компьютере), под любой, кроме учетной записи root.

использованные документы

man 8 pam
man 8 winbind
man 1 wbinfo
man 5 smb.conf
man 8 smbpasswd

Федотов Алексей aka Sloth



Сетевые решения. Статья была опубликована в номере 08 за 2003 год в рубрике sysadmin

©1999-2024 Сетевые решения