12.2.1. Samba на сервере
Из п.6.3 вы узнали, как использовать пакет Samba (
www.samba.org
) для просмотра общих ресурсов сети Windows. В этом параграфе я объясню, как настроить сервер Samba, чтобы открыть общий доступ к ресурсам компьютера под управлением Linux.С помощью Samba вы сможете;
♦ предоставлять доступ к разделам Linux для рабочих станций Windows;
♦ получать доступ к ресурсам сети Microsoft;
♦ распечатывать документы на сетевых принтерах сети Microsoft, а также предоставить локальный принтер для использования в качестве сетевого.
Вам понадобятся основной пакет samba-common и серверный samba. Из серверного пакета samba устанавливаются демоны smbd и nmbd. Первый из них является носителем протокола SMB, а второй обеспечивает поддержку имен NetBIOS. Сразу же после их настройки ваш компьютер будет отображаться о сети.
После установки сервисы smbd и nmbd конфигурируются как запускаемые в ходе начальной загрузки. Возможно, вас не устраивает такой вариант (например, в тех случаях, когда обращение к ним планируется редко, и вы хотите освободить память). В этой ситуации никто не мешает добавить их в файл конфигурации суперсервера
/etc/xinetd.conf
и запускать «по требованию». При этом не забудьте только отключить их автозапуск С помощью конфигуратора системы.12.2.2. Настройка Samba
В этом параграфе будет рассмотрена настройка пакета Samba «вручную», то есть без помощи конфигуратора. Вы же можете использовать конфигуратор (рис. 12.1), однако имейте в виду одно «но»; если вы будете настраивать Samba или любую другую службу сервера в другом дистрибутиве, знакомого вам конфигуратора в нем может не оказаться. Поэтому вы должны знать хотя бы назначение и расположение системных файлов той или иной службы сервера.
Рис. 12.1. Конфигуратор system-config-samba в дистрибутиве Fedora Core 3
Основным конфигурационным файлом сервера Samba является файл
/etc/smb.conf
. Именно в нем задаются все используемые и предоставляемые ресурсы. Формат данного файла напоминает формат INI-файла Windows.Файл
/etc/smb.conf
состоит из нескольких секций, в начале каждой из которых в квадратных скобках указывается ее имя. Параметры в каждой секции указываются в виде записей Имя=Значение
.Секция [global]Основной является секция
[global]
, ее пример приведен в листинге 12.2.Листинг 12.2. Пример секции global
[global]
workgroup = WORK
comment = Linux Server
guest account = guest
security = share
printing = bsd
printcap name = /etc/printcap
load printers = yes
client code page = 866
character set = koi8-r
encrypt passwords = Yes
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY
SO_RCVBUF=8192
SO_SNDBUF=8192
dns proxy = no
wins support = yes
domain master = yes
interfaces = 192.168.1.1/24 192.168.2.1/24
Директива workgroup определяет рабочую группу или имя домена NT.
Директива comment аналогична параметру NT Description для ОС Windows NT или Description (Описание компьютера) для ОС Windows 9x.
Директива guest account задает имя пользователя. Значение guest означает доступ без регистрации, точнее, под гостевой учетной записью.
Директива security может принимать три значения:
♦share — при каждом доступе будет запрашиваться имя пользовательского ресурса;
♦user — для аутентификации будут использоваться имя пользователя и пароль, которые служат для входа в сеть Windows. Это значение используется по умолчанию;
♦server — для проверки пароля будет использоваться сервер NT.
Директивы printing и printcap name относятся к подсистеме печати. Первая из них задает систему печати типа BSD, а вторая указывает, где расположен файл, содержащий информацию о принтерах. О настройке принтеров мы поговорим немного позже.
Директивы client code page и character set необходимы для корректного отображения русскоязычных имен файлов файловой системы Windows.
В ОС Windows NT, начиная с Service Pack 3, передача паролей по сети происходит в зашифрованном виде. Последние версии Samba поддерживают эту возможность. Чтобы воспользоваться ею, нужно установить значение директивы encrypt password равным yes. Если ваша версия Samba не поддерживает данную возможность, то вы можете отключить использование закодированных паролей в Windows. Правда, вам придется вручную править реестр на всех рабочих станциях Windows, так что проще, по-моему, обновить Samba. Но если вас все же интересует, какой именно параметр реестра Windows нужно изменить, я укажу его:
♦ В разделе реестра ОС Windows NT: [NT HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters] нужно создать ключ EnablePlainTextPassword типа DWORD и установить его значение, равное 1.
♦ В ОС Windows 9x вам нужно создать тот же ключ, но в разделе [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\Parameters].
♦ В ОС Windows 2000 нужно внести изменения в раздел реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters].
Директивы log file и max log size определяют имя файла протокола (журнала) и его максимальный размер.
Параметры сокетов задаются с помощью директивы socket option. Прежде чем устанавливать эти параметры, рекомендую прочитать
man smb.conf
.Если в вашем компьютере установлено несколько сетевых интерфейсов, то вы можете сконфигурировать пакет Samba так, чтобы он использовал все интерфейсы. Как это сделал я, показано в листинге 12.2.
Секция [homes]Следующая секция называется
[homes]
и определяет параметры совместно используемых ресурсов. Пример содержимого этой секции приведен в листинге 12.3.Листинг 12.3. Секция [homes]
[homes]
comment = Home
browseable = yes
writable = yes
Директива browseable=yes разрешает отображение совместно используемых ресурсов в сети Microsoft. Директива writable=yes разрешает запись в каталоги (тот же эффект будет иметь директива read only=no).
Секция [public]В секции
[public]
перечисляются расшариваемые каталоги (листинг 12.4).Листинг 12.4. Секция [public]
[public]
comment = VFAT Partition
path = /mnt/disk_e
read only = no
12.2.3. Практические примеры настройки
Ваших знаний уже достаточно, чтобы самим произвести дальнейшую настройку. В качестве завершения этого параграфа я приведу пару практических примеров (листинг 12.5). Обратите внимание, что в файле smb.conf комментарии могут обозначаться либо решеткой (#), либо точкой с запятой (;).
Листинг 12.5.
; Каталог NETLOGON для входа в домен
[netlogon]
comment = Samba Netlogon Service
path = /var/netlogon
; He устанавливайте значение yes
case sensitive = no
guest ok = yes
locking = no
writable = yes
browseable = yes
; Профиль для совместно используемых ресурсов
[Profiles]
path = /usr/local/samba/profiles
browseable = no
printable = no
guest ok = yes
; Каталог, используемый пользователем admin
; Пользователь admin должен существовать на сервере Samba
[admin]
comment = admin's directory
path = /home/admin
valid users = admin root
read only = no
12.2.4. Доступ к принтеру Linux для Windows-машин
Для обеспечения поддержки печати мы уже сделали почти все возможное. Директива секции
[global]
load printers загружает принтеры из файла /etc/printcap
(листинг 12.2). Используется система печати BSD. Осталось только определить секцию [printers] файла smb.conf
. В этой секции задаются глобальные параметры для всех принтеров, поэтому нет необходимости указывать их отдельно для каждого принтера.Листинг 12.6. Секция [printers]
[printers]
comment = All Printers
security=server
path = /var/spool/lpd/lp
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700
Некоторые директивы, используемые в этой секции (browseable, writable, comment), имеют те же значения, что и в секции [homes]. Директива path задает буферный каталог, в который файлы будут копироваться перед печатью (так называемый спул принтера). Директива public со значением yes разрешает печать из-под гостевой учетной записи, то есть всем желающим. Чтобы запретить печать из-под гостевой учетной записи, укажите public=no: в этом случае доступ к принтеру будут иметь только зарегистрированные на сервере пользователи. Вместо директивы public иногда используется ее синоним —директива guest ok.
Директива writable установлена в значении по для того, чтобы в буферный каталог принтера (спул) могли записываться только печатаемые файлы.
Возможно, вам потребуется разрешить печать только одному или нескольким определенным пользователям на каком-то определенном принтере. Сделать это можно так, как это показано в листинге 12.7.
Листинг 12.7. Разрешение печати определенному пользователю
[admprn]
valid user = root admin administator
path = /home/admin
printer = canon
public = no
writeable = no
printable = yes
Подключение к Windows-компьютеру сетевого принтера, расшаренного сервером или рабочей станцией под управлением Linux, осуществляется точно так же, как подключение обыкновенного сетевого принтера. В операционной системе Windows 98 для этого проделайте следующее:
1. Выполните команду меню Пуск→Настройка→Принтеры.
2. Активизируйте мастера Установки принтера.
3. Выберите тип принтера: сетевой.
4. Укажите путь к принтеру или нажмите на кнопку Обзор для автоматического выбора ресурса.
5. Далее установка сетевого принтера аналогична установке локального.
12.2.5. Доступ к Windows-принтеру с компьютера, работающего под Linux
Настройки сетевого принтера находятся в файле
/etc/printcap
. Примерное содержание этого файла с комментариями приведено в листинге 12.8.Листинг 12.8. Файл /etc/prtntcap
# //nt_ws1/hp5m via smbprint
#
lp:\
# описание принтера
:cm=HP 5MP Postscript hp5in on nt_ws1:\
# имя устройства, открываемого для вывода
:lp=/dev/lp0:\
# каталог спула принтера (на локальной машине)
:sd=/var/spool/lpd/lp:\
# файл учета использования принтера
:af=/var/spool/lpd/lp/acct:\
# максимальный размер файла. Значение 0 означает отсутствие ограничений
:mx# 0:\
# имя входного фильтра
:if=/usr/bin/smbprint:
В пакет Samba входит сценарий smbprint. С помощью этого сценария можно распечатывать документы на сетевом принтере, используя сервисы SMB. Возможно, в состав вашего пакета он не входит, поэтому я воссоздал его в листинге 12.9. Этот листинг частично позаимствован из руководства по пакету Samba.
Листинг 12.9. Сценарий smbprint
#!/bin/sh -х
# (с) Andrew Tridgell
# Этот скрипт является фильтром для системы печати,
# использующей
# файл /etc/printcap
# Он использует программу smbclient для печати файла на
# сетевом принтере,
# который подключен к рабочей станции Windows.
#
#
# Эта запись создает unix-принтер, названный "smb",
# который будет печатать с помощью этого сценария. Вам
# необходимо создать каталог спула /usr/spool/smb с
# соответствующими правами и владельцем
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:
# if=/usr/local/samba/smbprint
# Далее сценарий был изменен Майклом Гамильтоном
# так что сервер, сервис и пароль могут быть считаны из
# файла
# /usr/var/spool/lpd/PRINTNAME/.config
#
# Для того, чтобы это работало, запись в /etc/printcap
# должна включать файл учета использования (af=...):
#
#cdcolour:\
# :cm=CD IBM Colorjet on 6th:\
# :sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\
# :if=/usr/local/etc/smbprint:\
# :mx=0:\
# :lp=/dev/null:
#
# Файл /usr/var/spool/lpd/PRINTNAME/.config должен
# содержать
# server=PC_SERVER
# serviсe=PR_SHARENAME
# password="password"
#
#Например,
# server=PAULS_PC
# service=CJET_371
# password=""
#
# Файл для отладочной информации, можно изменить на /dev/null
#
logfile=/tmp/smb-print.log
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config
eval `cat $config_file`
echo "server $server, service $service" >> $logfile
(
echo translate
echo "print -"
cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile
Теперь вы можете печатать на сетевом принтере. Но, тем не менее, я все же рекомендую прочитать руководство по пакету Samba для получения более подробной информации о печати на сетевых принтерах.
12.2.6. Конфигуратор SWAT
Конфигуратор SWAT (Samba Web-based Administrative Tool) предназначен для настройки пакета Samba через веб-интерфейс. Как и другие конфигураторы, SWAT предоставляет удобный графический интерфейс для администрирования сервера Samba. Основным преимуществом данного конфигуратора является то, что вам не нужно находиться за компьютером, который вы администрируете: администрировать сервера Samba вы можете с любого компьютера вашей сети. Как и при работе с другими конфигураторами, при работе со SWAT вам не нужно знать ни названия, ни расположения, ни формата конфигурационных файлов.
Для установки SWAT нужно установить пакет
samba-swat
.После установки пакета проследите за тем, чтобы в вашем файле
/etc/services
была следующая запись:swat 901/tcp
Конфигуратор SWAT для своей работы использует протокол TCP и порт 901. Тем не менее, вы можете назначить любой другой порт. При изменении номера порта не забудьте изменить номер порта в файле
/etc/inetd.conf
или /etc/xinetd.conf
.При этом, в конфигурационном файле
/etc/xinetd.conf
суперсервера xinetd должна присутствовать секция следующего содержания (листинг 12.10):Листинг 12.10. Настройки службы SWAT
service swat {
disable = no
port = 901
socket_type = stream
wait = no
only_from = 127.0.0.1
user = root
server = /usr/sbin/swat
log_on_failure+= USERID
}
Если вы хотите конфигурировать сервер Samba с любого компьютера вашей сети, закомментируйте директиву only_from=127.0.0.1 или установите любые другие параметры доступа к SWAT.
Теперь нужно перезапустить суперсервер. Для этого введите команду:
# /etc/init.d/xinetd restart
Можно также заставить суперсервер перечитать свой конфигурационный файл:
# killall -HUP xinetd
Все! Настройка SWAT завершена, и теперь можно приступить к конфигурированию Samba с помощью SWAT. Для этого запустите свой любимый браузер и введите URL: http://host:901.
После установления соединения и авторизации вы увидите основное окно конфигуратора (рис. 12.2), в котором все самое нужное находится «под рукой» администратора: от документации до паролей пользователей.
Рис. 12.2. Окно конфигуратора SWAT
В разделе Globals определяются значения глобальных переменных. Вы можете получить подсказку по тому или иному параметру, перейдя по ссылке Help. Установить значение по умолчанию можно, нажав на кнопку Set Default.
В разделе Shares определяются общие ресурсы, а в разделе Printers — общие принтеры. Состояние сервера Samba можно посмотреть в разделе Status. Здесь же можно запустить, остановить и перезапустить сервисы SMB и NMB. В этом разделе можно завершить любое соединение с сервером Samba, а также просмотреть состояние соединения.
В разделе Passwords определяются пользователи, которые имеют доступ к серверу Samba.
12.2.7. Samba и безопасность
Вряд ли стоит разрешать доступ к вашему Samba-серверу всем желающим. Целесообразно разрешить доступ только определенным пользователям, которые должны быть зарегистрированы на сервере Samba. Напомню, что для создания пользователя используется команда adduser, а для изменения его пароля — passwd.
# adduser -s /bin/false samba-user
# passwd samba-user
Первая команда создает пользователя сервера Samba под именем
samba-user
. Параметр -s устанавливает «оболочку» для этого пользователя — /bin/false
. Эта псевдооболочка не позволяет вводить команды, поэтому всем пользователям, которые не нуждаются в работе из командной строки, рекомендуется назначать ее из соображений безопасности.Samba использует свой файл паролей —
/etc/samba/smbpasswd
. В нем всего три поля: регистрационное имя пользователя, UID и хешированный пароль. Для добавления пользователя в файл /etc/samba/smbpasswd
и изменения его пароля Samba использует команду smbpasswd:# smbpasswd samba-user
Совет: если вы хотите добавить всех пользователей из файла
/etc/passwd
в файл /etc/samba/smbpasswd
, то используете для этого следующую команду:# cat /etc/passwd | mksmbpasswd.sh > /etc/samba/smbpasswd
He забудьте изменить права доступа к файлу
/etc/samba/smbpasswd
:# chmod 600 /etc/samba/smbpasswd
Осталось только сделать небольшие изменения в секции
[global]
файла конфигурации /etc/smb.conf
:security = user
12.2.8. Оптимизация Samba
Ваш Samba-сервер медленно работает, и вы уже устали от постоянных жалоб пользователей? Лучшим выходом из данной ситуации будет покупка нового винчестера. Лучше всего покупать SCSI-винчестер со скоростью 10000 оборотов в минуту. В крайнем случае подойдет IDE-диск, поддерживающий режим ATA133 и работающий со скоростью 7200 оборотов в минуту. При покупке такого винчестера обратите внимание на следующие факторы:
♦ ваша материнская плата должна поддерживать режим ATA133;
♦ у вас должен быть специальный кабель для подключения жесткого диска (если материнская плата поддерживает ATA100/133, такой кабель у вас будет);
♦ покупайте винчестер с большим объемом кэша: на рынке можно найти несколько моделей винчестеров, различающихся маркировкой, но в одном случае вы получаете 2 Мб кэша, а во втором — 640 Кб (или 1 Мб, но все равно меньше, чем в более дорогой модели).
Если же денег на покупку такого винчестера нет, попробуем оптимизировать наши настройки. Во-первых, установите значение yes для директивы wide links в файле конфигурации
smb.conf
— это должно повысить производительность сервера, если в общих каталогах имеются ссылки.Во-вторых, в дистрибутивах на ядре 2.4 есть демон bdflush. Он занимается записью буферов, содержащих модифицированные данные файловой системы, на диск. Настройки по умолчанию не очень эффективны:
30 64 64 256 500 3000 60 0 0
Попробуем немного оптимизировать настройки bdflush. Для этого откройте файл
/etc/sysctl.conf
и добавьте в него следующую строку:vm.bdflush = 80 500 64 64 15 6000 6000 0 0
Этим мы говорим демону, чтобы он записывал буферы на диск, когда буфер кэша файловой системы заполнен на 80 процентов.
После этого нужно перезапустить сервис network:
# service network restart
Если вам нельзя ни на секунду останавливать сервис network, вместо модификации файла
/etc/sysctl.conf
введите следующую команду:# sysctl -w vm.bdflush="80 500 64 64 15 6000 6000 0 0"
Чтобы заставить ваш Samba-сервер работать быстрее, попробуем поэкспериментировать с кэшированием памяти: мы будем использовать минимум 60 процентов памяти для кэша.
sysctl -w vm.buffermem = "60 10 60"
ПримечаниеПоследние два параметра (10 и 60) сейчас не используются. Значения по умолчанию — «2 10 60».
12.3. Совместное использование каталогов в Linux Mandrake