Совместное использование ресурсов в Windows и Linux

Виктор Кулагин, Сергей Кулагин

Что такое SAMBA?

Установка

Конфигурационный файл smb.cnf

Пользователи и пароли

Доступ к дискам Linux из Windows

Доступ к дискам Windows из Linux

Доступ к принтеру Linux для клиентов Windows

Доступ к принтеру Windows для клиентов Linux

Русификация и тестирование файла конфигурации

 

В последнее время популярность Linux растет буквально каждый день. Linux является высокопроизводительной некоммерческой операционной системой, одной из разновидностей Unix. Как известно, она была создана выпускником Хельсинкского университета Линусом Торвальдсом. Основными преимуществами Linux являются открытость и мультипоточность, кроме того, в ней есть возможности четкого разграничения ресурсов и уровней доступа пользователей. На сегодняшний день многие производители программного обеспечения поддерживают эту операционную систему; среди них выделим Oracle и Informix.

В этой статье рассматривается, как организовать совместное использование ресурсов операционных систем Windows и Linux с помощью пакета программ Samba.

Что такое SAMBA?

Samba — набор программ, которые предназначены для организации доступа клиентов к файловому пространству сервера и принтерам с помощью протоколов SMB (Server Message Block)и CIFS (Common Internet Filesystem). Первоначально написанный для Unix Samba теперь также работает под управлением и других ОС, в частности OS/2 и VMS. Это означает, что такие средства этих операционных систем, как файл-сервер и сервер печати, могут быть использованы для SMB- и CIFS-клиентов. В настоящее время существуют соответствующие клиенты для DOS, Windows NT, Windows 95, Linux smbfs, OS/2, Pathworks. Протокол SMB используется Microsoft Windows NT и 95 для организации доступа к дискам и принтерам.

При помощи SAMBA возможно:

  • предоставлять доступ к файловой системе под ОС Linux для Windows-машин;
  • получать доступ к файловой системе под ОС Windows для Linux-машин;
  • предоставлять доступ к принтерам под ОС Linux для Windows-машин;
  • получать доступ к принтерам под ОС Windows для Linux-машин.

Компоненты пакета Samba выполняют следующие функции:

  • Демон smbd предоставляет службы доступа к файлам и принтерам для клиентов протокола SMB, таких как Windows 95/98, Windows for Workgroups, Windows NT или LanManager. Конфигурация для этого демона задается в файле smb.cfg.
  • Демон nmbd обеспечивает поддержку сервера имен Netbios для клиентов. Он может запускаться в интерактивном режиме для опроса других демонов службы имен.
  • Программа smbclient является простым SMB-клиентом для UNIX-машин. Она используется для доступа к ресурсам на других SMB-совместимых серверах (таких как Windows NT), а также позволяет UNIX-станции воспользоваться удаленным принтером, подключенным к любому SMB-серверу (например, к компьютеру с WfWg).
  • Утилита testparm предназначена для проверки файла конфигурации smb.conf.
  • Утилита smbstatus позволяет выяснить, кто в данный момент использует сервер smbd.
  • Утилита nmblookup дает возможность запрашивать имена NetBios из UNIX-машин.
  • При помощи утилиты make smbcodepages создаются файлы для описания SMB кодовой страницы.
  • Утилита smbpasswd дает возможность шифровать пароли.

Каждый компонент детально описан на страницах руководства, поставляемого с пакетом Samba.

В начало

В начало

Установка

Пакет Samba очень прост в установке и настройке.

Для начала будем считать, что вы установили дистрибутив RedHat с поддержкой Samba.

Итак, начнем.

Для работы пакета Samba необходим запуск двух демонов:

  • smbd (демон SMB);
  • nmbd (демон сервера имен NetBIOS).

Они устанавливаются в /usr/sbin и могут запускаться либо вручную, либо автоматически при загрузке из системных скриптов, либо из inetd.conf. Рассмотрим оба автоматических запуска.

Первый способ — из системных стартовых скриптов. Необходимо написать следующий скрипт в файл /etc/rc.d/init.d/smb и создать на него символические ссылки с именами файлов, указанных в комментариях.

#!/bin/sh 
# 
# /etc/rc.d/init.d/smb - запускает и останавливает SMB-сервисы
#
#Следующие файлы должны быть символическими ссылками на этот файл:
# symlinks: /etc/rc.d/rc1.d/K35smb (Убивает SMB-сервисы при выключении)
# /etc/rc.d/rc3.d/S91smb (Запускает SMB-сервисы 
# в мультипользовательском режиме)
# /etc/rc.d/rc6.d/K35smb (Убивает SMB-сервисы при перезагрузке)
#
# Источник библиотеки функций.
. /etc/rc.d/init.d/functions
# Источник сетевой конфигурации.
. /etc/sysconfig/network
# Проверка сети.
[ ${NETWORKING} = “no” ] && exit 0
# Смотрите, как мы здесь вызываем.
case “$1” in
  start)
    echo -n “Starting SMB services: “
    daemon smbd -D 
    daemon nmbd -D 
    echo
    touch /var/lock/subsys/smb
    ;;
  stop)
    echo -n “Shutting down SMB services: “
    killproc smbd
    killproc nmbd
    rm -f /var/lock/subsys/smb
    echo “”
    ;;
  *)
    echo “Usage: smb {start|stop}”
    exit 1
esac

Второй способ. Запуск SMB-демонов из inetd. Для этого необходимо включить следующие строки в файл /etc/inetd.conf:

# SAMBA NetBIOS services (for PC file and print sharing) 
netbios-ssn stream tcp nowait root /usr/sbin/smod smod 
netbios-ns dgram upd wait root /usr/sbin/nmbd nmbd 

Далее производится рестарт демона inet:

kill –HUP 1

Выберите один из способов запуска демонов и примените его. Следует заметить, что при установке пакета SAMBA по умолчанию демоны всегда включаются в «автомат». Так что скрипты можно не редактировать.

После того как мы разобрались с запуском демонов, необходимо сконфигурировать SMB-сервер. Это операция заключается в настройке главного конфигурационного файла — /etc/smb.cnf.

В начало

В начало

Конфигурационный файл smb.cnf

Настройка Samba в Linux (или других UNIX-машинах) контролируется единственным файлом — /etc/smb.cnf. Этот файл определяет, к каким системным ресурсам вы намереваетесь дать доступ клиентам и какие ограничения собираетесь наложить на использование этих ресурсов.

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

  ‘имя = параметр’  

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

Каждая секция в конфигурационном файле (кроме секции [global]) описывает ресурс доступа. Имя секции — это имя ресурса доступа. Ресурс доступа включает путь к директории доступа и описание прав доступа пользователей.

Например, создадим на диске директорию /common и выделим ее как сетевой ресурс для всех клиентов по записи и чтению:

[common]
    path = /common 
    public = yes
    guest ok = yes
    writable = yes
    printable = no

Все записанные любым пользователем в этот ресурс файлы будут иметь права:

  • для создателя — все (чтение, запись, исполнение);
  • для группы (в которую входит пользователь) — чтение;
  • для всех остальных — чтение.

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

create mask = 0777

Существует три специальные секции:

  1. Секция [global] определяет некоторые переменные, которые Samba будет использовать для определения доступа ко всем ресурсам.
  2. Секция [homes] позволяет удаленным пользователям иметь доступ к своим (и только своим) домашним каталогам на Linux-машине. Так что если пользователи Windows попытаются подключиться к этому разделу со своих Windows-машин, то они будут подключены к своим персональным домашним директориям. Заметим, что для того, чтобы это сделать, они должны быть зарегистрированы на этой Linux-машине.
  3. Секция [printers] схожа с [homes], но для принтеров.

Для понимания SMB-сервера верхнего и нижнего регистра в наименовании файлов в секции [global] необходимо раскомментировать строку

case sensitive = yes

Пример части файла:

[global]
; Раскомментируйте эту строку, если вы хотите дать доступ
                       ; пользователю “гость”
; guest account = nobody 
log file = /var/log/samba-log.%m ;путь лог-файла
lock directory = /var/lock/samba 
share modes = yes


[homes]                ; В сети ресурс будет    виден как имя пользователя 
                       ;или будет отсутствовать, 
; если пользователь не найден 
comment = Home         ; В комментарии    будет написано “Home” 
guest ok = no          ; Запретим    гостевой доступ 
browsable = no         ; Не будем показывать    другим 
read only = no         ; Разрешим запись  
create mode = 700      ; Создаваемые файлы будут    видны только пользователю

[public]               ;Под таким именем ресурс будет виден
path = /var/public     ; Путь к ресурсу
comment = Welcome!     ; Что будет написано при детальном листинге
force user = nobody    ; Работа с файлами будет производиться 
; от лица nobody
guest ok = yes         ; Возможен ли доступ для    любого пользователя
browsable = yes        ; Появится ли ресурс при листинге
read only = no         ; Не только для чтения.

[tmp] 
comment = Temporary file space 
path = /tmp 
read only = no 
public = yes
В начало

В начало

Пользователи и пароли

Для доступа клиента к SMB-серверу необходимо:

1. Добавить пользователя в систему.

2. Добавить пользователя в учетные записи SMB-сервера. Для этого надо ввести команду:

smbadduser LinuxUser:SMBUser, 

где LinuxUser — имя пользователя в системе

SMBUser — имя SMB-пользователя.

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

3. Раскомментировать строки с описанием пользователей и их паролей:

smb passwd file = /etc/smbpasswd
username map = /etc/smbusers

Внимание: если вы хотите дать доступ пользователям, работающим под Windows с шифрованием пароля, необходимо раскомментировать строку:

encrypt passwords = yes
В начало

В начало

Доступ к дискам Linux из Windows

Организация доступа к дискам Linux очень проста и сводится всего лишь к редактированию файла конфигурации smb.cnf, то есть к добавлению секции (как это делается, было рассмотрено выше).

В начало

В начало

Доступ к дискам Windows из Linux

Программа клиента SMB для UNIX-машин включена в дистрибутив Samba. Она обеспечивает ftp-подобный интерфейс командной строки. Вы можете использовать эту утилиту для переноса файлов сервера под управлением Windows клиенту под управлением Linux. Для того чтобы увидеть, какие ресурсы доступны на данной машине, необходимо выполнить команду:

/usr/sbin/smbclient -L host

где «host» — это имя машины, доступные ресурсы которой вы хотите увидеть. Эта команда вернет список имен «сервисов» — то есть имен дисков или принтеров, к которым может быть получен доступ. До тех пор пока SMB-сервер не будет настроен для управления доступом, он будет запрашивать пароль. Введите в ответ на запрос пароль для пользователя «гость (guest)» или ваш персональный пароль на этой машине.

Например:

smbclient -L redfox

Вывод этой команды должен выглядеть примерно так:

Server time is Sat Aug 10 12:01:11 1998
Timezone is UTC+3.0
Password: 
Domain=[DOMAIN42] OS=[Windows NT 4.0] Server=[NT LAN Manager ]
Server=[REDFOX] User=[] Workgroup=[DOMAIN42] Domain=[]
 Sharename Type Comment
   ———— —— ———-
   ADMIN$ Disk Remote Admin
   public Disk Public 
   C$ Disk Default share
   IPC$ IPC Remote IPC
   OReilly Printer OReilly
   print$ Disk Printer Drivers
This machine has a browse list:
 Server Comment
   ———— ———-
   ALEX Samba 1.9.15p8
   MARRY Samba 1.9.15p8
   VASER Samba 1.9.15p8
   REDFOX 

Browse list показывает другие SMB-серверы в сети с доступными ресурсами.

Для использования клиента выполните следующую команду:

/usr/sbin/smbclient service <password>

