Здравствуйте!
В этой статье я хочу рассмотреть установку и настройку файлового сервера SAMBA. Тех, кто не знает, что это такое, прошу в Википедию. Операционную систему я буду для этого использовать Fedora 12 — это один из самых популярных дистрибутивов Линукса.
Этап 1. Общая подготовка сервера.
Для начала, опишем то, что имеем:
- Пусть у нас будут два независимых домена Active Directory в разных лесах, между которыми настроены доверительные отношения.
- Пусть они называются mydomain.domain и mydomain1.domain.
- Домены подняты на Windows server 2003 SP2 R2, либо на Windows server 2008 R2, но работающем в режиме Windows server 2003 (я тестировал только с этими ОС).
Нам требуется:
- Поднять файловое хранилище, которым смогут пользоваться члены обоих доменов.
- Распределить права доступа к этому хранилищу.
- Настроить фильтрацию по типам файлов.
- Настроить резервное копирование данных из файлового хранилища.
Начнём с установки. Разметку диска здесь мы рассматривать не будем. Можете выбрать разметку по умолчанию, предлагаемую самим установщиком. При установке, я назвал свой сервер samba.mydomain.domain, поскольку буду его вводить именно в домен mydomain.domain. Отметим, какие наборы пакетов нам понадобятся для работы:
В графических средах снимаем все галки. Иксы нам не нужны.
В приложениях тоже снимаем все галки.
Программирование — там ничего не отмечено по умолчанию. Так и оставляем
Серверы — тут отметим следующее:
- Поддержка печати
- Сервер каталогов
- Файловый сервер для Windows
Базовая система:
- Основные
- Поддержка оборудования
- Системные средства. Но зайдём внутрь и оставим галки лишь на тех компонентах, которые нам могут понадобиться:
- mc
- ntp
- openvpn
- samba-client
- yum-utils
Языки не отмечаем никакие.
Этих пакетов нам должно хватить. Тем не менее, если на этом этапе мы что-то упустили, то это можно будет поправить позже. Устанавливаем.
После того, как система установилась, надо установить самые свежие обновления. Для этого нам нужно, чтобы наш сервер имел доступ в интернет. Сначала настроим сетевой интерфейс. Логинимся под root и набираем команду:
mc
Запустится консольный файловый менеджер. Находим файл /etc/sysconfig/network-scripts/ifcfg-eth0, ставим на него курсор и жмём F4 — откроется содержимое этого файла с возможностью редактирования. Приводим содержимое этого файла примерно вот к такому виду:
DEVICE=eth0
HWADDR=08:00:27:05:1E:FB #mac-адрес сетевого интерфейса
ONBOOT=yes
IPADDR=192.168.1.210 #ваш ip-адрес
NETMASK=255.255.255.0 #ваша маска сети
GATEWAY=192.168.1.100 #ваш шлюз
DNS1=192.168.1.200 #ваш DNS-сервер
DNS2=192.168.1.201 #ваш альтернативный DNS-сервер
SEARCH="mydomain.domain" #ваш локальный домен Active Directory
DOMAIN="mydomain.domain" #ваш локальный домен Active Directory
Сохраняем и перезагружаем систему командой reboot. После загрузки проверяем, что сеть работает:
ping 192.168.1.100
Если пинг пошёл, значит всё хорошо.
Если у вас в сети есть прокси-сервер, и доступ в интернет осуществляется через него, а не напрямую через 80-ый порт, то необходимо в файле /etc/yum.conf дописать следующее:
proxy=http://192.168.1.100:3128 #в таком виде надо прописывать адрес прокси и его порт
proxy_username=myuser # В случае, если необходима авторизация, то прописываем логин
proxy_password=mypass # и пароль
Всё, теперь пробуем обновиться. Важно! Сначала надо обновить сам менеджер пакетов yum! На практике встречалось, что обновление может не пойти, пока не обновишь сам yum. Итак, делаем:
yum -y update yum
И вот только после этого запускаем обновление всей системы:
yum -y update
После успешного обновления надо перезагрузить систему.
Далее, нужно убедиться, что все необходимые пакеты у нас есть, поскольку некоторые из них могли не поставиться с диска. Вводим команду:
yum list *samba*
Вывод должен быть примерно такой:
Из этого видим, что нам не хватает одного пакета. Устанавливаем:
yum -y install samba-winbind
Далее, что нам необходимо сделать — это открыть нужные порты на фаерволе, который называется iptables. Находим файл /etc/sysconfig/iptables и приводим его вот к такому виду:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 631 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Изначально, на нашем сервере был открыт только 22-ой TCP-порт — это порт для ssh. Мы открыли порты udp 137, udp 138, tcp 139 и tcp 445 для нашей самбы, а также открыли порты udp 631 и tcp 631 для сервера печати, если таковой, в будущем, захотим пристроить к самбе. Для того, чтоб прописанные нами правила фаервола применились, надо его перезапустить:
service iptables restart
Также, на период установки, настройки и тестирования, нам лучше перевести в разрешающий режим систему принудительного контроля доступа SELinux. Находим файл /etc/selinux/config , находим в нём строчку SELINUX=enforcing и меняем её на SELINUX=permissive. После того, как всё будет настроено 100%-но работоспособно, SELinux можно будет включить обратно и гибко настроить его под свои нужды. Но это — материал уже для другой отдельной статьи...
Далее, чтобы потом избежать кое-какие проблемы с самбой, настроим синхронизацию времени с контроллерами домена. Найдём файл /etc/ntp.conf, а в нём найдём строки:
server 0.fedora.pool.ntp.org
server 1.fedora.pool.ntp.org
server 2.fedora.pool.ntp.org
и заменим их на строчки, в которых серверами NTP будут указаны контроллеры домена:
server 192.168.1.200
server 192.168.1.201
Сохраняем и включаем демон ntpd в автозагрузку:
chkconfig ntpd on
И сейчас надо перезагрузить систему.
Ну вот, теперь приведём наши конфигурационные файлы в должный вид и, тем самым, подготовим наш сервер для ввода в домен mydomain.domain. Сам я пользовался вот этой статьёй. Тем не менее, здесь мы это ещё раз всё рассмотрим пошагово. Для начала, отредактируем файл /etc/krb5.conf. Его нужно привести в аналогичный вид:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = true
renew_lifetime = 7d
default_realm = MYDOMAIN.DOMAIN
# У меня в домене присутствует два контроллера домена (с адресами 192.168.1.200 и 192.168.1.201).
# Если у вас он всего один, то лишнее уберите.
[realms]
mydomain.domain = {
kdc = 192.168.1.200
kdc = 192.168.1.201
admin_server = 192.168.1.200
admin_server = 192.168.1.201
default_domain = mydomain.domain
}
[domain_realm]
.mydomain.domain = MYDOMAIN.DOMAIN
mydomain.domain = MYDOMAIN.DOMAIN
И не забывайте соблюдать регистр, когда будете подставлять свои значения для контроллеров домена и названия домена.
Далее, находим файл /etc/samba/smb.conf и приводим его в аналогичный вид:
[global]
log file = /var/log/samba/log.%m
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
null passwords = yes
interfaces = eth0
hosts allow = 192.168. 127.0.0.1
winbind uid = 50-99999999
winbind gid = 50-99999999
auth methods = winbind
winbind enum groups = yes
winbind enum users = yes
winbind use default domain = yes
name resolve order = hosts wins bcast lmhosts
case sensitive = no
dns proxy = no
server string = Linux
netbios name = samba
password server = 192.168.1.200 192.168.1.201
realm = MYDOMAIN.DOMAIN
client signing = yes
local master = no
domain master = no
workgroup = MYDOMAIN
debug level = 2
security = ads
dos charset = 866
max log size = 50
os level = 0
Опять же, не забываем про регистр.
Последний файл, который нам надо подправить, это /etc/nsswitch.conf . Находим в нём следующие строчки:
passwd: files
shadow: files
group: files
И правим их до такого вида:
passwd: files winbind
shadow: files
group: files winbind
После того, как мы отредактировали все конфигурационные файлы, нам надо запустить/перезапустить и включить в автозапуск некоторые демоны (службы). Для начала, набираем команду ntsysv. Появится окно, в котором надо поставить звёздочку напротив демонов nmb, smb и winbind. Таким образом, мы включили эти демоны в автозапуск. А сейчас запустим/перезапустим их вот такими командами:
service smb restart
service nmb restart
service winbind restart
Хорошо. Теперь попытаемся включить наш SAMBA-сервер в домен Active Directory. Вводим следующую команду:
kinit Admin@MYDOMAIN.DOMAIN
Где Admin — это учётная запись пользователя AD, имеющего права администратора домена. Если всё нормально, то, к примеру, в моём случае, должно быть типичное линуксовое молчание после ввода пароля. Молчит, значит всё в порядке :) Если же у вас это не так, то вот возможные проблемы на этом этапе:
kinit: krb5_get_init_creds: Client (Admin@MYDOMAIN.DOMAIN) unknown — Надо проверить правильность ввода логина\пароль админа.
kinit: krb5_get_init_creds: unable to reach any KDC in realm (MYDOMAIN.DOMAIN) — Проверьте правильность настроек DNS и конфига krb5.conf
kinit: krb5_get_init_creds: Clock skew too great — Рассинхронизация времени на контроллере домена и клиентом
Итак, если же проблем нет, то выполняем вторую команду:
net ads join -U Admin
Если у вас выйдет сообщение:
Using short domain name — MYDOMAIN
Joined 'SAMBA' to realm 'mydomain.domain'
то значит всё в порядке. Перезагрузимся.
Теперь, давайте проверим, хорошо ли наш SAMBA-сервер чувствует себя в домене. Вводим команду:
wbinfo -t
Вывод должен быть таким:
checking the trust secret via RPC calls succeeded
Проверим пользователей и группы. Эти команды должны вывести список пользователей и групп АД:
wbinfo -u
wbinfo -g
Заметьте, что группы и пользователи должны отобразиться как из домена mydomain.domain, так и из домена mydomain1.domain ! Если это не так, то SAMBA, скорее всего, тут не причём, и надо проверять как у вас в доменах настроены доверительные отношения и ДНС-серверы.
Проверяем аутентификацию в домене:
wbinfo -a user%123
wbinfo -a "MYDOMAIN1\user"%123
где user и MYDOMAIN1\user - пользователь домена, 123 - пароль. Если в обоих случаях ответ:
plaintext password authentication succeeded
сhallenge/response password authentication succeeded
значит аутентификация в доменах работает.
Проверим, видит ли наша самба пользователей обоих доменов:
id user
id "MYDOMAIN1\user"
Команда должна вывести id пользователя домена и группы, к которым он относится.
Итак, все тесты пройдены, мы в домене, и самба настроена правильно. Переходим ко второму этапу.
Этап 2. Настройка прав доступа на файловое хранилище.
Перейти сразу на:
этап 3