Входим в 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
Имеется сеть, организованная в домен 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