Создание файл-сервера Samba под FreeBSD

Очень обстоятельная статья, рассказывающая о том, как создать файловый сервер на базе FreeBSD с атуентификацией в домене Windows 2000.

[Сергей Полецкий (email+psj.net.ru)]

Предисловие

Ну вот. Начинаю применение своим знаниям.

Первое что необходимо любой, без исключения, организации это файловый сервер, на котором будут храниться документы. Поскольку в моем случае локальная сеть существует и работает, то мне необходимо добавить его, файловый сервер, в свою локальную сеть. Ну а поскольку в моей локальной сети работает домен, поднятый на Windows 2000 в native режиме, то вся аутентификация должна проходить в домене. И вот тут меня поджидало большое разочарование: Я НЕ СМОГ ПРОВЕСТИ АУТЕНТИФИКАЦИЮ ПОЛЬЗОВАТЕЛЕЙ С ЛОГОНАМИ НА РУССКОМ ЯЗЫКЕ. Предполагаю, что это может быть из-за локализации FreeBSD, но проверить не могу. Нет времени. По всей видимости - если сделать локализацию не в KOI8-R, а в CP1251, то ВОЗМОЖНО аутентификация и пройдет. Я НЕ ПРОБОВАЛ. Если у кого-то получится, огромная просьба - поделитесь опытом.

Чем мне нравится файловый сервер сделанный на Samba в отличии от стандартного файлового сервера Windows.

Если Вы имеете дело с достаточно важной информацией, значит Вам необходимо периодически создавать архивные копии данной информации. Как говорил великий Мэрфи: любая система зависящая от человека - ненадежна. Значит данный процесс необходимо автоматизировать. НО если какой-то пользователь ушел домой оставив открытый документ (например не закрыл Word), то архивная копия может быть создана не полностью со всеми вытекающими отсюда последствиями. Конечно, мне могут возразить, что существуют специальные программы которые могут копировать открытые файлы. Но данные программные комплексы стоят достаточно дорого. В данном же случае есть возможность остановить файловый сервер, при этом ВСЕ открытые файлы автоматически закроются, создать резервную копию документов и запустить файловый сервер снова. Причем всё это без перезагрузки сервера. Т.е. все значительно упрощается.

Краткое ТЗ

Локальная сеть

  • сеть - 10.61.25.128, маска - 255.255.255.0
  • контроллер домена - Windows 2000 AS Rus SP4, IP: 10.61.25.241 (естественно, DNS на контроллере поднят и работает)
  • будующий файловый сервер
    • имя - smb
    • адрес - 10.61.25.201
    • шлюз по умолчанию - 10.61.25.130
  • домен - domen.ru (имя взято для примера, использовать его я не рекомендую, т.к. в интернет имя этого домена существует и могут быть проблемы)

Имеем компьютер P IV 2.4 ГГц, HDD - SATA 40 Гб, Ethernet и видео - интегрированы на материнской плату.

Данный компьютер будет выполнять роль файлового сервера установленного на FreeBSD 6.0 с аутентификацией в домене Windows 2000, работающем в native режиме, т.е. данное описание можно применить к домену работающему под управлением Windows 2003. Файловый сервер будет работать в локальной сети с 40 пользователями. На файловом сервере предполагается хранить ТОЛЬКО текстовые документы в формате MS Office или OpenOffice. Ни о каких графических форматах, и тем более музыка и фильмы, речь не идет.

В последствии этот сервер будет выполнять в данной организации роль почтового сервера, поэтому разбиение диска сразу предусматривает эту возможность.

Предположения

  1. Там где Вы занимаетесь инсталляцией связь с Интернет уже есть
  2. FireWall локальной сети открыт на порту ftp. На самом сервере FireWall настраивать во время инсталляции не будем, т.к. сервер находится внутри сети за корпоративным FireWall-ом и данную процедуру, достаточно безболезненно, можно отложить на будущее.
  3. Устанавливать будем FreeBSD 6.0 на чистую машину, во избежании того, что какое-либо установленное приложение помешает чистоте эксперимента
  4. Вы знаете как работать в консольном текстовом редакторе. Каком неважно, я работаю в "ee", который ставится по умолчанию при инсталляции FreeBSD.
  5. FreeBSD будем ставить с ftp сервера: ftp4.ru.freebsd.org. Просто у меня до него самый короткий пинг. Если у Вас есть сервер поближе ставьте с него - разницы не будет ни какой. Закономерный вопрос - а почему с Ftp? А очень просто, как ни странно из-за экономии трафика. После скачивания загрузочного диска и данной инсталляции из Интернета, трафик составил около 200 Мбайт информации. Если же скачивать полный диск, то только он занимает более 600 Мбайт.
  6. Вы знаете параметры своей локальной сети, такие как: Адрес сети, маска сети, статический адрес будущего сервера, имя домена, имя сервера, Вам его должен сказать администратор Вашей сети, если Вы не являетесь администратором, адрес шлюза для выхода в Интернет, адрес DNS-сервера используемого в Вашей сети. DNS сервер должен уметь разрешать Интернет-адреса, а не только адреса локальной сети.
  7. Ну и самое главное: ЛОКАЛЬНАЯ СЕТЬ С ДОМЕНОМ НА Windows 2000 в native режиме или Windows 2003 уже ИСПРАВНО работает. Аккаунты и пароли пользователей заведены латинскими буквами.

