Samba

Материал из First-Leon
Перейти к навигации Перейти к поиску

Заимствованно отсюда


Исторически сложилось, что у нас на физическом факультете АлтГПА централизованная база пользователей хранится в 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).