Установка и настройка Samba 2.2.0.
Для начала вам потребуется пакет Samba. Я возьму для примера версию
2.2.0, хотя как всегда, различия в версиях не так важны. Хотя именно в 2.2
наконец-то сделали возможным просмотр списка пользователей с windows машин.
Если в вашем дистрибутиве нет установленного пакета samba, то установите
его или скомпилируйте.
Для компиляции распакуйте samba командой tar zxvf samba-2.2.0.tar.gz.
Затем перейдите в каталог samba-2.2.0/source, в нем расположены
исходные тексты сервера.
Теперь необходимо предварительно отконфигурировать исходные тексты
под нашу систему, для этого выполним команду
./configure --with-smbmount --prefix=/samba --with-msdfs. (в одну строчку)
Этим мы дали команду включить в сборку smbmount, который служит
для монтирования SMB-ресурсов в файловую структуру Linux, плюс включили
поддержку Microsoft DFS и приказали устанавливаться в каталог /samba.
Можно добавить и другие параметры (подробнее ./configure --help),
но тут я их не буду касаться.
Если configure отработал без ошибок, можете начать сборку Samba,
выполнив команду make. После отработки команды можете дать команду
make install, тем самым установив Samba на причитающееся ей место
(у меня /samba)
Все, теперь можно вздохнуть спокойно и начать разбираться с настройками.
Копируем из каталога examples файл smb.conf.default в /samba/lib/smb.conf
При любых изменениях лучше перезапустите smbd - killall -HUP smbd
не всегда срабатывает корректно.
Итак, начнем лепить из samba то, что нам надо - открываем в любимом
текстовом редакторе smb.conf и начинаем аккуратно править.
Секция [global] - описание общих настроек
workgroup = SUPERS
Название рабочей группы или домена, в которой участвует сервер.
netbios name = Super
Как будет откликаться сервер по NetBIOS протоколу. НЕ ДЕЛАЙТЕ ЕГО
ТАКИМ ЖЕ, КАК И ИМЯ РАБОЧЕЙ ГРУППЫ. Иначе, если вы установите samba
как PDC, Windows при попытке залогинится будет ругаться на неправильный
параметр.
server string = Super Server
Описание сервера, которое появляется в графе NT Description в сервер-менеджере.
hosts allow =192.168.1. 127.
Список сетей, которым разрешен доступ к серверу.
load printers = no
Нет у меня сейчас принтеров.
guest account = nobody
имя unix-аккаунта, под которым будет работать гостевой пользователь.
log file = /samba/var/log.%m
имя лог-файла. %m заменяется на имя машины
max log size = 50
и его максимальный размер
security = user
как будем аунтифицироваться? тип user - каждый сам по себе.
encrypt passwords = yes
разрешаем шифрованные пароли.
local master = yes
samba сразу берет на себя роль мастер-браузера.
preferred master = yes
и сразу же при запуске устраивает перевыборы с наибольшим шансом
для себя. Этот параметр очень помогает при отладке.
wins support = yes
запускаем wins сервер.
dns proxy = yes
и заодно будем пытаться отресолвить netbios имена через DNS.
character set = KOI8-R
client code page = 866
Эти две строчки отвечают за нормальныю перекодировку имен файлов.
time server = True
Это приказывает nmbd анонсировать себя как "сервер точного времени"
для Windows клиентов.
[homes]
comment = Home Directories
browseable = no
writable = yes
Эти строчки описывают доступ до домашних каталогов пользователей.
Все. Самые первые правки в конфиге завершены.
Для проверки можете запустить /samba/sbin/smbd -D и /samba/sbin/nmbd
-D и посмотреть по лог-файлам (/samba/var/log.*), все ли в порядке.
После запуска у вас в сети должен появиться сервер с заданным вами
именем, который (в терминах Win98) не отвечает на удаленные запросы
и при попытке подключения требует ввести сетевой пароль на IPC$.
Все правильно. Так и должно быть - ведь того пользователя, под которым
вы пытаетесь подключться, samba пока не знает.
Теперь необходимо указать, какие пользователи из зарегестрированных
имеют право подключаться к серверу.
/samba/bin/smbpasswd -a user
Добавляем пользователя user. У вас спросят два раза пароль, который
должен быть у пользователя при его подключении к серверу (еще одна
возможность насоздавать пользователей с разными паролями на сервисы).
/samba/bin/smbpasswd -e user
Включаем доступ пользователю user (по умолчанию он выключен).
К сожалению, так придеться проделать с каждым пользователем, которому
необходимо обеспечить доступ к вашему серверу. Я не знаю никаких
скриптов, которые бы автоматизировали бы эту работу.
ДЛЯ НЕВЕРУЮЩИХ. Скрипты source/scripts/mk*.sh просто втупую берут
пользователей из подсунутого файла и выдают в формате smbpasswd на
выход. Никакие пароли при этом туда не прописываются, так что все
равно прописывать пользователей придеться вручную (плюс к тому же
вычищать всяких operators и root). Если вы знаете, где есть скрипт,
который умеет переносить базу пользователей автоматом - дайте мне знать.
Все, теперь команда /samba/bin/smbclient -L \\\\super -U user после
ввода пароля должна выдавать что-то подобное:
added interface ip=192.168.1.136 bcast=192.168.1.255 nmask=255.255.255.0
Got a positive name query response from 127.0.0.1 ( 192.168.1.136 )
Password:
Domain=[SUPER] OS=[Unix] Server=[Samba 2.2.0]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Super Server)
ADMIN$ Disk IPC Service (Super Server)
user Disk Home Directories
Server Comment
--------- -------
Super Super Server
Workgroup Master
--------- -------
SUPERS SUPER
Плюс зарегестрированные с помощью smbpasswd пользователи должны
получить доступ до своих домашних каталогов. Ну и всякие "Свойсва"
так же должны заработать. Проверьте - русские имена файлов, созданные
через Windows, должны нормально читаться в Linux и наоборот.
Если все так, то поздравьте себя - ваш Samba сервер работает. Но
расслабляться рано - мы проделали лишь малую часть работы, хотя
для большинства случаев этого хватит "за глаза".
Теперь давайте сделаем из Samba нормальный PDC. Добавляем/исправляем
в smb.conf следующие строчки:
domain master = yes
Указывает, что мы будем master browser в домене. Осторожнее, если
у вас уже есть PDC - это его работа.
domain logons = yes
Win9x машины будут забирать скрипты инициализации с сервера.
logon script = %U.bat
Логин скрипты будут иметь вид user.bat - на каждого пользователя
свой скрипт. Но никто не мешает соорудить конструкцию типа %m-%U.bat
или подобную.
logon path = \\%L\Profiles\%U
Сетевой путь до логин-скриптов.
Теперь осталось раскомментировать описания [netlogon] и [Profiles],
не забыв привести имена в соответствие с нужными.
[netlogon]
comment = Network Logon Service
path = /usr/local/samba/lib/netlogon
guest ok = yes
writable = no
share modes = no
[Profiles]
path = /usr/local/samba/profiles
browseable = no
guest ok = yes
ВНИМАНИЕ - Убедитесь в правильности путей.
Теперь перезапустите сервисы. Теперь вы можете настроить Windows
машины так, что бы они использовали ваш сервер как домен-контроллер
и попробовать ваш домен-контроллер в деле. Если есть необходимость,
вы можете разместить файлы с логин-скриптами в каталоге, на который
указывает netlogon. В нашем случае поместив туда файл user.bat мы
заставим машину исполнять его при логине пользователя user.
Ну а профайлы для "блуждающих" пользователей будут сохраняться в
каталоге profiles/имя_пользователя (каталог необходимо предварительно
создать). Где это указать в настройках Windows - читайте соответсвующие
доки.
Итак, просто сервер или PDC мы сделали. Как сделать BDC или что-то
подобное, подробно описано в доках по samba. Здесь я перепечатывать
инструкции не буду.
Теперь давайте разберемся, как создавать другие "шары" или попросту
говоря, ресурсы.
В квадратных скобочках указывается имя ресурса.
[exchange]
Указываем комментарий для данного ресурса
comment = User staff
Путь для этого ресурса на диске
path = /opt/exchange
Эта папка видна всем
public = yes
В нее можно писать
writable = yes
... но нельзя печатать ;-)
printable = no
файлы, создаваемые разными пользователями, будут принудительно отданы
во владение nobody.nobody
force user = nobody
force group = nobody
Это может оказаться очень полезным для тех ресурсов, которые используют
много людей. В обычном варианте если один пользователь записал файл,
то второй пользователь может его только прочитать. Но будьте внимательны
- так можно легко сделать дыру в системе.
Лично я советую использовать другой вариант - в описании ресурса указать
create mask = 0666
directory mask = 0777
Этим мы приказываем sambe устанавливать права для создаваемых в
этом ресурсе файлов как 666 (rw-rw-rw-) и каталогов 777 (rwxrwxrwx).
В итоге любой пользователь, имеющий доступ до этого ресурса, может
изменить или удалить любой файл. Для "файловой помойки" - самое
то, что надо. И "откуда растут" ноги у файла - тоже отследить чуть
попроще становится. Следует еще раз отметить, что описание вышеуказанного
ресурса составлено так, что бы "файловая помойка" была доступна
только для пользователей, которых знает сервер. Что бы сделать ее
по настоящему "дырой" надо добавить guest ok = yes - тогда в этот
ресурс могут писать все, кто умеет возить мышью в Windows.
Если у вас возникли проблемы с файловым доступом - рекомендую проверить
права на нижележащие каталоги - часто пользователь просто не имеет
доступа к ним. Если вы собрали с поддержкой дисковых квот - проверьте,
не превысил ли пользователь свой лимит.
Но вышеперечисленными параметрами дело не ограничивается - в man
smb.conf рассказано, как ограничить число пользователей, имеющих
право записи в папку (write list) и многое другое.
Но все Windows да Windows - Linux же тоже может спокойно воспользоваться
предоставляемыми другими серверами ресурсами. Просто наберите в консоли строчку
mount -t smbfs -o username=user,password=123,iocharset=koi8-r,codepage=866
//super/exchange /mnt
(здесь я указал, что подключаемся пользователем user с паролем 123).
К сожалению, модуль smbfs без прикладывания напильника чихает на
указание кодировок, поэтому у вас будут проблемы с файлами, которые
содержат русские имена - пока придеться пользоваться smbclient -
хоть он вроде понимает все правильно. Найти патч, который бы хорошо
работал с моим ядром, мне пока не удалось. Если вам тоже, то просто
не набирайте строки с iocharset и codepage.
Вот вроде и все - сервер работает.
(с) 2001 Вячеслав Калошин multik@asplinux.ru
|