GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Базовая настройка SQUID(114104)
Простая и эффективная система подсчета трафика в ОС FreeBSD(50759)
Совместное использование прозрачного прокси-сервера (Squid) и биллинговой системы UTM(41414)
Настройка Squid(37641)
Настройка VPN и NetUP Radius сервера(35372)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Unix » Использование Samba на серверах

Использование Samba на серверах


Ефремов Сергей
postmaster@pfu.donbass.com
http://pfu.donbass.com:7777

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

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

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

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

Домен (DOMAIN) – система организации сети, когда пользователи проходят аутентификацию при входе в сеть (при этом информация о пользователях и их паролях храниться на сервере), и в дальнейшем получают доступ к ресурсам сети без дополнительных запросов, при чем необходимые ресурсы могут предоставлять клиенту сразу при подключении. Например, подключение сетевых дисков и синхронизация времени у клиента.

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

Официальный сайт Samba http://samba.org, где вы всегда найдете интересующую вас информацию и новые версии пакета.

Что нам надо:

  1. Операционная система Red Hat Linux 7.2 (www.redhat.com), на мой взгляд этот релиз хотя и не является самым новым, но наиболее оптимально подходит для серверов;
  2. Стабильная версия Samba (www.samba.org), например, версия 2.2.5, пакет samba-2.2.5.tar.gz;
  3. Компилятор зыка С - gcc, я рекомендую установить версию gcc 3.1 (www.gcc.org);
  4. Патч Network Recycle Bin разработан в Amherst College который, как видно из названия, позволит расширить стандартную функциональность поддержкой корзины для удаленных файлов на сетевых дисках (http://www/amherst.edu/~bbstone/howto/samba.html).
  5. 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).

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

Проанализируем, что у нас получилось. И так у нас есть 4 сетевых ресурса, 3 это дисковые пространства, а последний это очередь на сетевой принтер. Параметр 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, он является так называемым WEB интерфейсом, т.е. его можно использовать на любом компьютере имеющего веббраузер. Для активации доступа к этой службе необходимо в каталоге /etc/xinetd.d создать файл swat со следующим содержанием:

service swat
{
	port		   = 901
	socket-type  = stream
	wait		   = no
	only_from	   = 
	user		   = root
     server       = /usr/bin/swat
	log_on_failure += USERID
	disable		= no
}

После этого нужно перезапустить службу xinetd:

# /etc/init.d/xinetd restart

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

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

  • создадим в системе группы к которым будут принадлежать наши пользователи:
    # groupadd otdel_1
    . . .
    # groupadd otdel_N
    
  • создадим группу в которую будем помещать имена машин пользователей (необходимо для ОС Windows 2000/ Windows XP/ Windows 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
    

    с вводом ему первичного пароля, после входа в сеть пользователь на рабочей станции может самостоятельно сменить себе пароль, причем, пароль должен будет удовлетворять двум условиям:

    1. Не быть "пустым"
    2. Его длина должна быть не менее 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/ Windows XP/ Windows 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

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

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

Для ОС Windows 2000/ Windows XP/ Windows 2003 Server, надо вызвать вкладку свойства на "Мой компьютер" и выбрать вкладку "Имя компьютера". Выбрать команду "Изменить":

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

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

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

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

 
23.01.2004
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.