где «service» — имя машины и сервиса. Например, если вы пытаетесь обратиться к директории, которая доступна под именем «public» на машине, названной «redfox», то имя сервиса должно звучать как \\redfox\public. Однако вследствие ограничений оболочки вам необходимо спрятать обратный слэш, так что в итоге эта командная строка будет выглядеть следующим образом:

/usr/sbin/smbclient \\\\redfox\\public mypasswd

где «mypasswd» — символьная строка вашего пароля.

Вы получите приглашение smbclient:

  Server time is Sat Aug 10 12:01:11 1998
Timezone is UTC+3.0
Password: 
Domain=[DOMAIN42] OS=[Windows NT 4.0] Server=[NT LAN Manager ]
Server=[REDFOX] User=[] Workgroup=[DOMAIN42] Domain=[]
smb: \> 

Чтобы получить помощь по использованию smbclient, напечатайте «h»:

smb: \> h
ls dir lcd cd pwd 
get mget put mput rename 
more mask del rm mkdir 
md rmdir rd prompt recurse 
translate lowercase print printmode queue 
cancel stat quit q exit 
newer archive tar blocksize tarmode 
setmode help ? ! 
smb: \> 
В начало

В начало

Доступ к принтеру Linux для клиентов Windows

Для организации доступа Windows-машин к Linux-принтеру вам необходимо убедиться, что принтер работает под Linux. Если вы можете печатать под Linux, то организация доступа к принтеру будет очень простой.

Добавьте настройку принтера в ваш файл smb.cnf:

[global]

  printing = bsd
  printcap name = /etc/printcap
  load printers = yes
  log file = /var/log/samba-log.%m
  lock directory = /var/lock/samba

[printers]
  comment = All Printers
  security = server
  path = /var/spool/lpd/lp
  browseable = no
  printable = yes
  public = yes
  writable = no
  create mode = 0700

[ljet]
  security = server
  path = /var/spool/lpd/lp
  printer name = lp
  writable = yes
  public = yes
  printable = yes
  print command = lpr -r -h -P %p %s

Убедитесь, что путь к принтеру (в этом случае для [ljet]) соответствует буферной директории, указанной в файле /etc/printcap!

Следует заметить, что существуют некоторые проблемы с доступом к принтерам на UNIX-машинах для машин с Windows NT с применением Samba. Одна из них состоит в том, что NT неправильно видит сетевой принтер, другая связана с проблемой пароля. Для решения этих вопросов ознакомьтесь с файлом docs/WinNT.txt дистрибутива Samba.

В начало

В начало

Доступ к принтеру Windows для клиентов Linux

Для доступа к принтеру, инсталлированному на компьютере с ОС Windows, необходимо следующее:

  • Вы должны иметь правильные записи в файле /etc/printcap, которые должны соответствовать локальной структуре директорий (для буферной директории и т.п.).
  • У вас должен быть скрипт /usr/bin/smbprint. Он поставляется вместе с исходными текстами Samba, но не со всеми двоичными дистрибутивами Samba. Его слегка модифицированная копия обсуждается ниже.
  • Если вы хотите преобразовывать ASCII-файлы в Postscript, то вы должны иметь программу nenscript или ее эквивалент. nenscript — это конвертор Postscript, он обычно устанавливается в директорию /usr/bin.
  • Вы можете упростить процесс печати через Samba, используя программы-надстройки. Простой скрипт на perl, который обрабатывает ASCII, Postscript или преобразованный Postscript, приведен ниже.
  • Запись в файле /etc/printcap, приведенном ниже, сделана для принтера HP 5MP на сервере Windows NT. Используются следующие поля файла /etc/printcap:

cm — комментарий

lp — имя устройства, открываемого для вывода

sd — директория спула принтера (на локальной машине)

af — файл учета использования принтера

mx — максимальный размер файла (ноль — без ограничений)

if — имя входного фильтра (скрипта)

Для более детальной информации о печати смотрите Printing HOWTO или справочные страницы по printcap.

  # /etc/printcap
