|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
2004 г. Все будет Samba!Сергей Ефремов, Издательский Дом "Комиздат"У многих начинающих администраторов ОС Linux возникают те или иные проблемы при настройке и запуске в эксплуатацию системы Samba. Правильно настроенный пакет позволит избежать головной боли в дальнейшем. Итак, начнем… Лучше день потерять, Зачем нужна SambaЭта служба предоставляет ряд возможностей:
Samba представляет собой протокол, используемый Microsoft для разделения файлов и служб печати. Этот протокол был разработан в 1987 году и позже перенесен на платформы Linux Эндрю Триджеллом (Andrew Tridgell). Официальный сайт Samba, тут вы всегда найдете интересующую вас информацию и новые версии пакета. Что нам надо для счастья
Организация дисковых разделовДля нормального функционирования системы в процессе эксплуатации нужно заранее определиться с дисковыми разделами, на которых будет устроен файловый сервер. Для примера я организовал дисковое пространство следующим образом:
Не выделяю отдельно 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. Именно для такого случая и нужна "сетевая корзина". Еще одно ее достоинство - возможность восстановления предыдущей версии файла пользователем самостоятельно, без привлечения администратора сети. Но здесь сразу же стоит сделать некоторые замечания:
По окончанию описанных мероприятий переходим к компиляции пакета и его установке, для чего устанавливаем патч:
# 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): # 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 - для примера рассмотрим такой вариант:
Соответственно, в основном файле конфигурации /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] - главные моменты:
Более подробную информацию по командам конфигурации 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
Теперь, если в браузере на рабочей станции администратора набрать: http://192.168.0.1:901 - получим графический интерфейс управления пакетом. Прежде чем начать непосредственное тестирование установленного пакета, необходимо выполнить следующие операции: # groupadd otdel_1 ... # groupadd otdel_N # groupadd -g 9999 machines
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 # 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
Следующим шагом будет ввод ПК в домен.
Для ОС Windows 9x все очень просто - необходимо в Свойствах сети выбрать службу Microsoft и в ее свойствах указать, что рабочая станция подключается в домен, и указать также его имя. Для Windows 2000/XP/2003 Server нужно вызвать вкладку Свойства на Мой компьютер - и выбрать вкладку Имя компьютера. Далее - команда Изменить (см. рис. 2). После этого ОС просмотрит текущую сеть на предмет наличия домена. Если тот будет найден, появится диалоговое окно, в котором вы (в качестве пользователя) должны указать логин пользователя, имеющего права для ввода рабочей станции в домен (в нашем случае, и по умолчанию, это root), и указать его пароль. После того как система сообщит о вводе рабочей станции в домен, она предложит перезагрузиться. Здесь мы можем пойти по двум направлениям - имеется ввиду, что нашему пользователю можно оставить "обычные права", а можно задать специальные. Если мы выбираем первый вариант, можно перегрузить систему и при загрузке просто указать имя пользователя и домен, с которого будем загружаться. Или же можем добавить пользователя через Панель управления > Администрирование > Управление компьютером > Локальные пользователи > Пользователи (создаем нового пользователя с указанием того, в каком домене он будет проходит аутентификацию и к какой группе будет принадлежать - например, Администраторы). После входа пользователя в домен выполняется скрипт входа в домен, в нашем примере, подключаются сетевые диски и происходит синхронизация времени рабочей станции и сервера. ВыводыКак видим, процесс настройки пакета достаточно сложен и трудоемок, зато в таком разрезе проходит только один раз - обслуживание уже настроенного пакета не вызывает никаких трудностей. Управление пользователями и их ресурсами достаточно прозрачно, и процессы добавления, изменения или удаления пользователя или ресурса занимают очень мало времени - буквально пару минут. |
|
CITForum © 1997–2025