Samba
Заимствованно отсюда
Исторически сложилось, что у нас на физическом факультете АлтГПА централизованная база пользователей хранится в Windows-домене (на момент написания этой статьи в Active Directory на Microsoft Windows 2003 Server и в домене на базе Windows NT 4.0 Server). Поэтому для Linux-машин решено было брать пользователей из доменов, чтобы минимизировать зоопарк из учетных записей. Решение этой задачи возможно через LDAP и winbind. Мы использовали второй вариант – авторизацию пользователей через winbind.
Для определенности примем, что Windows-сервер является контроллером домена и имеет следующие настройки:
- Учетная запись администратора домена: adsadmin
- Имя домена: physnet
- Полное имя домена: physnet.local
- Имя контроллера домена (hostname): pserv
- IP-адрес контроллера домена: 10.2.0.2
Linux-машина имеет имя debi и IP-адрес у ней статический. DNS настроен и работает.
Ставим на Linux из-под учетной записи суперпользователя Samba, winbind и Kerberos:
# apt-get install samba winbind krb5-doc krb5-user krb5-config
После установки пакетов настраиваем Kerberos, который нам потребуется для проведения авторизации в Active Directory, для этого правим файл /etc/krb5.conf:
[realms] PHYSNET.LOCAL = { kdc = pserv.physnet.local admin_server = pserv.physnet.local }
В принципе в этом файле pserv.physnet.local можно заменить на его IP-адрес – 10.2.0.2. Далее запускаем команду:
# kinit adsadmin@PHYSNET.LOCAL
Если получаем на это ошибку вида kinit(v5): Cannot find KDC for requested realm while getting initial credentials или kinit(v5): KDC reply did not match expectations while getting initial credentials, то скорее всего вы неправильно настроили Kerberos – просмотрите настройки еще раз. Если все прошло без ошибок, то тестируем работу Kerberos’а:
# klist
Если на этот тест получаем ошибку вида kinit(v5): Clock skew too great while getting initial credentials, то это означает, что часы на windows-сервере и linux-машине показывают разное время. Их нужно синхронизировать, а для этого поставить и настроить пакет ntpdate:
# apt-get install ntpdate
Конфигурационный файл ntpdate обычно можно найти в папке /etc (/etc/ntp.conf) или /etc/default (/etc/default/ntpdate). После правки конфигурационных файлов нужно перестартовать ntpdate:
# /etc/init.d/ntpdate restart
Теперь настраиваем winbind, для этого правим файл /etc/samba/smb.conf. Его содержимое для нашего случая пример такой вид:
[global] security = ads password server = * encrypt passwords = yes workgroup = PHYSNET realm = PHYSNET.LOCAL netbios name = debi idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes template homedir = /home/%D/%U template shell = /bin/bash
Теперь перестартовываем samba и winbind:
# /etc/init.d/samba restart # /etc/init.d/winbind restart
Добавляем нашу linux-машину в домен:
# net ads join -W physnet -U adsadmin # /etc/init.d/winbind restart
Если все прошло успешно, то команда
# wbinfo -t
должна дать ответ checking the trust secret via RPC calls succeeded. Проверить список доступных групп и пользователей домена можно командами:
# wbinfo -g # wbinfo -u
Теперь добавляем авторизацию. Файл /etc/nsswitch.conf примет примерно такой вид:
passwd: files winbind group: files winbind shadow: files winbind
Модифицируем PAM. Файл /etc/pam.d/common-auth после правки примет примерно такой вид:
auth sufficient pam_winbind.so auth required pam_unix.so nullok_secure use_first_pass
/etc/pam.d/common-account:
account sufficient pam_winbind.so account required pam_unix.so nullok_secure
/etc/pam.d/common-password:
password sufficient pam_winbind.so password required pam_unix.so nullok obscure min=4 max=8 md5
/etc/pam.d/common-session:
session required pam_unix.so session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
После этого создаем в папке /home папку PHYSNET:
# mkdir /home/PHYSNET
Все, теперь можно перегрузить linux-машину и опробовать доменную авторизацию.
Замечание 1: Если у вас в сети несколько доменов с доверительными настройками (trusted), то либо придется по каждому имени домена в папке /home создавать папку вида /home/ДОМЕН или запретить trusted-отношения между доменами в файле конфигурации samba (allow trusted domains = no в smb.conf)
Замечание 2: Для авторизации доменного пользователя в качестве логина нужно будет писать ДОМЕН\пользователь (Например PHYSNET\adsuser)
Замечание 3: В случае использования DHCP нужно будет поправить runlevels для скриптов запуска samba, winbind, ifupdown и networking. Для этого достаточно, чтобы в /etc/rc2.d стартовала сеть (@S16networking, @S16ifupdown) ранее winbind и samba (@S20samba, @S20winbind).