Инсталляция

План работы

Попытаемся составить, хотя-бы приблизительный, план работы. Т.е. запишем на бумаге последовательность - что и зачем мы будем делать

  1. Инсталлируем FreeBSD v. 6.0 в минимальном объеме. С системой портов и исходными текстами для перекомпиляции ядра и системы.
  2. Из установленной при инсталляции системы портов, устанавливаем и настраиваем три комплекта программ: CVSup, fastest_cvsup и portsupgrade, для поддержания системы портов и исходных текстов FreeBSD в актуальном состоянии
  3. При помощи установленных программ приводим систему портов и исходные тексты в актуальное состояние
  4. Перестраиваем систему и ядро (kernel)
  5. Устанавливаем и настраиваем программный сервер KERBEROS 5 - Heimdal
  6. Устанавливаем и настраиваем файловый сервер Samba 3.xx.xx
Ну вроде всё.

Инсталляция FreeBSD 6.0

Любыми доступными способами выходим на ftp сервер ftp.freebsd.org, или ближайшее к Вам зеркало FreeBSD, и скачиваем файл 6.0-BETAх-i386-bootonly.iso. Это последняя версия FreeBSD на время написания статьи. Данный файл записываем на CD болванку и с неё загружаемся. После загрузки с CD-ROM-а автоматически запускается sysinstall. Ну вот вроде и начало.

Как у меня всегда получается, удобнее всего проводить инсталляцию в режиме Custom. Как-то спокойнее когда видишь что, куда и сколько инсталлируется. Итак, переходим в режим - Custom.

Затем - Partition. Если диск уже был размечен буквой D удаляем все старые партиции и нажимаем букву А создаем одну загрузочную партицию на весь диск

Затем нажимаем букву Q и завершаем работу с разбиением диска на партиции. У нас спрашивают - а как собственно Вы хотите загружаться? Поскольку на сервере будет установлена только ОС FreeBSD, то выбираем второй пункт - загрузка без BootManager-а.

Переходим к разбиению партиции на слайсы. Пункт меню - Label.

Все слайсы создаем вручную. Для создания слайса нажимаем букву C и честно отвечаем на поставленные вопросы.

  1. / - здесь располагается система FreeBSD. Вообще-то, как утверждают знающие люди, для системного раздела достаточно 70-80 Мбайт, но поскольку я собираюсь перестраивать и систему и ядро, то у меня нет желания столкнуться с проблемой нехватки места на диске в самый ответственный момент.
  2. /swap - раздел подкачки. Его размер зависит от объёма оперативной памяти на компьютере и задач которые будут работать на данном сервере. В данном конкретном случае я считаю что размер файла подкачки равен двойному объёму оперативной памяти.
  3. /tmp - хранилище временных файлов. В некоторых рекомендациях при перезагрузке данный раздел очищается. Я этого делать не буду.
  4. /var - раздел для хранения текущих данных между загрузками. Самый активно работающий раздел. Сюда пишутся, по умолчанию, все лог-файлы системы.
  5. /usr - условно постоянный раздел. Здесь хранится ВЕСЬ комплекс программ который не идет в стандартной поставке. Т.е. если Вы, при штатной установке программного обеспечения из портов системы, не указывали другого местоположения установленной программы, то программа будет установлена в этот раздел.
  6. /mail - здесь в будущем будут находиться почтовые ящики всех пользователей локальной сети.
  7. /home - здесь будут находиться все домашние каталоги и каталоги групп пользователей.

Ну с разбиением диска вроде все. Нажимаем букву Q и идем дальше в дистрибутивы.

Здесь будем выбирать - что мы хотим установить на наш компьютер при инсталляции. Тоже, из желания управлять процессом, переходим в меню Custom.

Выбираем следующие дистрибутивы:

Ну и что мы выбрали:

  • base - выбираем в обязательном порядке. Это бинарники для работы FreeBSD
  • doc - документация на FreeBSD. В принципе можно и не инсталлировать.
  • man - помощь по командам. Устанавливаем обязательно.
  • ports - система портов FreeBSD. Необходимо для инсталляции программ.
  • src - исходные тексты FreeBSD. При выборе исходных текстов появляется запрос, что именно из исходный текстов мы хотим загрузить.

