Страдания по Samba. часть 2.
Нужен файловый сервер Linux в Домене Windows 2003.
Исходные данные:
ОС — Fedora 8
пакеты :
# yum list installed | grep samba
# yum list installed | grep krb5*
krb5-devel.i386 1.6.2-14.fc8 installed
krb5-libs.i386 1.6.2-14.fc8 installed
krb5-workstation.i386 1.6.2-14.fc8 installed
krb5-workstation-clients.i386 1.6.2-14.fc8 installed
krb5-workstation-servers.i386 1.6.2-14.fc8 installed
pam_krb5.i386 2.2.18-1 installed
Вводные данные:
mynet.ru — Домен
domain.mynet.ru -контроллер домена
10.0.1.50 — ип адреса сервера домена
Samba должна быть собрана с поддержкой LDAP, Kerberos (MIT либо Heimdal) и, желательно, PAM
Проверить это можно следующими командами:
#smbd -b | grep LDAP
#smbd -b | grep KRB
#smbd -b | grep PAM
Файл /etc/samba/smb.conf должен содержать как минимум:
realm = DOMAIN.LOCAL.NET
security = ADS
encrypt passwords = yes
Параметр realm указывает на имя домена. Иногда, не разобравшись, в качестве значения realm указывают FQDN DC. Это неверно, и вот почему: при установке AD и сопутствующей настройке DNS автоматически создает запись типа SRV в DNS зоне _kerberos._tcp.mynet.ru для каждого KDC (Kerberos Key Distribution Center) в домене. Очевидно, что если вы укажете в качестве значения realm имя своего контроллера домена, то нужная DNS запись будет искаться в зоне _kerberos._tcp.domain.mynet.ru. В некоторых случаях может понадобится явно задать параметр password server. Это нужно, когда Samba не может самостоятельно обнаружить AD DC, используя параметр realm. Происходит это, как правило, либо при некорректной настройке MS DNS сервера, либо при использовании не MS DNS серверов, несоответствующих требованиям AD, вроде старых версий BIND.
В одном из источников прочитал:
Во всех без исключения статьях приводится образец конфигурации /etc/krb5.conf. На самом деле в данном случае и для MIT и для Heimdal Kerberos этот файл не нужен вообще. Все более или менее свежие библиотеки Kerberos cамостоятельно способны обнаружить KDC, при корректно настроеном DNS (но не все).
Я лично не пробовал так, и все время переписывал конфигурационный файл krb5.conf.
Мои настройки:
# cat /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MYNET.RU
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
clock_skew = 300
forwardable = yes
[realms]
MYNET.RU = {
kdc = DOMAIN.MYNET.RU:88
admin_server = DOMAIN.MYNET.RU :749
default_domain = MYNET.RU
}
10.0.1.50 = {
kdc = 10.0.1.50
}
[domain_realm]
.mynet.ru = MYNET.RU
mynet.ru = MYET.RU
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
10.0.1.50 — ип адрес контролера домена.
Чтобы проверить, работает ли Kerberos выполните:
bez — администратор домена. При успехе ничего не выводиться.
Но могут возникнуть проблемы:
1. Неправильно настроенный DNS. (Всегда проверяйте перед настройкой).
2. Расхождение во времени с KDC. Выводиться сообщение такого вида :
«kinit(v5): Clock skew too great while getting initial credentials»
Допустимые расхождения по-умолчанию составляет 5 минут. Изменить это значение можно в политиках безопасности домена, но правильнее все же настроить на машине с Samba синхронизацию времени с DC.
Для синхронизации времени нужно установить пакет ntpdate.
3. Указание параметра realm в нижнем регистре. Ошибка такого вида:
«Cannot find KDC for requested realm while getting initial credentials»
Еще рекомендуют, чтоб для KDC работал поиск в обратной зоне DNS. В документации указано, что DNS имя, которое выдается на nslookup ip_adress_of_kdc обязательно должно совпадать с NetBIOS именем KDC. Я это пропускал, но может кому то понадобиться. Хотя Samba может работать в домене состоящем только из Windows 2000/XP/2003 вообще с отключенным NetBIOS, соответственно имена NetBIOS использоваться не будут.
Настраиваем SAMBA.
Привожу свой конфиг:
# cat /etc/samba/smb.conf
[global]
log file = /var/log/samba/log.%m
idmap gid = 10000-20000
idmap uid = 10000-20000
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
auth methods = winbind
encrypt passwords = yes
realm = DOMAIN.MYNET.RU
winbind use default domain = yes
case sensitive = no
dns proxy = no
netbios name = vmtestnw
server string = vmtestnw work
password server = 10.0.1.50
default = public
dos charset = 866
local master = no
workgroup = MYNET
os level = 20
#тут мы показываем, что используем AD
security = ads
unix charset = KOI8-R
max log size = 150
template shell = /bin/bash
template homedir = /home/samba/%D/%U
[homes]
comment = Home Directories
browseable = no
writable = yes
; valid users = %S
; valid users = MYDOMAIN’%S
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes
[public]
guest ok = Yes
writable = yes
writeable = yes
public = yes
path = /opt/pub
write list = nobody
Пояснения:
password server = 10.0.1.50
параметр определяет имена или адреса серверов, на которых Samba будет авторизировать пользователей, которые обращаются к ее ресурсам. В данном параметре можно указывать доменные имена хостов, их IP-адреса или символ «*». В последнем случае Samba сама будет определять какой сервер выбрать для авторизации доменных пользователей.
realm = DOMAIN.MYNET.RU
имя домена, которое используется в нашей сети.
ВНИМАНИЕ! Имя должно быть таким же, как и прописано в
/etc/krb5.conf и набрано в таком же регистре!
security=ADS — тип авторизации на сервере, Так как у нас
AD-домен, то и тип авторизации — для AD
encrypt passwords = Yes — разрешить шифрование паролей.
auth methods = winbind — указывает Samba использовать модуль
winbind при авторизации пользователей.
idmap uid = 10000-20000
idmap gid = 10000-20000
Диапазон идентификаторов пользователя и группы, которые будут выделяться при отображении Win-пользователей с их SID (Secure ID) в UNIX. Диапазон не должен включать UID и GID существующих в Linux пользователей и групп.
winbind enum users = Yes < Убрал
winbind enum groups = Yes < Убрал
winbind use default domain = Yes
winbind refresh tickets = Yes < Убрал
Дает указание Samba-модулю winbind вести учет пользователей и групп вместо локальных системных вызовов setpwent(), getpwent(), рассматривать пользователей без доменного имени перед именем пользователя (DOMAIN’user) как пользователей, принадлежащих к данному домену и производить обновление Kerberos-билетов с помощью модуля winbind.
os level = 20
Указывает «вес» Samba-сервера при участи в выборах обозревателя сети (не
путать с DNS). Обычно основным обозревателем является контроллер домена,
но это не обязательно.
hide unreadable = Yes — прятать от пользователей файлы и
каталоги, для которых у них нет прав чтения. (убрано)
некоторые маны pекомендуют включать
; winbind separator = +
но многие утверждают Дефолтный сепаpатоp ’’’ куда удобнее для любого виндузятника. А pаботает не хуже.
template homedir = /home/%D/%U
template shell = /bin/bash
Если есть желание давать юзвеpям консоль
winbind pеплициpует также ВСЕ домены, с котоpыми налажены тpасты.
Отключается при желании: allow trusted domains = no
По пользовательским шарам:
Доступ к шарам :
valid users = @»YARNET’Domain Users»
valid users = YARNET’xxx
По умолчанию, Самба 3.0 имеет ту же самую семантику как Сервер Windows NT не чувствителен к регистру, но сохраняет регистр имен файлов. Поскольку специальный регистр для каталогов с большими количеством файлов, если варианты опции регистра установлены следующим образом «case sensitive = yes», «case preserve = no», «short preserve case = no» тогда «default case» опция будет применена и изменит все имена файла, посланные от клиента при доступе к этому ресурсу.
Самбе можно пpикpутить для удаленного администpиpования шаp MS management console, но ей-богу, пpоще поднять swat. И удобнее — через mmc можно рулить только созданием/удалением шар, но никак не параметрами самбы. (Не пробовал)
Информация по символам подстановки переменных в Samba:
%S Имя текущей службы
%P Корневой каталог текущей службы
%u Пользователь текущей службы
%g Основная группа %u
%U Имя пользователя для сеанса (может отличаться от имени,запрошенного клиентом)
%G Основная группа %U
%H Домашний каталог пользователя
%v Версия Samba
%h Имя хоста, на котором работает Samba
%m NetBIOS-имя компьютера-клиента
%L NetBIOS имя сервера
%M Имя хоста для компьютера-клиента
%N Имя NIS-сервера домашних каталогов. Значение определяется при помощи файла настройки системы NIS auto map. Если вы скомпилировали Samba без automount, то значение совпадает с установленным для сервера NetBIOS именем
%p Путь к домашнему каталогу службы. Определяется при помощи файла настройки системы NIS auto map, как %N:%p
%R Выбранный после установления соединения уровень протокола
%d Номер текущего серверного процесса
%a Операционная система клиента (значение может быть неверным)
%I IP-адрес клиентской машины
%T Текущие дата и время
%D имя домена или рабочей группы текущего пользователя.
Более подробно можно прочитать понятное дело — man smb.conf.
Проверяем конфигурацию SAMBA командой testparm
Для того чтобы, можно было входить в Linux машину под пользователями домена, необходимо, произвести следующие настройки:
а) Остановим сервер samba и winbind
# service smb stop
# service winbind stop
б) Добавим в файл /etc/hosts
10.0.1.50 domain #описание PDC
ВНИМАНИЕ! В конце последней строки ОБЯЗАТЕЛЬНО необходимо
сделать перевод на новую строку, иначе в будущем возможны проблемы при
подключении сервера к домену.
в) Правим nsswitch.conf и lmhost
Добавляем winbind
# cat /etc/samba/lmhosts
127.0.0.1 localhost
10.0.1.50 domain
# cat /etc/nsswitch.conf
# An example Name Service Switch config file. This file should be
# sorted with the most-used services at the beginning.
#
# The entry ’[NOTFOUND=return]’ means that the search for an
# entry should stop if the search in the previous entry turned
# up nothing. Note that if the search failed due to some other reason
# (like no NIS server responding) then the search continues with the
# next entry.
#
# Legal entries are:
#
# nisplus or nis+ Use NIS+ (NIS version 3)
# nis or yp Use NIS (NIS version 2), also called YP
# dns Use DNS (Domain Name Service)
# files Use the local files
# db Use the local database (.db) files
# compat Use NIS on compat mode
# hesiod Use Hesiod for user lookups
# [NOTFOUND=return] Stop searching if not found so far
#
# To use db, put the «db» in front of «files» for entries you want to be
# looked up first in the databases
#
# Example:
#passwd: db files nisplus nis
#shadow: db files nisplus nis
#group: db files nisplus nis
passwd: files winbind
shadow: files winbind
group: files winbind
#hosts: db files nisplus nis dns
hosts: files dns
# Example — obey only what nisplus tells us…
#services: nisplus [NOTFOUND=return] files
#networks: nisplus [NOTFOUND=return] files
#protocols: nisplus [NOTFOUND=return] files
#rpc: nisplus [NOTFOUND=return] files
#ethers: nisplus [NOTFOUND=return] files
#netmasks: nisplus [NOTFOUND=return] files
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
netgroup: files
publickey: nisplus
automount: files
aliases: files nisplus
г) идем в каталог /etc/pam.d
добавляем файл common-account
# touch common-account
В нем прописываем: account sufficient pam_winbind.so
д) в этом же каталоге необходимо отредактировать файл
system-auth-ac — его приводим к следующему виду:
Привожу свой файл:
# cat /etc/pam.d/system-auth-ac
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/$ISA/pam_env.so
auth sufficient /lib/security/$ISA/pam_winbind.so
auth sufficient /lib/security/$ISA/pam_unix.so likeauth nullok use_first_pass
auth required /lib/security/$ISA/pam_deny.so
account required /lib/security/$ISA/pam_unix.so
account sufficient /lib/security/$ISA/pam_winbind.so
account sufficient /lib/security/$ISA/pam_succeed_if.so uid < 100 quiet
account required /lib/security/$ISA/pam_permit.so
password requisite /lib/security/$ISA/pam_cracklib.so retry=3
password sufficient /lib/security/$ISA/pam_winbind.so
password sufficient /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password required /lib/security/$ISA/pam_deny.so
session required /lib/security/$ISA/pam_mkhomedir.so skel=/etc/skel umask=0077
session required /lib/security/$ISA/pam_limits.so
session required /lib/security/$ISA/pam_unix.so
e) Перед добавлением машины в домен обязательно надо выполнить
следующую команду синхронизации времени на машине:
# net time set
ё)Добавляем машину в домен:
net join ads -U user%password
net join ads -U admin
у некоторых net ads join -U Admin, как я делал не помню. Может можно и так и сяк
Ошибки:
# net join ads -U bezsss
Password:
Could not connect to server DOMAIN
The username or password was not correct.
Connection failed: NT_STATUS_LOGON_FAILURE
—> При неправильном пароли или пользователи.
Если такая машина уже существует увидим —
Failed to set password for machine account (NT_STATUS_ACCESS_DENIED)
Failed to join domain !
Если будет такая ошибка содержащая что то про principal name, а в AD появится учетка, но со знаком красного крестика значит смотри и проверяй /etc/hosts
При рассинхронизации времени с контролером возможно появление ошибки из-за несовпдаения времени .
Запустим samba и winbind
# service smb start
# service winbind start
Проверяем Winbind
# wbinfo -p
ответ : Ping to winbindd succeeded on fd 4
Устанавливаем авторизацию Winbind — a !!!!
Очень важное мероприятие. Не во всех статьях по данной теме встречал.
Без этой процедуры не возможно войти по доменному пользователю. Не создаются
домашние каталоги.
# wbinfo —set-auth-user=Administartorr
Продолжаем проверку работы винбинда.
# wbinfo -t
Если все правильно, получаем ответ: checking the trust secret via RPC calls succeeded.
Проверить список доступных групп и пользователей домена можно командами:
# wbinfo -g
# wbinfo -u
Выводит список пользователей и групп.
Проверяем аутентификацию в домене:
#wbinfo -a <имя_юзера>%<пароль_юзера>
#wbinfo -a irina%321
Ответ:
plaintext password authentification succeeded
challenge/response password authentification succeeded
Проверка распознавания доменных пользователей:
#id Administrator
Ответ: uid=10000(Administrator) gid=10005(пользователи домена)
groups=10005(пользователи домена) , 10004(администраторы домена)
У меня вместо русских аброказявка, что то с кодировкой видно.
Насчет PAM некоторое дополнение:
# cat common-account
account sufficient pam_winbind.so
account required pam_unix.so nullok_secure <—- Добавил строчку.
В некоторых источниках пишут о том, что нужно создать следующие файлы
в директории /etc/pam.d/.
1) !!! /etc/pam.d/common-account должны содержать только следующие строки:
account sufficient pam_winbind.so
account required pam_unix.so
2) !!! в /etc/pam.d/common-auth должно быть только это:
auth sufficient pam_winbind.so
auth required pam_unix.so nullok_secure use_first_pass
3) убедитесь, что /etc/pam.d/common-session содержит следующие строки:
session required pam_mkhomedir.so umask=0022 skel=/etc/skel
В других статьях рекомендуют так:
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
или
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
4) Поправим the /etc/pam.d/common-password так, чтобы параметр max был 50,
в качестве примера:
password required pam_unix.so nullok obscure min=4 max=50 md5
В других статьях:
password sufficient pam_unix.so nullok obscure md5
password sufficient pam_winbind.so
или
password sufficient pam_winbind.so
password required pam_unix.so nullok obscure min=4 max=8 md5
В некоторых источниках пишут о замене информации в следующих файлах относящихся к
PAM.
К примеру :
Файл /etc/pam.d/samba
Редактируем /etc/pam.d/login :
#%PAM-1.0
auth required pam_securetty.so
auth sufficient pam_winbind.so
auth sufficient pam_unix.so use_first_pass
auth required pam_stack.so service=system-auth
auth required pam_nologin.so
account sufficient pam_winbind.so
account required pam_stack.so service=system-auth
password required pam_stack.so service=system-auth
session required pam_stack.so service=system-auth
session optional pam_console.so
Для того, чтобы можно было использовать доменные аккаунты для входа через ssh в файле /etc/pam.d/sshd делаем изменения аналогично /etc/pam.d/login..
Так же важное дополнение: Домменные пользователи не являются root — овыми для данной машины. Для того чтобы были такие права необходимо править — /etc/samba/smbusers.
Для сопоставления (Map) групп домена и групп UNIX (Делал это давно при создании PDC на самбе, в одной статейке рекомендовали и при членстве самбы в домене.:
# net groupmap modify ntgroup=»Domain Admins» unixgroup=root
# net groupmap modify ntgroup=»Domain Users» unixgroup=users
# net groupmap modify ntgroup=»Domain Guests» unixgroup=nobody
Я создал бы новые группы в Linux е. И зделал бы сопоставление с ними.
Еще Полезные комманды:
$ smbclient -N -L 10.0.0.117
— показывает ресурсы компьютера с адресом 10.0.0.117
$ smbclient //10.0.0.117/common
Вход в расшаренную директорию. Пользователь unix от которого выполняется команда должен быть зарегистрирован в домене.
# net ads join -U pm -d 3
— Добавить пользователя pm
Источники: