Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

2004 г.

Все будет Samba!

Сергей Ефремов, Издательский Дом "Комиздат"

У многих начинающих администраторов ОС Linux возникают те или иные проблемы при настройке и запуске в эксплуатацию системы Samba. Правильно настроенный пакет позволит избежать головной боли в дальнейшем. Итак, начнем…

Лучше день потерять,
зато за десять минут долететь...
(с) Крылья, ноги и хвост

Зачем нужна Samba

Эта служба предоставляет ряд возможностей:

  • разделение файловых систем Linux операционными системами Windows 9x/NT;
  • разделение файловых систем Windows 9x/NT операционной системой Linux;
  • совместное использование принтеров, подключенных к системе Linux, операционными системами Windows 9x/NT;
  • совместное использование принтеров, подключенных к Windows 9x/NT, операционной системой Linux;
  • организации системы доменов для клиентов под управлением ОС Windows.

Samba представляет собой протокол, используемый Microsoft для разделения файлов и служб печати. Этот протокол был разработан в 1987 году и позже перенесен на платформы Linux Эндрю Триджеллом (Andrew Tridgell). Официальный сайт Samba, тут вы всегда найдете интересующую вас информацию и новые версии пакета.

Что нам надо для счастья

  1. Операционная система Red Hat Linux 7.2 - на мой взгляд, этот релиз, хоть он и не самый новый, наиболее оптимален для серверов.
  2. Стабильная версия Samba - например, версия 2.2.5, пакет samba-2.2.5.tar.gz.
  3. Компилятор зыка С - gcc (рекомендую установить версию gcc 3.1).
  4. Патч Network Recycle Bin, разработанный в Amherst College. Как видно из названия, этот пачт позволит расширить стандартную функциональность поддержкой корзины для удаленных файлов на сетевых дисках.
  5. Ну и конечно - физический или виртуальный сервер, на который мы будем устанавливать программу (в моем случае это был Dual PIIIs 866, 512M ECC, SCSI RAID Mylex170, 4 HDD SCSI IBM 18G в RAID5, Teckram 390U + SCSI 18G Seagate).

Организация дисковых разделов

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

/boot 100M Загрузочный раздел
/ 3.5G Корень системы с не выделенным /home /usr
/tmp 2G Раздел для временных файлов
swap 1G Раздел виртуальной памяти
/var 6G Раздел для рабочих данных системных программ и ведения логических журналов программ
/install 5.3G Раздел с инсталляционным ПО и драйверами для машин пользователей
/FileServer 40.6G Раздел файлового сервера
/Vol 17G Раздел хранения в архивном виде данных пользователей

Не выделяю отдельно Home, поскольку для задач пользователей предоставление каждому пользователю отдельного домашнего каталога совершенно не нужно. Это связано с тем, что работа организована по отделам,- и, соответственно, пользователи одного отдела должны иметь доступ к файлам друг друга, для хранения же прочей информации каждый пользователь использует локальный жесткий диск.

Установка

Все операции проводим под авторизацией root (администратора системы).

Распакуем пакет samba-2.2.5.tar.gz в каталог /usr/src/redhat/SOURCES:

# cat samba-2.2.5.tar.gz | gzip -d | tar xvpf -

Теперь установим поддержку "сетевой корзины". Зачем нужна "сетевая корзина"? Все операционные системы, имеющие GUI, предоставляют пользователям (в той или иной мере) так называемую "корзину", которая служит для временного хранения файлов, удаленных пользователем на своей рабочей станции. При работе в сети эти функции обычно недоступны для сетевых ресурсов, поэтому администраторам системы приходиться делать периодический BackUp файлов пользователей. Но это перестает быть эффективным, если удаленный файл не был сохранен с помощью программ, организующих BackUp. Именно для такого случая и нужна "сетевая корзина".

Еще одно ее достоинство - возможность восстановления предыдущей версии файла пользователем самостоятельно, без привлечения администратора сети. Но здесь сразу же стоит сделать некоторые замечания:

  • "сетевая корзина" - это обычная папка, которую можно размещать как на текущем (классический вид), так и на специализированном ресурсе. Причем в последнем случае на этом же диске могут находиться и корзины других пользователей - в виде так называемого Online Backup ресурса;
  • по умолчанию в патче атрибуты доступа на корзину - 0700. То есть в эту папку может зайти и что-либо с ней делать только владелец этого ресурса. Это не вызывает проблем, если пользователь использует сетевой ресурс один,- но обычно одним ресурсом пользуется несколько пользователей, и в этом случае возникает ситуация, когда только один пользователь может удалять файлы. Для решения этой проблемы предлагаю в файле reply.c.patch изменить строку №15 с "+ int dir_mask=0700;" на "+ int dir_mask=0777;" - это позволит всем пользователям данного ресурса корректно работать с данной папкой;
  • если в системе используются квоты (quota), то их установки влияют и на корзину - так что при расчете квот нужно учитывать этот момент;
  • в ходе эксплуатации была обнаружена проблема, заключающаяся в том, что, если в конфигурационном файле указать полный, а не относительный путь к корзине на ресурсе, то при попытке пользователя удалить файл в корзине происходило следующее: файл не удалялся, а переименовывался по формату "имя файла. (Copy #N).расширение" (где N - номер файла с одинаковыми именами). То есть срабатывал алгоритм, по условиям которого, если файл с определенным именем есть в корзине, то происходит не замена старого файла новым, а добавление дополнительного суффикса и инкрементация его номера. Для решения данной проблемы необходимо в файле reply.c.patch изменить строку № 38 с "+ if (strcmp (fname,bin)){" на "+ if (access (bin, F_OK)!=-1) {".

По окончанию описанных мероприятий переходим к компиляции пакета и его установке, для чего устанавливаем патч:

# patch /usr/src/redhat/SOURCES
     /samba-2.2.5/source/include/proto.h 
     /usr/src/readhat/SOURCES/proto.h.patch

# patch /usr/src/redhat/SOURCES
     /samba-2.2.5/source/param/loadparm.c 
   /usr/src/readhat/SOURCES/loadparm.c.patch

# patch /usr/src/redhat/SOURCES
     /samba-2.2.5/source/smbd/reply.c 
      /usr/src/readhat/SOURCES/reply.h.patch

И выполняем конфигурацию пакета инсталляции (полный перечень всех параметров можно получить по команде./configure --help):

  • переходим в каталог /usr/src/redhat/SOURCES/samba-2.2.5/source
  • # cd /usr/src/redhat/SOURCES/samba-2.2.5/source
  • выполняем конфигурирование:
  • # ./configure --prefix=/usr --with-quota 
                  --with-smbmount --with-msdfs 
                  --with-privatedir=/etc/samba 
                  --with-configdir=/etc/samba 
                  --with-lockdir=/var/lock/samba 
                  --with-piddir=/var/run/samba 
                  --with-logfilebasedir=/var/log/samba
    

    Этим мы дали команду включить в сборку smbmount, который служит для монтирования SMB-ресурсов в файловую структуру Linux, включили поддержку квот (quota), а также поддержку Microsoft DFS, и приказали устанавливаться в каталог /usr;

  • далее выполняем стандартные:
  • # make; make install
  • еще одним шагом сделаем, следующее:
  • копируем файл smb.init:

    # cp /usr/packaging/RedHat/smb.init /etc/init.d/smb

    делаем симлинк на это файл (чтобы при старте сервера у нас всегда запускалась служба):

    # ln -s /etc/init.d/smb /etc/rc3.d/S99samba

    и, на всякий случай,- для init 5:

    # ln -s /etc/init.d/smb /etc/rc5.d/S99samba

    В результате получаем установленный пакет. Начинаем его настраивать. Основной файл конфигурации и файл паролей пользователей будет находиться в /etc/samba.

    Приступаем к настройке

    Для начала определимся со структурой каталогов на разделе /FileServer - для примера рассмотрим такой вариант:

    /FileServer/etc Папка будет содержать файлы конфигурации Samba
    /FileServer/netlogon Папка для скриптов входа в домен
    /FileServer/otdel_1 Папка 1 отдела
    /FileServer/otdel_N Папка N отдела
    /FileServer/Public Общий для всех отделов ресурс

    Соответственно, в основном файле конфигурации /etc/samba/smb.conf прописываем:

    include=/FileServer/etc/smb.global
    include=/FileServer/etc/%U.conf

    - то есть мы будет управлять каждым пользователем отдельно. Такое управление выбрано как более гибкое, нежели управление группами пользователей, потому что оно позволяет более жестко контролировать отдельных пользователей в случае необходимости в таком контроле. В обычный ситуации я создаю один конфигурационный файл для всей группы, а для отдельных пользователей делаю на него symlink ("мягкую" ссылку на файл) по имени пользователя.

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

    # chmod 777 /FileServer/otdel*
    # chmod 777 /FileServer/Public*

    Теперь сформируем файл /FileServer/etc/smb.global:

    [global]
    null passwords = false
    workgroup=MY_DOMAIN
    netbios name=MyServ
    server string=File Server
    character set=KOI8-R
    client code page=866
    unix password sync = yes
    passwd chat = *new*password* %n\n *new*password*
    %n\n *success*
    passwd program = /usr/bin/passwd %u
    interfaces=eth0
    bind interfaces only=True
    hosts deny=ALL
    hosts allow=192.168.0.0/255.255.0.0 127.0.0.1
    protocol=NT1
    security=domain
    encrypt passwords=yes
    lm interval=0
    oplocks=False
    level2 oplocks=No
    
    syslog=1
    wins support=Yes
    domain master=Yes
    local master=Yes
    preferred master=Yes
    os level=255
    log level=0
    log file=/dev/null
    domain logons=yes
    logon script=%U.bat
    create mask=0666
    directory mask=0777
    security mask=0777
    force create mode=0777
    nt acl support =yes
    socket options =SO_KEEPALIVE SO_BROADCAST 
                                       TCP_NODELAY
    SO_RCVBUF=4096 SO_SNDBUF=4096
    domain admin group = root
    add user script = /usr/sbin/useradd -d 
                                      /dev/null -g
    machines -s /bin/false -M %u
    logon path = \%L\Profiles\%U
    
    [Profiles]
    path = /var/lib/samba/profiles
    browseable = no
    read only = no
    create mask = 0600
    directory mask = 0700

    Проведем анализ - что же мы тут написали. Как видим, у нас есть два раздела: [global] и [Profiles] - первый отвечает за информацию непосредственно о сервере и общих настройках, а второй описывает каталог, в котором будут храниться профили пользователей на сервере. Соответственно, каталог /var/lib/samba/profiles должен существовать - и при этом права доступа должны разрешать писать туда всем (# chmod 777 /var/lib/samba/profiles).

    Раздел [global] - главные моменты:

    workgroup Название домена, в котором участвует сервер
    netbios name Как будет откликаться сервер по NetBIOS-протоколу. Не делайте его таким же, как и имя рабочей группы!
    hosts allow Список сетей, которым разрешен доступ к серверу
    interfaces Список сетевых интерфейсов, которым разрешен доступ к серверу
    security Говорит, какой будет аутентификация
    encrypt passwords Разрешаем шифрованные пароли
    local master Samba сразу берет на себя роль мастер-браузера
    preferred master При запуске устраивает перевыборы с наибольшим шансом для себя
    wins support Запускаем wins-сервер
    os level Уровень ОС. Чем выше номер, тем выше вероятность стать главным браузером сети
    domain logons Разрешаем подсоединения в режиме домена
    logon script Скрипт, который выполнится при входе в домен
    domain admin group Какой пользователь может добавлять машины и пользователей в домен
    add user script Позволяет samba работать как PDC Windows, то есть добавляет имя машины в список зарегистрированных в домене

    Более подробную информацию по командам конфигурации samba можно получить с помощью # man smb.conf.

    Следующим этапом мы создадим файл smb.netlogon со таким содержимым:

    [netlogon]
    path=/FileServer/netlogon
    writeable=no
    guest ok=no
    browsable=no
    available=yes

    Здесь описывается "шара" (сетевой ресурс) для возможности выполнения скрипта при входе в домен.

    И последний штрих - пример файла конфигурации для пользователя user, принадлежащего к отделу № 1, файл user.conf:

    include=/FileServer/etc/smb.global
    include=/FileServer/etc/smb.netlogon
    
    [Otdel]
    path=/FileServer/otdel_1
    comment=Информация отдела
    browsable=yes
    available=yes
    writeable=yes
    recycle bin=/FileServer/otdel_1/.recycled
    mangled names=no
    directory mask=0777
    create mask=0666
    fstype=NTFS
    
    [Public]
    path=/FileServer/Public
    comment=Общая информация
    browsable=yes
    available=yes
    writeable=yes
    mangled names=no
    directory mask=0777
    create mask=0666
    fstype=NTFS
    
    [Inst_Prog]
    path=/install
    comment=Инсталяционное ПО
    browsable=yes
    available=yes
    writeable=no
    mangled names=no
    fstype=NTFS
    
    [HP_5000]
    printer=lp
    comment = Queue for HP LaserJet 5000
    browseable = yes
    printable = yes
    public = yes
    writable = no
    create mode = 0700

    Проанализируем, что получилось. Итак, у нас есть четыре сетевых ресурса, три из них - это дисковые пространства, а последний - очередь на сетевой принтер. Параметр printer=lp дает нам ссылку на имя очереди принтера, который предварительно был установлен в системе и получил имя lp. Менеджер управления принтерами вызывается с помощью команды:

    # /usr/bin/redhat-config-printer

    Ресурс [Inst_Prog] предоставляет пользователям возможность получить доступ к инсталляционным пакетам программ и драйверам в режиме "только чтение".

    Ресурс [Otdel] - это папка отдела, к которому принадлежит пользователь; при описании этого ресурса была использована команда для организации на этом ресурсе "сетевой корзины" (recycle bin=/FileServer/otdel_1/.recycled). Как видно из синтаксиса команды, мы можем указать в качестве корзины как полный путь, так и относительный (например: recycle bin=.recycled). При использовании относительного пути в качестве базы для имени будет использован путь к сетевому ресурсу, в котором и описано правило по использованию "сетевой корзины".

    Следующим шагом будет написание файла скрипта, который будет выполняться при входе в домен,- обычно в этом файле производят подключение сетевых ресурсов и синхронизацию времени, хотя можно выполнять и другие задачи (например, запуск на рабочей станции программы удаленного администрирования - Remote Admin).

    Скрипт /FileServer/netlogon/user.bat:

    @echo off
    net use h: \MyServ\Otdel
    net use i: \MyServ\Public
    net use k: \MyServ\Inst_Prog
    net time \MyServ /SET /YES

    Здесь следует обратить внимание на одну деталь, связанную с кодовыми таблицами Windows и Linux: созданный в Linux файл для операционной системы выглядит как одна строка и, соответственно, написанные нами команды выполняться не будут. Чтобы обойти эту проблему, воспользуемся программой конвертации файлов из кодовой системы Linux/Unix в DOS/Windows:

    # unix2dos /FileServer/netlogon/user.bat

    На выходе получим файл в кодировке DOS, который ОС Windows сможет правильно интерпретировать.

    Нам осталось сделать еще одну маленькую операцию - и можно будет переходить к тестированию наших настроек.

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

    Для решения этой задачи создадим скрипт clear_recycled, который поместим в каталог /etc/cron.daily. Это позволит выполнять скрипту каждую ночь и выполнять запланированные нами действия над "сетевой корзиной". В тело скрипта поместим следующие строки:

    #del after 1 day recycled file
    find /FileServer/otdel*/.recycled -type f -atime +1
    -exec rm {} \; >& /dev/null

    Приведенный скрипт просматривает во всех папках отделов "сетевую корзину" - и файлы, которые были помещены туда более одного дня назад, будут удалены. Параметр, отвечающий за данную опцию,- -atime +1. Здесь вы можете указать любое нужное количество дней. (Более подробно о возможностях команды find смотрите: man find.)

    Графический интерфейс управления Samba

    Этот интерфейс называется swat, он является так называемым веб-интерфейсом (то есть его можно использовать на любом компьютере, имеющем веб-браузер). Для активации доступа к этой службе необходимо создать в каталоге /etc/xinetd.d файл swat следующего содержания:

    service swat
    {
    port		 = 901
    socket-type = stream
    wait		 = no
    only_from = <IP адрес рабочей станции 
                              администратора>
    user		 = root
    server = /usr/bin/swat
    log_on_failure += USERID
    disable		= no
    }

    После этого перезапускаем службу xinetd:

    # /etc/init.d/xinetd restart
    Рис. 1. Тест полученных результатов

    Теперь, если в браузере на рабочей станции администратора набрать: http://192.168.0.1:901 - получим графический интерфейс управления пакетом.

    Прежде чем начать непосредственное тестирование установленного пакета, необходимо выполнить следующие операции:

  • создать в системе группы, к которым будут принадлежать наши пользователи:

  • # groupadd otdel_1
    ...
    # groupadd otdel_N
  • создать группу, в которую будем затем помещать имена машин пользователей (необходимо для ОС Windows 2000/XP/2003 Server):
  • # groupadd -g 9999 machines
  • создать скрипт machine_add (в папке /usr/bin) - для ручного добавления имен машин в наш домен:
  • useradd -d /dev/null -c "User PC" 
                         -g machines -s /bin/false 
                         -M $1
    passwd -l $1
    smbpasswd -a -t $1

    В качестве параметра нашему скрипту передается имя компьютера с добавленным в конце знаком $. Например, для нашего пользователя user имя его ПК - otdel_n1_user:

    # /usr/bin/machine_add "otdel_n1_user$"
  • добавить в систему наших пользователей - с учетом принадлежности их своим группам:
  • # useradd -c "Фамилия Имя Отчество" -g otdel_1 -s
    /bin/false user
  • и, наконец, добавить нашего пользователя в список пользователей samba:
  • # smbpasswd -a user

    - с вводом ему первичного пароля. После входа в сеть пользователь на рабочей станции может самостоятельно сменить себе пароль - причем, тот должен будет удовлетворять двум условиям: не быть "пустым" и иметь длину не менее 6-ти символов. Эти условия контролируются Samba и при их нарушении смена пароля не будет допущена.

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

    # /etc/init.d/smb start

    Проверяем, что демон действительно работает:

    # /etc/ini.d/smb status

    В результате мы должны получить нечто вроде этого:

    smbd (pid 1488) выполняется...
    nmbd (pid 1492) выполняется...

    Переходим к проверке доступности ресурсов для пользователей (на примере пользователя user):

    # smbclient -L MyServ -U user
    added interface ip=192.168.0.2 bcast=192.168.0.255
    nmask=255.255.255.0
    Got a positive name query response from 192.168.0.1
    (192.168.0.1)
    Domain=[MY_DOMAIN] OS=[Unix] Server=[Samba 2.2.5]
    Sharename Type Comment
    --------- ---- -------
    IPC$ IPC IPC Service (Samba Server)
    ADMIN$ Disk IPC Service (Samba Server)
    Otdel Disk Информация отдела
    Public Disk Общая информация
    Inst_Prog Disk Инсталяционное ПО
    HP_5000 Printer Queue for HP LaserJet 5000
    Server Comment
    --------- -------
    MyServ File Server
    Workgroup Master
    --------- -------
    MY_DOMAIN MyServ

    Как видно из полученного сообщения, все прошло удачно и при обращении к samba server пользователь получил свои ресурсы.

    Настройка Windows-клиента

    Прежде чем ввести компьютер в созданный домен, необходимо (для ОС Windows 2000/XP/2003 Server) изменить параметры входа в домен. Под этим подразумевается, что мы отключим некоторые ключи, использующиеся для задания специального доверительного общения между доменом, сделанным на базе ОС Windows, и Windows-клиентом. Для упрощения этого процесса создадим файл domain_fix.reg следующего содержания:

    REGEDIT4
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
                   \Services\Netlogon\Parameters]
    "requiresignorseal"=dword:00000000
    "requirestrongkey"=dword:00000000
    "sealsecurechannel"=dword:00000001
    "signsecurechannel"=dword:00000001

    Следующим шагом будет ввод ПК в домен.

    Рис. 2. Ввод ПК в домен - для Windows 2000/ XP/ 2003 Server

    Для ОС Windows 9x все очень просто - необходимо в Свойствах сети выбрать службу Microsoft и в ее свойствах указать, что рабочая станция подключается в домен, и указать также его имя.

    Для Windows 2000/XP/2003 Server нужно вызвать вкладку Свойства на Мой компьютер - и выбрать вкладку Имя компьютера. Далее - команда Изменить (см. рис. 2).

    После этого ОС просмотрит текущую сеть на предмет наличия домена. Если тот будет найден, появится диалоговое окно, в котором вы (в качестве пользователя) должны указать логин пользователя, имеющего права для ввода рабочей станции в домен (в нашем случае, и по умолчанию, это root), и указать его пароль. После того как система сообщит о вводе рабочей станции в домен, она предложит перезагрузиться.

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

    Если мы выбираем первый вариант, можно перегрузить систему и при загрузке просто указать имя пользователя и домен, с которого будем загружаться. Или же можем добавить пользователя через Панель управления > Администрирование > Управление компьютером > Локальные пользователи > Пользователи (создаем нового пользователя с указанием того, в каком домене он будет проходит аутентификацию и к какой группе будет принадлежать - например, Администраторы).

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

    Выводы

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

    Новости мира IT:

    Архив новостей

    Последние комментарии:

    Вышел web-браузер Chrome 52 (1)
    Суббота 23.07, 18:51
    Loading

    IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
    тел. +7 985 1945361
    Пресс-релизы — pr@citforum.ru
    Обратная связь
    Информация для авторов
    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2015 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...