Ну как видите, я загрузил все кроме игр. Игры на сервере вроде как не нужны. Возвращаемся к пункту меню Exit и выходим в предыдущее меню, опять Exit и опять в предыдущее меню, опять Exit и выходим из выбора дистрибутивов. После этого выбираем пункт меню Commit

и получаем вопрос - а откуда Вы хотите инсталлировать FreeBSD? Я начинаю объяснять что с ftp сервера. И после нажатия ОК появляется список официальных серверов

Из списка выбираем тот, который к нам поближе. Ко мне самый близкий, из данного списка, ftp4.ru.freebsd.org. А дальше мы должны показать своё знание локальной сети.

Ну IP-адреса версии 6 мы использовать ПОКА не будем

Поскольку мы делаем сервер, то адрес должен быть ОДНОЗНАЧНО статический. Поэтому от услуг DHCP-сервера отказываемся.

Ну а дальше самое ответственное:

  • host - имя сервера. Если мы напишем его полностью, с именем домена, то при переходе в поле Domain оно автоматически заполнится. Кстати переход осуществляется или по клавише Tab или по клавише Enter.
  • Domain - имя Вашего домена
  • IPv4 Gateway - адрес шлюза для выхода в Интернет
  • Name server - адрес DNS-сервера
  • IPv4 Address - IP адрес Вашего сервера
  • Netmask - маска сети, в которой стоит данный сервер

После этого Вам скажут что все на машине будет уничтожено, Вы скажите что Вы этого хотите и установка начнется. У меня это длилось порядка 30-40 минут.

После того как всё закачается и установится, у Вас спросят - хотите продолжить конфигурирование? Отвечаете что да, хочу, Вас возвращают в Sysinstall и уже сам продолжаешь конфигурирование

Вначале меняем пароль пользователя root

Его надо ввести два раза. После этого добавляем единственного пользователя в группу wheel. Чтоб можно было переключаться в пользователя root. Для этого заходим в User Management

Выбираем добавление пользователей

И добавляем

Где

  • Login ID - Имя пользователя, используемое при логоне
  • UID - ID код пользователя. Если нет желания заниматься отслеживанием кодов вручную, пусть система сама ставит то, что считает нужным.
  • Group - основная группа для указанного пользователя
  • Password - пароль он и в Африке пароль
  • Full name - а вот сюда можно написать всё что угодно. Данное поле пытались использовать в почтовых программах, но насколько я понял, в данное время от этой идеи отказались
  • Member group - в какую группу добавить данного пользователя
  • Home directory - Домашняя директория пользователя
  • Login shell - скрипт-язык используемый данным пользователем при логоне по умолчанию

Ну вроде всё. Пользователя добавили, теперь можно заниматься локализацией.

Идем по порядку,

т.е. вначале выбираем экранный шрифт - Font

Предполагаю, что локализация будет в KOI8-R поэтому экранный шрифт выбираем IBM-866. После этого выбираем раскладку клавиатуры Keymap

Опять-таки, если локализация KOI8-R, то выбираем Russia KOI8-R. После этого выбираем экранную таблицу перекодировки

Перекодировать будем KOI8-R в IBM866. И наконец выберем тип терминала

Ну вот и локализацию на этапе инсталляции завершили. Позже, после перезагрузки, локализацию завершим. Полностью локализовать при инсталляции нельзя. Видимо пока.

Теперь будем настраивать время.

Выбираем регион и страну

Выбираем смещение часового пояса относительно столицы

И применяем всё это

Ну вот. Вроде с инсталляцией болванки сервера завершили. Последовательно выходим из всех подменю. При выходе из sysinstall-a Вас попросят вытащить диск из CD-ROM-а. И новоиспечённый сервер перезагрузится.

После перезагрузки системы продолжим локализацию. Нам желательно чтобы два пользователя, а конкретно: root и psj, могли видеть изображение русских букв. Пользователи у нас уже заведены, поэтому меняем у них класс командой pw. Для этого перейдем на вторую консоль, нажимая клавиши ALT+F2 и в ответ на приглашение ко вводу логина вводим имя пользователя, которого мы создали при инсталляции. Итак:

	 #login: psj
	 password:
	 $

Изменение системных файлов можно проводить только под аккаунтом пользователя root. Поэтому сменим аккаунт командой su:

	 $su
	 password:
	 smb#

Теперь изменим классы пользователей:

	 smb# pw usermod root -L russian
	 smb# pw usermod psj -L russian

Локализация завершена. Теперь после следующего входа данных пользователей в систему они будут видеть русские буквы в кодировке KOI8-R и переключать язык клавишей CAPSLOCK.

Всё самое простое сделали. Можно и чаю-кофе попить.