#
# //redfox/oreilly via smbprint
#
lp:\
     :cm=HP 5MP Postscript OReilly on redfox:\
     :lp=/dev/lp1:\
     :sd=/var/spool/lpd/lp:\
     :af=/var/spool/lpd/lp/acct:\
     :mx#0:\
     :if=/usr/bin/smbprint:

Убедитесь, что буферная директория и директория, используемая для учета пользования, существуют и имеют право на запись. Убедитесь, что строка «if» содержит правильный путь к скрипту smbprint (дан ниже) и что записи указывают на правильное устройство вывода (специальный файл /dev).

Далее идет сам скрипт smbprint. Он обычно находится в директории /usr/bin. Этот скрипт поставляется вместе с дистрибутивом исходного кода Samba.

У вас может появиться желание взглянуть на него более внимательно. Существует ряд мелких изменений, которые зарекомендовали себя полезными.

  #!/bin/sh -x
# Этот скрипт является входным фильтром для основанной на printcap
# печати на UNIX-машинах. Он использует программу smbclient для
# печати файла на указанный smb-сервер и сервис.
# Например, вы можете иметь запись в printcap, подобную этой
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# которая создает UNIX-принтер, названный “smb”, который будет
# печатать с помощью этого скрипта. Вам необходимо создать директорию
# спула /usr/spool/smb с соответствующими правами и владельцем

# Установите здесь сервер и сервис, на который вы хотите печатать.
# В этом примере я имею PC с WfWg PC, названную “lapland”, которая
# имеет экспортируемый принтер, называемый “printer” без пароля

#
# Далее скрипт был изменен hamiltom@ecnz.co.nz (Michael Hamilton)
# так что сервер, сервис и пароль могут быть считаны из файла
# /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
#    service=PR_SHARENAME
#    password=”password”
#
# Например,
#    server=PAULS_PC
#    service=CJET_371
#    password=””
#
# Debugging log file, change to /dev/null if you like.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null


#
# The last parameter to the filter is the accounting file name.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config

# Should read the following variables set in the config file:
#    server
#    service
#    password
#    user
eval ‘cat $config_file‘

#
# Some debugging help, change the >> to > if you want to same space.
#
echo “server $server, service $service” >> $logfile

(
# NOTE You may wish to add the line ‘echo translate’ if you want automatic
# CR/LF translation when printing.
      echo translate
      echo “print -”
      cat
) | /usr/bin/smbclient “\\\\$server\\$service” $password -U $user -N -P >>    
         $logfile

Большинство дистрибутивов linux поставляется с программой nenscript для преобразования ASCII-документов в Postscript. Следующий скрипт на perl делает жизнь пользователя легче, обеспечивая простой интерфейс для печати путем использования smbprint.

Использование: print [-a|c|p] <filename>

      -a печатает <filename> как ASCII
      -c печатает <filename> отформатированный как исходный код
      -p печатает <filename> как Postscript
      Если опции не заданы, программа попробует определить
      тип файла и печатать соответственно

Используя smbprint для печати ASCII-файлов, скрипт следит за длинными строками. Если возможно, этот скрипт разрывает длинную строку на пробеле (вместо разрыва в середине слова).

Форматирование исходного кода выполняется с помощью программы nenscript. Она берет ASCII-файл и форматирует его в две колонки с заголовком (дата, имя файла и т.п.). Эта программа также нумерует строки. Postscript-документы уже отформатированы, так что печатаются сразу.

В начало

В начало

Русификация и тестирование файла конфигурации

Пакет SAMBA поддерживает любую кодировку, используемую в названиях файлов. Для того чтобы можно было использовать кодировки с русским алфавитом, необходимо внести несколько строк в конфигурационный файл /etc/smb.cnf в секцию [global]:

character set = KOI8-R
client code page = 866

Оттестировать файл конфигурации smb.cnf можно при помощи утилиты testparm. Если в файле конфигурации нет ошибок, testparm сообщит об этом и выдаст список используемых служб, в противном случае вы получите сообщение об ошибке.

КомпьютерПресс 10'1999

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует