|
ВНИМАНИЕ ! |
Настройка взаимодействия Linux с Windows. Samba
| 2010.03.06 |
версия 1.04
|
Организовать доступ к ресурсам Windows из Linux и
обратно можно либо через NFS, либо через Samba. Мы установим второе,
если ядро поддерживает samba, то можно монтировать папки как и всё
остальное. Предварительно создав, например, каталог /mnt/common подключаем сетевой
диск //10.0.0.117/common находящийся
на компьютере с Windows:
# mount -t smbfs //10.0.0.117/common
/mnt/common
После выполнения этой инструкции мы будем иметь в сети файловый сервер под управлением ОС Линукс, входящий в домен Windows 2003 и ничем не отличающийся от файлового сервера под Windows. Пользователи домена смогут обращаться к его ресурсам под своими учётными записями. Доступ регулируется группами домена AD.
По этой инструкции настраивались Debian (4, 5), Ubuntu 9.10,
создавалась она на основе официальной
документации и многих рекомендаций и инструкций из Интернета.
Остальные Linux'ы настраиваются сходным образом.
Для Alt Linux
написана хорошая инструкция http://freesource.info/wiki/AltLinux/Dokumentacija/SambaInWin2kDomain?v=omo&
Сделаем
предварительную проверку:
- Проверяем что Samba собрана с
поддержкой Kerberos:
# smbd -b | grep KRB
HAVE_KRB5_H
HAVE_ADDRTYPE_IN_KRB5_ADDRESS
HAVE_DECODE_KRB5_AP_REQ
HAVE_KRB5
HAVE_KRB5_AUTH_CON_SETUSERUSERKEY
HAVE_KRB5_C_ENCTYPE_COMPARE
HAVE_KRB5_C_VERIFY_CHECKSUM
HAVE_KRB5_ENCRYPT_BLOCK
HAVE_KRB5_ENCRYPT_DATA
HAVE_KRB5_FREE_AP_REQ
HAVE_KRB5_FREE_DATA_CONTENTS
HAVE_KRB5_FREE_KEYTAB_ENTRY_CONTENTS
HAVE_KRB5_FREE_KTYPES
HAVE_KRB5_FREE_UNPARSED_NAME
HAVE_KRB5_GET_PERMITTED_ENCTYPES
HAVE_KRB5_GET_RENEWED_CREDS
HAVE_KRB5_KEYBLOCK_IN_CREDS
HAVE_KRB5_KEYTAB_ENTRY_KEY
HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM
HAVE_KRB5_KT_FREE_ENTRY
HAVE_KRB5_LOCATE_KDC
HAVE_KRB5_MK_REQ_EXTENDED
HAVE_KRB5_PRINCIPAL2SALT
HAVE_KRB5_PRINC_COMPONENT
HAVE_KRB5_SET_DEFAULT_TGS_KTYPES
HAVE_KRB5_SET_REAL_TIME
HAVE_KRB5_STRING_TO_KEY
HAVE_KRB5_TKT_ENC_PART2
HAVE_KRB5_USE_ENCTYPE
HAVE_LIBGSSAPI_KRB5
HAVE_LIBKRB5
HAVE_MAGIC_IN_KRB5_ADDRESS
HAVE_TICKET_POINTER_IN_KRB5_AP_REQ
KRB5_VERIFY_CHECKSUM_ARGS
- Также проверим что поддерживается LDAP
# smbd -b | grep LDAP
HAVE_LDAP_H
HAVE_LDAP
HAVE_LDAP_ADD_RESULT_ENTRY
HAVE_LDAP_DN2AD_CANONICAL
HAVE_LDAP_INIT
HAVE_LDAP_INITIALIZE
HAVE_LDAP_SET_REBIND_PROC
HAVE_LIBLDAP
LDAP_SET_REBIND_PROC_ARGS
- Для корректной работы Samba в домене
Windows 2003 нужны версии MIT Kerberos version
>=1.3.1. Проверим:
# dpkg -l | grep krb
ii
krb5-config
1.22
Configuration files for Kerberos Version 5
ii
libkrb53
1.6.dfsg.4~beta1-5lenny1 MIT Kerberos runtime
libraries
- Для корректной работы с Windows 2008 серверами сама Samba
должна быть достаточно свежая:
# smbd -V
Version 3.2.5
- Устанавливаем сервер и клиент samba.
# apt-get
install samba
samba-client krb5-config
При неастройке krb5-config лучше
указывать IP адреса контроллеров домена, а не их DNS имена.
- Для администрирования Samba удобно использовать SWAT или webmin, которые предоставляют веб интерфейс. Попасть на него можно по адресу http://server_address:901 и https://server_address:10000 соответственно, указав для соединения пользователя root. Но будьте осторожны - он полностью переписывает smb.conf и некоторые параметры может просто игнорировать. Лучше предварительно сделать резервную копию файла. Я сначала использовал SWAT, а затем дорабатывал конфигурационный файл /etc/samba/smb.conf руками. Можно сразуВот, что осталось у меня не закоментированным (принтеры к этому серверу не подключены):
[global]
unix charset = LOCALE
realm = WORKGROUP.DOMAIN.LOCAL
server string = Storage samba server
interfaces = eth0
bind interfaces only = Yes
security = ADS
obey pam restrictions = Yes
passdb backend = tdbsam
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\sUNIX\spassword:* %n\n
*Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
log level = 3
syslog = 0
log file = /var/log/samba/log.%m
max log size = 100
name resolve order = lmhosts host wins bcast
printcap name = CUPS
local master = No
domain master = No
dns proxy =
No
ldap ssl = no
panic action = /usr/share/samba/panic-action %d
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
invalid users = root
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
[distrib]
path = /data/distrib
valid users = @WORKGROUP\DistribGroup
write list = @WORKGROUP\DistribGroup
read only = No
create mask = 0777
directory mask = 0777
[backup]
path = /data/backup
valid users = @WORKGROUP\BackupGroup
write list = @WORKGROUP\BackupGroup
read only = No
create mask = 0777
directory mask = 0777
Мы описали два общих каталога:
backup - доступ имеют только пользователи входящие в группу BackupGroup
в Active Directory. Они могут создавать и удалять
файлы/каталоги
distrib - доступ имеют все пользователи входящие в группу DistribGroup
в Active Directory
В приведённой конфигурации подразумевается, что eth0 - это сетевой интерфейс в локальную сеть, где домен имеет полное имя WORKGROUP.DOMAIN.LOCAL
- редактируем /etc/nsswitch:
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns wins
networks: files dns
protocols: files
services: files
ethers: files
rpc: files
netgroup: files
- Проверим, что в /etc/hosts есть корректная запись для нашего сервера, также можно добавить записи для контроллеров доменов:
10.0.0.15
storage.domain.local
storage
10.0.0.85 dcwg1.domain.local
dcwg1
10.0.0.245 dcwg2.domain.local
dcwg2
- Удаляем если есть (или переносим в резервные копии) файл
/etc/samba/secrets.tdb и все файлы из /var/lib/samba/*.tdb
- Проверяем конфигурацию (не обязательно): testparm -s
#
В Ubunto testparm находится в
пакете samba-common-bin
- Проверим как Samba-3 winbind общается с
контроллером домена Active Directory посредством
протокола Kerberos:
# net ads info
LDAP server: 10.0.0.85
LDAP server name: dcwg1.workgroup.domain.local
Realm: WORKGROUP.DOMAIN.LOCAL
Bind Path: dc=WORKGROUP,dc=DOMAIN,dc=LOCAL
LDAP port: 389
Server time: Срд, 03 Мар 2010 13:12:14 NOVT
KDC server: 10.0.0.85
Server time offset: -5
NTPSERVERS="10.0.0.85 10.0.0.245"
- В Debian (и его сыновьях, таких как Ubuntu) при установке пакета krb5-cofig сразу предлагается его настройка. Лучше всего попробовать работать с этими настройками, но если ничего предложено не было или мы хотим что-то изменить, то редактируем /etc/krb5.conf (я для более стабильной работы использовал ip адреса вместо имён серверов):
[libdefaults]
default_realm = WORKGROUP.DOMAIN.LOCAL
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
#
#...
#
# The following libdefaults parameters are only for Heimdal Kerberos.
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
fcc-mit-ticketflags = true
[realms]
WORKGROUP.DOMAIN.LOCAL
= {
kdc = 10.0.0.85
kdc = 10.0.0.245
admin_server = 10.0.0.85
}
#
#...
#
[login]
krb4_convert = true
krb4_get_tickets = false
- Присоединяемся к домену:
# net ads join -UAdministrator
Administrator's password:
Using short domain name -- WORKGROUP
Joined 'STORAGE' to realm 'WORKGROUP.DOMAIN.LOCAL'
Всё, компьютер включен в домен, что можно проверить на контроллере. Даже если после приведённых строк получили следующие:
[2010/03/06 15:04:00, 0] libads/kerberos.c:332(ads_kinit_password)
kerberos_kinit_password STORAGE$@WORKGROUP.DOMAIN.LOCAL failed: Client
not found in
Kerberos
database
DNS update failed!
- Запускаем
samba и winbind:
# /etc/init.d/samba start
# /etc/init.d/winbind start
- Для проверки правильно подключение к домену можно посмотреть
список
пользователей и групп домена (не обязательно):
# wbinfo -u
# wbinfo -g
Если нас не понимают,
то подсказываем пароль для wbinfo и смотрим: список доменов в
сети, информацию о домене WORKGROUP, список
пользователей и групп домена:
# wbinfo
--set-auth-user=root%root_password
#
wbinfo --all-domains
# wbinfo -D WORKGROUP
# wbinfo -t
- Проверяем, как работает NSS. Команда
getent показывает инфо о пользователе, который может быть как
в
домене, так и
юниксовый. У меня почему-то в этот раз не захотел показывать
пользователей домена, но когда работает, то выдаёт их в следующем виде
(1-й пользователь домена, 2-й локальный):
# getent passwd | grep pm
pm:x:15000:15000::/home/WORKGROUP/pm:/bin/false
# getent passwd |
grep pavel
pavel:x:500:500:Pavel
Malakhov:/home/pavel:/bin/bash
root = admin administrator
- для сопоставления (Map) групп домена и групп UNIX
выполняем:
# net groupmap modify
ntgroup="Domain Admins" unixgroup=root
# net groupmap modify ntgroup="Domain Users" unixgroup=users
# net groupmap modify ntgroup="Domain Guests" unixgroup=nobody
log level = 1
Полезные комманды:
| $ smbclient -N -L 10.0.0.117 | - показывает ресурсы компьютера с адресом 10.0.0.117 |
| $ smbclient //10.0.0.117/common | - Вход в расшаренную директорию. Пользователь unix от которого выполняется команда должен быть зарегистрирован в домене. |
| # net ads join -U pavel -d 3 | Добавить в домен пользователя pavel |
| # winbindd -d 3 -i | Режим отладки (-d), winbindd запускается не как демон (-i) |
| # wbinfo -a mydomain\\myuser%mypasswd | авторизируемся в домене (через winbindd) |
| # ldapsearch | запросы к LDAP серверу, в нашем случае к MS Active Directory |
| # tdbdump /etc/samba/secrets.tdb | просмотреть содержимое файла *.tdb |
Дополнительные
ссылки:
linux.yaroslavl.ru//docs/serv/samba/samba-win2000.html
- Samba и доменная аутентификация Windows2000
http://us6.samba.org/samba/docs/man/Samba-Guide/unixclients.html#adssdm-
Active Directory Domain with Samba Domain Member Server - подробная
инструкция как подключить Linux сервер с помощью Samba 3 к домену под
управлением AD Windows 2003.
http://us6.samba.org/samba/docs/man/Samba-Guide/kerberos.html#id397375
- пример настройки доступа для пользователей Active Directory
Samba-HOWTO-Collection.pdf, стр.54-57 (поставляется с исходниками) или
us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/FastStart.html
http://www.opennet.ru/base/net/samba_wins2.txt.html
- Описание понятий NetBIOS, WINS и Browsing lists
http://jcifs.samba.org/ntstatus.txt
- описание статусов
Описания:
nmbd - This daemon handles
all name registration and resolution requests. It is the primary
vehicle involved in network browsing. It handles all UDP based
protocols. The nmbd daemon should be the first command started as part
of the Samba start-up process.
smbd - This daemon handles all TCP/IP
based connection services for file and print based operations. It also
manages local authentication. It should be started immediately
following the start-up of nmbd.
winbindd - This daemon should be started
when Samba is a member of a Windows NT4 or ADS Domain. It is also
needed when Samba has trust relationships with another Domain. The
winbindd daemon will check the smb.conf file for the presence of the
idmap uid and idmap gid parameters. If they are not found winbindd will
bail-out and refuse to start.
wbinfo - Query information from winbind
daemon
Доступ к Samba из Windows 7 и 2008 r2
Начиная с этих версий параметры авторизации у MS поменялись. Скорее всего Samba вскоре это учтёт, а пока подружить системы можно изменив на Win7 свойства сетевой безопасности:Работа над ошибками:
1) При запуске Samba обнаруживаем, что winbind не запустился:[2010/03/06 13:54:34, 2] winbindd/winbindd_util.c:235(add_trusted_domain)
Added domain BUILTIN S-1-5-32
[2010/03/06 13:54:34, 2] winbindd/winbindd_util.c:235(add_trusted_domain)
Added domain STORAGE S-1-5-21-3963871611-1338977097-196861091
[2010/03/06 13:54:34, 0] winbindd/winbindd_util.c:782(init_domain_list)
Could not fetch our SID - did we join?
[2010/03/06 13:54:34, 0] winbindd/winbindd.c:1385(main)
unable to initialize domain list
2) При попытке получить билет Kerberos получили:
kinit: KDC reply did not match expectations while getting initial credentials
| Обсудить, спросить на форуме,
отдельно для Ubuntu |
Новую версию
этого документа можно получить на одном из зеркал сайта: pm4u.opennet.ru, pm4u.narod.ru |