Инсталляция CVSup, fastest_cvsup и portsupgrade

Ну-с, продолжим-с.

Если после инсталляции системы перезагрузка прошла нормально, то следующий этап - инсталляция программного обеспечения.

Входим в систему. После перезагрузки мы увидим стандартное приглашение на первой консоли. Переходим на вторую консоль, нажимая клавиши ALT+F2 и в ответ на приглашение ко вводу логина вводим имя пользователя, которого мы создали при инсталляции. Итак:

	 #login: psj
	 password:
	 $

Все инсталляции из коллекции портов я провожу под аккаунтом пользователя root. Поэтому сменим аккаунт командой su:

	 $su
	 password:
	 smb#

Дальше необходимо действовать достаточно осторожно, т.к. аккаунт root подразумевает под собой ПОЛНЫЙ доступ к системе. Т.е. есть возможность испортить всю свою прошлую работу.

Система портов находится в директории: /usr/ports/

Итак приступаем к инсталляции CVSup. Ну во-первых - читается это дело как "си-ви-сап". А предназначено для синхронизации каких-либо файлов с каким-либо репозиторием. Репозитории системы портов и исходных текстов FreeBSD существуют. Поэтому мы будем синхронизироваться с ними. Поскольку я считаю, что для сервера графический интерфейс это не самое важное, то инсталлировать будем CVSup без графического интерфейса. Для этого переходим в директорию где хранится соответствующий порт и выполняем стандартный, с моей точки зрения, набор команд.

	 smb#cd /usr/port/net/cvsup-without-gui
	 smb#make install clean && rehash

Если связь с интернетом существует, то CVSup должен установиться безо всяких проблем. При этом он скачает из Интернета несколько пакетов, которые ему необходимы для инсталляции.

После этого инсталлируем вспомогательную программу - fastest_cvsup, я считаю, что для работы CVSup она достаточно важна. Для этого

	 smb#cd /usr/port/sysutils/fastest_cvsup
	 smb#make install clean && rehash

И опять, если связь с Интернет существует,то инсталляция пройдет без проблем. Ну и завершает первую тройку установленных программ - portupgrade. Все по накатанному:

	 smb#cd /usr/port/sysutils/portupgrade
	 smb#make install clean && rehash

И вот-тут у нас спросят, в каком формате мы будем хранить данные об инсталлированных пакетах

В принципе мы ничего не теряем, поэтому отмечаем пробелом то, что мы будем использовать версию DB старше второй. И снова, если Интернет доступен - инсталляция пройдет без проблемно.

Первые инсталляции завершили, теперь будем это все настраивать.

После инсталляции программы cvsup и fastest_cvsup находятся в директории /usr/local/bin, а комплекс программ portupgrade находится в директории /usr/local/sbin. Примеры конфигурационных файлов cvsup находятся в директории /usr/share/examples/cvsup. Из примеров конфигурационных файлов я использовал три:

  1. ports-supfile
  2. stable-supfile
  3. refuse

Разложим вышеуказанные файлы по определенным папкам. Первые два файла: ports-supfile и stable-supfile, можно положить в любое место, но поскольку это конфигурационные файлы, то ложим их в директорию /usr/local/etc, и для краткости переименовываем в ports и stable. Для этого переходим в директорию с примерами и выполняем команду копирования:

	 smb#cd /usr/share/examples/cvsup
	 smb#cp ports-supfile /usr/local/etc/ports
	 smb#cp stable-supfile /usr/local/etc/stable

Файл stable необходимо немного подредактировать. Делать это можно любым консольным редактором, я работаю в стандартном "ее", и запуск выглядит следующим образом

	 smb#ee /usr/local/etc/stable

После редактирования файл должен выглядеть следующим образом:

=================================== Начало файла ==========================================
# $FreeBSD: src/share/examples/cvsup/stable-supfile,v 1.29 2004/10/24 09:07:06 scottl Exp $
#
# This file contains all of the "CVSup collections" that make up the
# FreeBSD-stable source tree.
#
# CVSup (CVS Update Protocol) allows you to download the latest CVS
# tree (or any branch of development therefrom) to your system easily
# and efficiently (far more so than with sup, which CVSup is aimed
# at replacing).  If you're running CVSup interactively, and are
# currently using an X display server, you should run CVSup as follows
# to keep your CVS tree up-to-date:
#
#	cvsup stable-supfile
#
# If not running X, or invoking cvsup from a non-interactive script, then
# run it as follows:
#
#	cvsup -g -L 2 stable-supfile
#
# You may wish to change some of the settings in this file to better
# suit your system:
#
# host=CHANGE_THIS.FreeBSD.org
#		This specifies the server host which will supply the
#		file updates.  You must change it to one of the CVSup
#		mirror sites listed in the FreeBSD Handbook at
#		http://www.freebsd.org/doc/handbook/mirrors.html.
#		You can	override this setting on the command line
#		with cvsup's "-h host" option.
#
# base=/var/db
#		This specifies the root where CVSup will store information
#		about the collections you have transferred to your system.
#		A setting of "/var/db" will generate this information in
#		/var/db/sup.  Even if you are CVSupping a large number of
#		collections, you will be hard pressed to generate more than
#		~1MB of data in this directory.  You can override the
#		"base" setting on the command line with cvsup's "-b base"
#		option.  This directory must exist in order to run CVSup.
#
# prefix=/usr
#		This specifies where to place the requested files.  A
#		setting of "/usr" will place all of the files requested
#		in "/usr/src" (e.g., "/usr/src/bin", "/usr/src/lib").
#		The prefix directory must exist in order to run CVSup.
#
###############################################################################
#
# DANGER!  WARNING!  LOOK OUT!  VORSICHT!
#
# If you add any of the ports or doc collections to this file, be sure to
# specify them with a "tag" value set to ".", like this:
#
#   ports-all tag=.
#   doc-all tag=.
#
# If you leave out the "tag=." portion, CVSup will delete all of
# the files in your ports or doc tree.  That is because the ports and doc
# collections do not use the same tags as the main part of the FreeBSD
# source tree.
#
###############################################################################
	
# Defaults that apply to all the collections
#
# IMPORTANT: Change the next line to use one of the CVSup mirror sites
# listed at http://www.freebsd.org/doc/handbook/mirrors.html.
*default host=CHANGE_THIS.FreeBSD.org
*default base=/var/db
*default prefix=/usr
# The following line is for 5-stable.  If you want 4-stable, 3-stable, or
#  2.2-stable, change to "RELENG_4", "RELENG_3", or "RELENG_2_2" respectively.
*default release=cvs tag=RELENG_6
*default delete use-rel-suffix
	
# If you seem to be limited by CPU rather than network or disk bandwidth, try
# commenting out the following line.  (Normally, today's CPUs are fast enough
# that you want to run compression.)
*default compress
	
## Main Source Tree.
#
# The easiest way to get the main source tree is to use the "src-all"
# mega-collection.  It includes all of the individual "src-*" collections.
# Please note:  If you want to track -STABLE, leave this uncommented.
src-all
	
# These are the individual collections that make up "src-all".  If you
# use these, be sure to comment out "src-all" above.
#src-base
#src-bin
#src-contrib
#src-etc
#src-games
#src-gnu
#src-include
#src-kerberos5
#src-kerberosIV
#src-lib
#src-libexec
#src-release
#src-sbin
#src-share
#src-sys
#src-tools
#src-usrbin
#src-usrsbin
# These are the individual collections that make up FreeBSD's crypto
# collection. They are no longer export-restricted and are a part of
# src-all
#src-crypto
#src-eBones
#src-secure
#src-sys-crypto
=================================== Конец файла ==========================================

В файле была изменена ТОЛЬКО ОДНА СТРОКА:

	*default release=cvs tag=RELENG_6

RELENG_5 был изменен на RELENG_6

Теперь о файле refuse. В файле /usr/local/etc/ports или /usr/local/etc/stable ищем строку

	*default base=/var/db

В директории /var/db создаем директорию sup и скопируем туда файл refuse. Т.е. файле refuse должен лежать в директории "base"/sup, где base - соответствующий параметр из файлов stable или ports.

Редактором "ее" редактируем файл refuse. После редактирования у меня получился следующий файл:

	 doc/bn_*
	 doc/da_*
	 doc/de_*
	 doc/el_*
	 doc/es_*
	 doc/fr_*
	 doc/id_*
	 doc/it_*
	 doc/ja_*
	 doc/nl_*
	 doc/no_*
	 doc/pl_*
	 doc/pt_*
	 doc/ro_*
	 doc/sr_*
	 doc/tr_*
	 doc/zh_*
	 ports/arabic
	 ports/chinese
	 ports/french
	 ports/german
	 ports/hebrew
	 ports/hungarian
	 ports/japanese
	 ports/korean
	 ports/polish
	 ports/portuguese
	 ports/ukrainian
	 ports/vietnamese

Т.е. из файла refuse я удалил строки:

	 doc/ru_*
	 ports/russian

Коментарии в файле refuse не допускаются!

Все CVSup настроили, осталось настроить запуск.

Снова запускаем редактор ее и в домашней директории пользователя root, которая находится /root/, создаем два файла следующего содержания.

Файл stable:

	 #!/bin/sh
	 SUPFILE="/usr/local/etc/stable"
	 if SERVER=`/usr/local/bin/fastest_cvsup -qc ru`; then
	 	cvsup -g -h $SERVER $SUPFILE
	 fi

Файл ports

	 #!/bin/sh
	 SUPFILE="/usr/local/etc/ports"
	 if SERVER=`/usr/local/bin/fastest_cvsup -qc ru`; then
	 	cvsup -g -h $SERVER $SUPFILE
	 fi

Затем разрешаем запускать указанные файлы

	 smb#cd /root
	 smb#chmod +x ports
	 smb#chmod +x stable

Итак, что же мы сделали. Посмотрим что делает программа fastest_cvsup.

 smb#fastest_cvsup -h
   fastest_cvsup - finds fastest CVSup server

   Usage: /usr/local/bin/fastest_cvsup [-h] [-q|Q] [-r] -c (country codes|local|all)
   Where: -h           prints this screen
          -q           quiet mode, only outputs fastest server
          -Q           very quiet mode, no progress meter
          -r           uses remote server list from FreeBSD Handbook
          -c aa,bb,cc  queries servers in countries aa,bb,cc
             tld       queries servers in the top level domain
             local     queries servers set as local in the script
             all       queries all FreeBSD servers

   See the man page, fastest_cvsup(7), for more details.

Т.е. при запуске программы "/usr/local/bin/fastest_cvsup" с параметрами "-qc ru" мы получаем полный адрес ближайшего cvsup репозитория в доменной зоне "ru". Его-то мы и подставляем в параметре "-h" программы "cvsup".

ВАЖНО!!!

При создании переменной SERVER используются ОБРАТНЫЕ ОДИНАРНЫЕ КАВЫЧКИ.

ВСЁ. Настройку CVSup завершили полностью. Теперь поочередно запускаем на выполнение файлы ports и stable. После того, как они отрабатают на сервере будут стоять - и самые последние порты и самые последние изменения исходных текстов системы.

Теперь можно обновить все программные продукты которые мы уже установили. Для этого, вначале, зафиксируем информацию об установленном программном обеспечении. Делается это один раз следующей командой:

	 smb# pkgdb -F

Впоследствии команда portupgrade будет модифицировать эту базу.

Затем можно посмотреть - какие именно программы из ранее установленных требуют обновления:

	 smb# portversion

Все программы возле которых стоит знак < нуждаются в обновлении.

А обновить все программы можно командой:

	 smb# portupgrade -arR

Где параметры означают:

  • a - обновить все программы у которых обновились порты
  • r - обновить связи с программами которые зависят от обновляемой программы
  • R - обновить связи с программами от которых зависит обновляемая программа

Обновление ВСЕГО установленного из портов программного обеспечения мы провели. Следующим номером нашей программы

Полное перестроение системы FreeBSD и kernel

Первый вопрос, который задают все не связанные с UNIX: Что это такое и зачем это нужно?

Вначале попробуйте почитать документацию: HandBook - Пересборка "world".

Теперь своими словами, как сам всё это понимаю. Полная перестройка системы делается если прошли серьёзные изменения в системе безопасности или Вы решили обновить Вашу систему до новой версии. Во всех остальных случаях достаточно перестройки ядра.

Исходные тексты программ системы находятся в директории /usr/src/, исходные тексты ядра (kernel) находятся /usr/src/sys/. Конфигурационный файл ядра находится: /usr/src/sys/i386/conf и называется GENERIC. Данное повествование не описывает структуру файла GENERIC. Могу лишь сказать, что необходимо оствлять SCSI-шину и wlan. При этом и все SCSI-адаптеры и все RAID-контроллеры можно удалить. Почему не спрашивайте не знаю. Иначе ядро не компилируется.

Итак, копируем файл GENERIC в какой-либо другой, например:

	 smb# cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/smb

После этого редактируем файл /usr/src/sys/i386/conf/smb, и ...
ищем файл /usr/share/examples/etc/make.conf, копируем его в директорию /etc/ и тоже редактируем

В файле make.conf я изменил следующие параметры:

	 CPUTYPE?=pentium4
	 CFLAGS= -O -pipe
	 NO_BLUETOOTH="YES"		# do not build Bluetooth related stuff
	 NO_FORTRAN="YES"		# do not build g77 and related libraries
	 NO_GAMES="YES"		# do not build games (games/ subdir)
	 NO_INET6="YES"		# do not build IPv6 related programs and libraries

И после этого приступаем к перестроению системы.

	 smb# cd /usr/src
	 smb# make -j4 buildworld                        // компиляция системы
	 smb# make -j4 buildkernel KERNCONF=smb          // компиляция ядра
	 smb# make installkernel KERNCONF=smb            // инсталляция ядра
	 smb# reboot

После перезагрузки продолжаем

	 smb# cd /usr/src
	 smb# mergemaster -p
	 smb# make installworld                           // инсталляция системы
	 smb# mergemaster

Программа mergemaster служит для обновления Ваших конфигурационных файлов в новой системе. В данной ситуации, когда еще никаких дополнительных конфигурационных файлов установленно небыло, на все вопросы программы отвечаем нажатием буквы "i" для инсталляции изменений.

ВСЕ

	 smb# reboot

Система перестроена. Можно отдохнуть.

Система готова для инсталляции собственно файлового сервера.

Устанавливаем и настраиваем программный сервер KERBEROS5 - Heimdal

Так, ну что? Отдохнули? Поехали дальше.

Переходим в директорию /usr/ports/security/heimdal и запускаем инсталляцию:

	 smb#cd /usr/ports/security/heimdal
	 smb#make install clean && rehash

Сразу возникает вопрос по конфигурации данного сервера

В данном случае я ответил что буду работать с ldap протоколом. Если Интернет подключен - инсталляция должна пройти без проблем. После завершения инсталляции начинаем конфигурировать KERBEROS. Пример конфигурационного файла krb5.conf находится в директории /usr/src/crypto/heimdal. Копируем его в директорию /etc командой:

	 smb# cp /usr/src/crypto/heimdal/krb5.conf /etc
После редактирования он должен выглядеть следующим образом (следите за регистром букв - это важно)
	 [libdefaults]
		default_realm = DOMEN.RU
		clockskew = 300
		v4_instance_resolve = false
		v4_name_convert = {
			host = {
				rcmd = host
				ftp = ftp
			}
			plain = {
				something = something-else
			}
		}
	[realms]
		DOMEN.RU = {
			kdc = CNTRL0.DOMEN.RU
			admin_server = CNTRL0.DOMEN.RU
		}
	[domain_realm]
		.domen.ru = DOMEN.RU

Где:

  • DOMEN.RU - имя Вашего домена
  • CNTRL0.DOMEN.RU - имя контроллера в Вашем домене

Проверяем:

	 smb# kinit -p Poleckiy
	 Poleckiy@DOMEN.RU's Password:

Где - Poleckiy - имя пользователя в домене с административными правами. Если система в ответ написала:

	 kinit: NOTICE: ticket renewable lifetime is 1 week

то значит все в порядке, KERBEROS работает. Проверяем состояние системы:

	 smb# klist

Если в ответ Вы увидели следующее:

	 Credentials cache: FILE:/tmp/krb5cc_0
	         Principal: Poleckiy@DOMEN.RU

	   Issued           Expires          Principal
	 Sep 16 17:11:31  Sep 17 03:11:31  krbtgt/DOMEN.RU@DOMEN.RU
	 smb#

Значит билет от KERBEROS-а был получен. Все нормально. Можно приступать к следующему пункту.

PS: ВНИМАНИЕ! Расхождение во времени на сервере и контроллере домена должно быть не более пяти минут, иначе контроллер домена не будет выдавать билеты KERBEROS.

Устанавливаем и настраиваем файловый сервер Samba 3.xx.xx

Почему написано Samba 3.xx.xx? Потому-что какая версия Samba сервера будет у Вас в портах я предсказать не берусь.

Переходим в директорию /usr/ports/net/samba3 и запускаем стандартный набор команд:

	 smb# cd /usr/ports/net/samba3
	 smb# make install clean && rehash

Сразу высвечиваются вопросы по конфигурации сервера:

Где:

 [X] LDAP          With LDAP support                    // Поддержка ldap протокола
 [X] ADS           With Active Directory support        // Поддержка AD - ОБЯЗАТЕЛЬНО
 [ ] CUPS          With CUPS printing support
 [X] WINBIND       With WinBIND support                 // ОБЯЗАТЕЛЬНО
 [X] ACL_SUPPORT   With ACL support                     // Желательно
 [ ] AIO_SUPPORT   With experimental AIO support
 [X] SYSLOG        With Syslog support                  // Желательно
 [ ] QUOTAS        With Quota support
 [X] UTMP          With UTMP support                    // Не знаю что это, просто не менял
 [ ] MSDFS         With MSDFS support
 [ ] SAM_XML       With XML smbpasswd backend
 [ ] SAM_MYSQL     With MYSQL smbpasswd backend
 [ ] SAM_PGSQL     With PostgreSQL smbpasswd backend
 [ ] SAM_OLD_LDAP  With Samba2.x LDAP smbpasswd backend
 [X] PAM_SMBPASS   With SMB PAM module                  // Желательно
 [ ] EXP_MODULES   With experimental module(s)
 [X] POPT          With installed POPT library          // Тоже не знаю что это

И снова, если соединение с Интернет существует - инсталяция пройдет без проблем.

Начинаем конфигурирование файлового сервера.

Для автоматического запуска файлового сервера необходимо переименовать файл samba.sh.default в samba.sh который находится в директории /usr/local/etc/rc.d/. Переименование происходит следующим образом:

	 smb# cd /usr/local/etc/rc.d
	 smb# mv samba.sh.default samba.sh
	 smb# chmod +x samba.sh

Файл понимает три параметра:

  1. start
  2. stop
  3. restart

Для автоматического запуска сервера после перезагрузки системы в файл /etc/rc.conf добавляем строку:

	 samba_enable="YES"

Запустить сервер вручную, без перезагрузки системы, можно командой:

	 smb# /usr/local/etc/rc.d/samba.sh start

Остановить:

	 smb# /usr/local/etc/rc.d/samba.sh stop

Перезапустить:

	 smb# /usr/local/etc/rc.d/samba.sh restart

Файл конфигурации сервера лежит в директории /usr/local/etc и называется smb.conf.default. Для того чтобы сервер понял, что это его файл конфигурации копируем его с другим именем:

	 smb# cd /usr/local/etc
	 smb# cp smb.conf.default smb.conf

и редактируем файл smb.conf. После редактирования в нём должны быть следующие строки:

	[global]
	  workgroup = DOMEN
	  server string = Samba File Server
	  netbios name = smb
	  security = ads
	  hosts allow = 10.61.25.0/24 127.0.0.1
	  log file = /var/log/samba/log.%m
	  max log size = 500
	  password server = cntrl0.domen.ru
	  encrypt passwords = yes
	  realm = DOMEN.RU
	  socket options = TCP_NODELAY
	  os level = 1
	
	  display charset = koi8-r
	  unix charset = koi8-r
	  dos charset = cp866
	  winbind use default domain = yes
	  winbind uid = 10000-15000
	  winbind gid = 10000-15000
	  winbind enum users = yes
	  winbind enum groups = yes
	
	[homes]
	  comment = Home Directories
	  path = /home/%U
	  browseable = no
	  writable = yes

Вообще-то конфигурационный файл гораздо длиннее, но вышеуказанные строки должны в нём быть.

настраиваем файл: /etc/nsswitch.conf:

	 group: files winbind
	 passwd: files winbind
	 group_compat: nis
	 passwd_compat: nis
	 hosts: files dns
	 networks: files
	 shells: files

Первые две строки должны быть обязательно.

Пробуем войти в домен:

	 smb# net ads join -U Poleckiy
	 Poleckiy's password:

Если появилась следующая строка:

	 Joined 'SMB' to realm 'DOMEN'

можно и расслабиться. Контроллер домена захотел с Вами работать. В принципе осталась рутина. НО проверить еще не мешает.

Одним из вышеназванных способов запускаем Samba, по моему мнению - лучше перегрузить компьютер, и проверяем работу winbind:

	 smb# wbinfo -t

Если все нормально появится следующее сообщение:

	 checking the trust secret via RPC calls succeeded

значит доверительная учетная запись компьютера в домене создана.

Проверяем дальше, команда:

	 smb# wbinfo -u

должна выдать список пользователей и компьтеров зарегистрированных в домене. Имя нашего сервера должно быть - smb$. Следующая команда:

	 smb# wbinfo -g

должна выдать список групп на контроллере домена.

Проверяем аутентификацию в домене:

	 smb# wbinfo -a Poleckiy%123

Где:

  • Poleckiy - имя пользователя в домене
  • 123 - пароль пользователя в домене

Если получен ответ:

	 plaintext password authentication succeeded
	 challenge/response password authentication succeeded

Значит аутентификация в домене работает.

Проверяем как FreeBSD распознаёт доменных пользователей:

	 smb# id Poleckiy
	 uid=10000(Poleckiy) gid=10007(группа Администрирования)
	 groups=10007(группа Администрирования),10012(задача Администратор),
	 10032(задача Бухгалтерия)

Всё нормально. Осталось сделать директории пользователей.

Структура директории /home/ будет следующая:

  • home
    • all
    • otd1
    • otd2
    • otd3
    • ivanov
      • ссылка на all
      • ссылка на otd1
    • petrov
      • ссылка на all
      • ссылка на otd2
    • sidorov
      • ссылка на all
      • ссылка на otd3

Т.е. при обращении пользователя ivanov к серверу smb он увидит на сервере всего ОДНУ папку - ivanov. В этой папке будет общая папка отдела в котором он работает и общая папка предприятия. При этом самих общих папкок он видеть не будет.

В доменном аккаунте данную директорию можно подключить как сетевой диск и пользователь не будет даже знать где находятся его файлы.

Ну вот и всё.

За сим откланиваюсь.
Все пожелания и предложения по почте: support@psj.net.ru.

[ опубликовано 23/09/2005 ]

Сергей Полецкий (email+psj.net.ru) - Создание файл-сервера Samba под FreeBSD   Версия для печати