Библиотека сайта rus-linux.net
Глава 21. Серверное программное обеспечение (файловый сервис)
Linux Samba сервер
Краткий обзор.Крупные организации часто используют много разных операционных систем, и им нужно объединять их в сеть для совместного использования файлов и принтеров. Работники могут работать на рабочих станциях Linux, Microsoft Windows 95/98/NT, OS/2 или Novel, и им необходим доступ к серверам для повседневной работы. Linux-сервер с поддержкой Samba может быть использован для этих целей.
Samba это надежный сетевой сервис для организации совместного использования файлов и принтеров, который работает на большинстве операционных систем доступных сегодня. Когда он хорошо настроен администратором, это более быстрый и безопасный файловый сервис, чем родная реализация на машинах Microsoft Windows.
Как описано в файле README для Samba:
Samba это протокол, при помощи которого на большинстве PC-машин совместно используются файлы, принтеры и другая информация такая, как списки доступных файлов и принтеров. Встроенную поддержку этого протокола имеют Windows 95/98/NT, OS/2 и Linux, а с помощью дополнительного пакета DOS, Windows, VMS, Unix всех других видов, MVS и многие другие. Apple Mac и некоторые веб-браузеры также понимают его. Альтернативу SMB составляют Netware, NFS, AppleTalk, Banyan Vines, Decnet и др., многие из них имеют большие возможности, но ни один не имеет общедоступной спецификации и широкой реализации на настольных машинах. Программное обеспечение Samba включает SMB-сервер, предоставляющий файловый и принтерный сервис в стиле Windows NT и LAN Manager SMB-клиентам (Windows 95, Warp Server, smbfs и др), NetBIOS (rfc1001/1002) сервер имен, который среди многих других вещей, дает возможность ftp-подобного просмотра ресурсов (дисков и принтеров) из Unix, Netware и других ОС, и расширение tar для клиентов для резервного копирования PC.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
Samba версии 2.0.7.
Пакеты.
Домашняя страница Samba:
http://us1.samba.org/samba/samba.html,
FTP-сервер Samba: 63.238.153.11,
Вы должны скачать: samba-2.0.7.tar.gz.
Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции Samba и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > Samba1
find /* > Samba2
diff Samba1 Samba2 > Samba-Installed
Раскройте архив:
[root@deep /]# cp samba-version.tar.gz /var/tmp [root@deep /]# cd /var/tmp [root@deep tmp]# tar xzpf samba-version.tar.gz
Конфигурирование
Перейдите в каталог Samba, а затем в подкаталог source.
Шаг 1.
SMBW_LIBDIR=${SMBW_LIBDIR-@builddir@/smbwrapper}на:
SMBW_LIBDIR=${SMBW_LIBDIR-/usr/bin}
Это изменит месторасположение каталога lib Samba под каталог /usr/bin.
Шаг 2.
SBINDIR = @bindir@На:
SBINDIR = @sbindir@
VARDIR = @localstadir@на:
VARDIR = /var/log/samba
Эти изменения определят каталог /usr/sbin для двоичных файлов Samba, и каталог /var для файлов регистрации Samba (/var/log/samba).
Шаг 3.
Редактируйте файл convert_smbpasswd (vi +10 script/convert_smbpasswd) и измените в нем строку:
nawk 'BEGIN {FS=":"}на:
gawk 'BEGIN {FS=":"}
Это изменение определит использование версии GNU Linux утилиты обработки текста awk, основанной на Bell Labs research версии программы awk для программы smbpasswd.
Шаг 4.
Редактируйте файл smbmount.c (vi +98 client/smbmount.c) и измените строку:
static void close_our_files(int client_fd) { int i; for (i = 0; i < 256; i++) { if (i == client_fd) continue; close(i); }на:
static void close_our_files(int client_fd) { struct rlimit limits; int i; getrlimit(RLIMIT_NOFILE,&limits); for (i = 0; i < limits.rlim_max; i++) { if (i == client_fd) continue; close(i); }
Этот шаг сделает файл smbmount.c совместимым с библиотекой Red Hat glibc 2.1.
Компиляция и оптимизация
Шаг 1.
Введите следующие команды на Вашем терминале:
CC="egcs" ./configure --prefix=/usr --libdir=/etc --with-lockdir=/var/lock/samba \ --with-privatedir=/etc --with-swatdir=/usr/share/swat \ --with-pam --with-mmap --without-sambabook
ЗАМЕЧАНИЕ Опция --with-mmap может улучшить производительность на некоторых машинах, на других ничего не изменится, ну а на третьих она может упасть.
Эти опции говорят Samba:
- Включить поддержку базы данных PAM-паролей, поддерживаемых для лучшей безопасности.
- Включить экспериментальную поддержку MMAP для улучшения производительности Samba.
- Не инсталлировать книги, поставляемые с дистрибутивом Samba.
Шаг 2.
Сейчас мы должны инсталлировать Samba на нашем Linux-сервере:
[root@deep source]# make all [root@deep source]# make install [root@deep source]# install -m 755 script/mksmbpasswd.sh /usr/bin [root@deep source]# rm -rf /usr/share/swat (если Вы мне позволите совет, не позволяйте пользователям настраивать Samba через браузер). [root@deep source]# rm -f /usr/sbin/swat [root@deep source]# rm -f /usr/man/man8/swat.8 [root@deep source]# mkdir -p /var/lock/samba [root@deep source]# mkdir -p /var/spool/samba (требуется только, если Вы планируете совместное использование принтера). [root@deep source]# chmod 1777 /var/spool/samba (требуется только, если Вы планируете совместное использование принтера).
Команда install инсталлирует скрипт mksmbpasswd.sh в каталог /usr/bin. Этот скрипт нужен, чтобы пользователи Samba могли подключаться к серверу, используя файл smbpasswd. О том, как использовать пароли Samba, читайте дальше в этой книге.
Команда rm удалит каталог /usr/share/swat и все файлы в нем, также она удалит исполняемый файл swat из каталога /usr/sbin. SWAT это конфигурационная утилита, имеющая веб-интерфейс, которая позволяет настраивать файл smb.conf из веб-браузера. Она может открыть брешь в безопасности Вашего сервера , поэтому я рекомендую удалить ее. Команда mkdir создаст каталог /var/spool/samba, который используется при печати на принтере. Конечно, он необходим, если Вы планируете использовать Samba для предоставление принтера в совместное использование. Так как мы не настраиваем наш сервер Samba на предоставление сервиса печати, нам не нужен этот каталог (/var/spool/samba), и соответственно нет необходимости в команде chmod, устанавливающей sticky-бит для /var/spool/samba, чтобы только владелец файла мог удалить его из каталога.
Очистка после работы.[root@deep /]# cd /var/tmp [root@deep tmp]# rm -rf samba-version/ samba-version.tar.gz
Команда rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Samba. Также будет удален сжатый архив Samba из каталога /var/tmp.
Конфигурации
Конфигурационный файл для разных сервисов очень специфичен и сильно зависит от того, что Вам нужно. Некоторые хотят инсталлировать сервер Samba, рассчитывая на одно клиентское соединение, а некоторые на тысячу. Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с Samba, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz.
Для запуска веб-сервера Apache следующие файлы должны быть созданы или скопированы на Ваш сервер.
Копируйте файлы smb.conf и lmhosts в каталог /etc.
Копируйте smb в каталог /etc/rc.d/init.d.
Копируйте samba в каталог /etc/logrotate.d.
Копируйте samba в каталог /etc/pam.d.
Вы можете взять эти файлы из архива floppy.tgz.
Конфигурационный файл /etc/smb.conf
Файл /etc/smb.conf это основной конфигурационный файл сервера Samba, в котором Вы можете определить каталоги, к которым предоставляете доступ, с каких IP-адресов разрешен доступ и пр. Первые несколько строк в секции [global] содержат глобальные конфигурационные директивы, которые являются общими для всех разделяемых ресурсов (пока они не переписаны в конкретных секциях для каждого ресурса), далее идут секции, отвечающие за конкретные ресурсы. Существует множество опций, и нужно обязательно прочитать документацию, поставляемую вместе с Samba, чтобы получить информацию о каждой из них.
Следующий пример представляет из себя минимальную рабочую конфигурацию для Samba с поддержкой шифрованных паролей. Также, замечу, что мы прокомментируем только те параметры, которые связаны с безопасностью и оптимизацией, а остальные оставим для Вашего собственного последующего изучения.
В нашем примере, мы создаем только один каталог, [tmp], и позволяем доступ только машинам с IP-адресами из диапазона класса C. Также мы не используем сервис печати.
Редактируйте файл smb.conf (vi /etc/smb.conf) и добавьте/измените следующие параметры:
[global] workgroup = OPENNA server string = R&D of Open Network Architecture Samba Server encrypt passwords = True security = user smb passwd file = /etc/smbpasswd log file = /var/log/samba/log.%m socket options = IPTOS_LOWDELAY TCP_NODELAY domain master = Yes local master = Yes preferred master = Yes os level = 65 dns proxy = No name resolve order = lmhosts host bcast bind interfaces only = True interfaces = eth0 192.168.1.1 hosts deny = ALL hosts allow = 192.168.1.4 127.0.0.1 debug level = 1 create mask = 0644 directory mask = 0755 level2 oplocks = True read raw = no write cache size = 262144 [homes] comment = Home Directories browseable = no read only = no invalid users = root bin daemon nobody named sys tty disk mem kmem users [tmp] comment = Temporary File Space path = /tmp read only = No valid users = admin invalid users = root bin daemon nobody named sys tty disk mem kmem users
Эта опции говорят Samba следующее:
[global]
workgroup = OPENNA
Опция workgroup определяет рабочую группу, в которую входит Ваш сервер.
Важно, чтобы клиенты и сервер входили в одну и ту же группу.
server string = R&D of Open Network Architecture Samba Server
Опция server string определяет строку, которую получат пользователи в блоке
комментария к принтеру в менеджере принтеров, или при IPC-соединении
по команде net view на Windows-машинах.
encrypt passwords = True
Опция encrypt passwords, если установлена в True, инструктирует Samba
использовать шифрованные пароли вместо паролей с открытым текстом. Снифферы
не смогут определить Ваш пароль, если он зашифрован. Эту опцию из соображений
безопасности нужно установить в True.
security = user
Опция security, если установлена в user, определяет, что клиент должен
вначале пройти аутентификацию по правильному имени и паролю, или соединение
будет разорвано. При этом способе имя пользователя и пароль должны
существовать в файле /etc/passwd Linux-сервера и в файле /etc/smbpasswd
Samba-сервера, или соединение с клиентом не состоится. Смотрите "Безопасность
samba" в этой главе для получения большей информации о файле smbpasswd.
smb passwd file = /etc/smbpasswd
Опция smb passwd file определяет путь к файлу с шифрованными паролями
smbpasswd. Файл smbpasswd это копия файла /etc/passwd Linux-системы,
содержащий разрешенные имена и пароли клиентов, которым разрешен доступ к
серверу Samba. Samba читает этот файл, когда получает запрос на соединение.
log file = /var/log/samba/log.%m
Опция log file определяет месторасположение и имена файлов регистрации Samba.
С расширением %m у Вас будут создаваться независимые файлы регистрации для
каждого пользователя или машины, присоединяющихся к Вашему Samba-серверу
(например, log.machine1).
socket options = IPTOS_LOWDELAY TCP_NODELAY
Опция socket options определяет параметры, которые Вы можете включить в Вашу
конфигурацию Samba для настройки и улучшения сервера samba на оптимальную
производительность. По умолчанию, мы выбрали настройку сервера на локальную
сеть и улучшили производительность сервера Samba при пересылке файлов.
domain master = Yes
Опция domain master определяет, что один из демонов Samba, nmbd, будет
установлен как домен мастер-браузер для данной рабочей группы. Эта опция
обычно устанавливается в Yes только на одном сервере Samba в некоторой
сети и рабочей группе.
local master = Yes
Опция local master позволяет nmbd становится локальным мастер-браузером в
подсети. Подобно предыдущей опции, эта опция должна быть установлена в
Yes только на одном Samba-сервере в подсети.
preferred master = Yes
Опция preferred master определяет и контролирует является ли nmbd
привилегированным (preferred) мастер-браузером рабочей группы. Опять же, эта
опция обычно выставляется в Yes на одном сервере на Вашей сети.
os level = 65
Опция os level определяет значение, имеет ли nmbd шанс стать локальным
мастер-браузером для рабочей группы в локальной широковещательной области.
Число 65 позволит победить любой NT-сервер. Если в Вашей сети есть NT-сервер,
и Вы хотите, чтобы Linux Samba-сервер стал локальным мастер-браузером, Вы
должны установить этот параметр равным 65. Эта опция должна быть определена
только на одном Linux Samba-сервере в сети, а на остальных ее надо отключить.
dns proxy = No
Опция dns proxy, если установлена в Yes, определяет, что nmbd, когда
выступает как WINS-сервер и определяет, что Net BIOS имя не было
зарегистрировано, должен интерпретировать Net BIOS имя слово в слово как
DNS-имя и делает lookup на DNS-сервер, действуя от имени клиента,
запрашивающего данное имя. Так как мы не настраиваем Samba-сервер как
WINS-сервер, нам не нужно устанавливать эту опцию в Yes. Устанавливая
эту опцию в Yes мы ухудшим производительность Samba.
name resolve order = lmhosts host bcast
Опция name resolve order определяет, в каком порядке используются сервисы
имен для преобразования имени хоста в IP-адрес. Параметр, который мы выбрали,
говорит использовать в первую очередь локальный lmhosts-файл.
bind interfaces only = True
Опция bind interfaces only, если установлена в True, позволяет Вам
ограничивать интерфейсы, на которых будет принимать запросы smb. Это
возможность улучшающая безопасность системы. Опция interfaces = eth0
192.168.1.1 дополняет данную опцию.
interfaces = eth0 192.168.1.1
Опция interfaces позволяет Вам переписать список интерфейсов по умолчанию, на
которых Samba будет обрабатывать запросы. По умолчанию, Samba принимает
список из всех активных интерфейсов и любые интерфейсы (исключая 127.0.0.1),
на которых поддерживается возможность широковещательных запросов. С этой
опцией, Samba будет слушать только интерфейс eth0 с IP-адресом 192.168.1.1.
Это возможность улучшающая безопасность, и дополняет ранее приведенную опцию
bind interfaces only = True.
hosts deny = ALL
Опция hosts deny определяет список хостов, которым запрещен доступ к сервису
Samba, если определенные сервисы не имеют собственных списков доступа. Для
простоты, мы запрещаем доступ всем хостам по умолчанию, и разрешаем доступ
некоторым компьютерам в опции hosts allow =, приведенной ниже.
hosts allow = 192.168.1.4 127.0.0.1
Опция hosts allow определяет, каким хостам разрешен доступ к Samba-сервису.
По умолчанию, мы пускаем компьютер с IP-адресом класса C 192.168.1.4 и наш
localhost 127.0.0.1. Заметим, что доступ с localhost должен быть всегда
разрешен, иначе Вы будете получать сообщения об ошибках.
debug level = 1
Опция debug level позволяет Вам определить уровень регистрации. Если Вы
установите уровень отладки больше, чем 2, то это приведет к падению
производительности. Это связано с тем, что сервер сбрасывает информацию в
файл регистрации после каждой операции, которые могут
быть очень интенсивными.
create mask = 0644
Опция create mask определяет и устанавливает нужные права доступа, связывая
таким образом режимы DOS с правами UNIX. С этой опцией, установленной в 0644,
все файлы копируемые или создаваемые из Windows-систем на Unix будут
иметь права доступа 0644.
directory mask = 0755
Опция directory mask определяет и устанавливает режим, который используется
для конвертирования DOS-режимов в UNIX-режимы, когда создается UNIX-каталог.
С этой опцией, установленной в 0755, все каталоги копируемые или создаваемые
из Windows-систем на Unix будут иметь права доступа 0755.
level2 oplocks = True
Опция level2 oplocks, если установлена в True, увеличит производительность
множественного доступа к файлам, которые обычно не записываются (такие, как
файлы приложений .EXE).
read raw = no
Опция read raw контролирует, будет или нет сервер осуществлять необработанное
(raw) чтение SMB-запросов, когда пересылает данные клиенту. Заметим, что
распределение памяти не использует операцию "read raw". Таким образом, Вы
можете обнаружить, что распределение памяти более эффективно, если Вы
отключите "read raw", используя параметр "read raw = no".
write cache size = 262144
Опция write cache size позволяет Samba улучшить производительность систем, у
которых дисковая подсистема является узким местом. Значение этой опции
определяется в байтах, следовательно, 262144 представляет 256k кэш на файл.
[tmp]
comment = Temporary File Space
Опция comment позволяет Вам определить комментарии, которые появляются,
когда клиент организует запросы на сервер.
path = /tmp
Опция path определяет каталог, в который пользователю разрешается доступ.
В нашем примере, это каталог tmp.
read only = No
Опция read only определяет, должен ли пользователь иметь доступ только на
чтение или нет. В нашем примере, так как это конфигурация для каталога tmp,
пользователь может иметь больший доступ, чем только на чтение.
valid users = admin
Опция valid users определяет список пользователей, которые могут подключаться
к этому сервису. В нашем примере, только пользователю admin разрешен
доступ к каталогу /tmp.
invalid users = root bin daemon nobody named sys tty disk
mem kmem users
Опция invalid users определяет список пользователей, которым не разрешается
подключаться к этому сервису. Это абсолютно "параноидальная" проверка,
которая гарантирует, что неправильные установки не нарушат безопасность
системы. Рекомендуется, чтобы Вы включили в эту строку всех пользователей,
созданных в системе по умолчанию, от имени которых запускаются
демоны на сервере.
Конфигурация файла /etc/lmhosts
Настроим файл /etc/lmhosts. Он содержит соответствия между Samba Net BIOS именами и IP-адресами. По формату этот файл подобен /etc/hosts, за исключением того, что компоненты имени хоста соответствуют формату имен Net BIOS.
Создадим файл lmhosts (touch /etc/lmhosts) и внесем в него клиентские компьютеры:
# Пример Samba файла lmhosts. 127.0.0.1 localhost 192.168.1.1 deep 192.168.1.4 win
В нашем примере lmhots содержит три соответствия между IP и Net BIOS именами. localhost (127.0.0.1), клиент с именем deep (192.168.1.1) и клиент с именем win (192.168.1.4).
Конфигурация файла /etc/pam.d/samba
Настроим файл /etc/pam.d/samba для использования pam-аутентификации. Создайте файл samba (touch /etc/pam.d/samba) и добавьте в него следующие строки:
Auth required /lib/security/pam_pwdb.so nullok shadow Account required /lib/security/pam_pwdb.so
Конфигурация файла /etc/logrotate.d/samba
Сконфигурируем файл /etc/logrotate.d/samba на автоматическую еженедельную ротацию Ваших файлов регистрации. Создайте файл samba (touch /etc/logrotate.d/samba) и добавьте в него следующие строки:
/var/log/samba/log.nmb { notifempty missingok postrotate /usr/bin/killall -HUP nmbd endrotate } /var/log/samba/log.smb { notifempty missingok postrotate /usr/bin/killall -HUP smbd endrotate }
Создание файла с шифрованными паролями Samba
В файле /etc/smbpasswd хранятся шифрованные пароли Samba. Он хранит имя пользователя, Unix UID, хешированный пароль SMB, информационный флаг учетной записи и время последнего изменения пароля. Важно создать этот файл с паролями и включить в него всех пользователей до того, как они будут подключаться к Вашему серверу Samba. Без этого никто не сможет подключиться к нему.
Шаг 1.
Для создания учетной записи Samba, Вы должны, для начала, завести пользователя Linux. Поэтому, вначале, создайте в файле /etc/passwd всех пользователей, которые должны подключаться к серверу Samba. Добавьте нового пользователя в файл /etc/passwd, используя следующую команду:
[root@deep /]# useradd smbclient
Определите пароль для этого пользователя, используя команду:
[root@deep /]# passwd smbclient Changing password for user smbclient New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully
Шаг 2.
После того, как Вы внесли всех пользователей в файл /etc/passwd, Вы можете создать файл smbpasswd, используя /etc/passwd. Для этого введите следующую команду:
[root@deep /]# cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd
Шаг 3.
В заключении, на последнем шаге, мы должны создать пользователя в нашем файле /etc/smbpasswd. Для создания учетной записи пользователя Samba:
[root@deep /]# smbpasswd -a smbclient (помните, что smbclient должен быть реальным пользователем Linux). New SMB password: Retype new SMB password: Added user smbclient. Password changed for user smbclient.
Шаг 4.
Не забудьте изменить права доступа к Вашему новому файлу smbpasswd на чтение-запись только для пользователя root (0600/-rw-------). Это делается из соображения безопасности:
[root@deep /]# chmod 600 /etc/smbpasswd [root@deep /]# testparm (Эта команда проверит файл smb.conf на наличие ошибок).
ЗАМЕЧАНИЕ. Смотрите файл ENCRYPTION.txt, находящийся в дистрибутиве Samba в каталоге /doc/texts, для сбора большей информации.
Конфигурация скрипта /etc/rc.d/init.d/smb
Настроим скрипт /etc/rc.d/init.d/smb, который отвечает за запуск и остановку демонов Samba smbd и nmbd. Создайте скрипт smb (touch /etc/rc.d/init.d/smb) и добавьте в него следующие строки:
#!/bin/sh # # chkconfig: - 91 35 # описание: запуск и остановка демонов Samba smbd и nmbd \ # используемых для предоставления сетевого сервиса SMB. # Библиотека исходных функций. . /etc/rc.d/init.d/functions # Исходная сетевая конфигурация. . /etc/sysconfig/network # Проверки наличия сети. [ ${NETWORKING} = "no" ] && exit 0 # Проверка наличия файла smb.conf. [ -f /etc/smb.conf ] || exit 0 RETVAL=0 # See how we were called. case "$1" in start) echo -n "Starting SMB services: " daemon smbd -D RETVAL=$? echo echo -n "Starting NMB services: " daemon nmbd -D RETVAL2=$? echo [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \ RETVAL=1 ;; stop) echo -n "Shutting down SMB services: " killproc smbd RETVAL=$? echo echo -n "Shutting down NMB services: " killproc nmbd RETVAL2=$? [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb echo "" ;; restart) $0 stop $0 start RETVAL=$? ;; reload) echo -n "Reloading smb.conf file: " killproc -HUP smbd RETVAL=$? echo ;; status) status smbd status nmbd RETVAL=$? ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 esac exit $RETVAL
Сейчас мы должны сделать этот скрипт исполняемым и изменить права доступа к нему:
[root@deep /]# chmod 700 /etc/rc.d/init.d/smb
Создадим символическую ссылку в rc.d для Samba:
[root@deep /]# chkconfig --add smb
Скрипт Samba не будет автоматически стартовать демоны smbd и nmbd, когда система перезагружена. Чтобы изменить это, выполните следующую команду:
[root@deep /]# chkconfig --level 345 smb on
Запустите сервер Samba вручную:
[root@deep /]# /etc/rc.d/init.d/smb start Starting SMB services: [ OK ] Starting NMB services: [ OK ]
Организация защиты Samba
Иммунизация важных конфигурационных файловБит постоянства используется для предотвращения случайного удаления или переписывания файлов, которые защищаются. Он также не дает создавать символические ссылки к этим файлам. Так как файлы smb.conf и lmhosts уже настроены, хорошей идеей будет иммунизировать их:
[root@deep /]# chattr +i /etc/smb.conf [root@deep /]# chattr +i /etc/lmhosts
Оптимизация Samba
Установка параметра wide links= в конфигурационном файле Samba.Большой ошибкой будет установить параметр wide links в no в конфигурационном файле Samba /etc/smb.conf. Эта опция, если установлена в no, говорит Samba не следовать по символическим ссылкам вне экспортируемой области. Чтобы определить, находится ли ссылка вне области, Samba следует по символической ссылке, а затем выполняет directory path lookup, чтобы определить, где на файловой системе символическая ссылка завершилась. Эта операция добавляет шесть дополнительных системных вызовов на каждый файловый lookup, а Samba просматривает имена файлов очень много раз. Тесты, которые были опубликованы, показали, что установка этого параметра снижает производительность Samba-сервера на 25-30 процентов.
Настройка кэша буфера.
Модификация параметров, влияющих на настройку кэша файловой системы, может значительно улучшить производительность файлового сервера Linux. Linux будет пытаться использовать память, не используемую для других целей, для кэширования файловой системы. Специальный демон, называемый bdflush, будет периодически сбрасывать на диск содержимое "грязных" буферов (буфер, который содержит модифицированные данные файловой системы или метаданные).
Секрет хорошей производительности это сохранение в памяти так много данных, как это возможно. Запись на диск является самой медленной операцией при работе с любой файловой системой. Как и с большинством настраиваемых параметров ядра, Вы можете изменять эти опции на лету, при помощи специальных файлов /proc.
Параметры по умолчанию для bdflush под Red Hat Linux:
"40 500 64 256 500 3000 500 1884 2"
Чтобы изменить значения bdflush, введите следующие
команды на Вашем терминале:
Под Red Hat Linux 6.1
[root@deep /]# echo "80 500 64 64 15 6000 6000 1884 2" >/proc/sys/vm/bdflush
Вы должны добавить вышеприведенную команду в скрипт /etc/rc.d/rc.local, чтобы она выполнялась при каждой загрузке компьютера автоматически.
Под Red Hat Linux 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующие строки:
# Улучшение производительности файловой системы vm.bdflush = 80 500 64 64 15 6000 6000 1884 2
Вы должны перезагрузить сетевые настройки, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Эта строка говорит bdflush не беспокоиться о записи грязных блоков на диск, пока кэш буферов файловой системы не заполнится на 80 процентов. Другое значение определяют максимальное количество грязных буферов, которое может быть записано за одну операцию (500), как долго разрешается грязному буферу существовать (60*HZ) и т. д. Полное описание всех параметров Вы можете найти в документации, поставляемой вместе с ядром 2.2, в файле linux/Documentation/sysctl/vm.txt, и также, Вы можете прочитать главу 4, "Общая системная оптимизация" этой книги.
Настройка buffermem.
Другая полезная настройка должна сообщить Linux следующее: использовать минимум 60 процентов памяти для кэширования буферов, сокращать только когда процент используемой памяти для кэша буферов преодолеет 10 процентов (этот параметр сейчас не используется), и позволять расти до 60 процентов всей памяти (этот параметр сейчас тоже не используется).
По умолчанию значения, установленные для buffermem в Red Hat Linux, равны:
"2 10 60"
Чтобы изменить значения buffermem, введите следующую команду
на Вашем терминале:
Под Red Hat Linux 6.1
[root@deep /]# echo "60 10 60" >/proc/sys/vm/buffermem
Вы должны добавить вышеприведенную команду в скрипт /etc/rc.d/rc.local, чтобы она выполнялась при каждой загрузке компьютера автоматически. Полное описание всех параметров Вы можете найти в документации, поставляемой вместе с ядром 2.2, в файле linux/Documentation/sysctl/vm.txt, и также, Вы можете прочитать главу 4, "Общая системная оптимизация" этой книги.
Под Red Hat Linux 6.2
Редактируйте файл /etc/sysctl.conf и добавьте следующую строку:
# Улучшение производительности виртуальной памяти vm.buffermem = 60 10 60
Вы должны перезагрузить сетевые настройки, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/network restart Setting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Напоминаем, что последние два параметра (10 и 60) сейчас не используются, поэтому мы не будем их изменять.
Дополнительная документация
Для получения большей информации Вы можете прочитать следующие страницы руководства:
$ man Samba (7) Файл-сервер Windows SMB/CIFS для UNIX
$ man smb.conf (5) Конфигурационный файл для Samba
$ man smbclient (1) ftp-подобный клиент для доступа к SMB/CIFS ресурсам
$ man smbd (8) сервер, предоставляющий SMB/CIFS сервисы клиентам
$ man smbmnt (8) mount smb file system
$ man smbmount (8) монтирование файловой системе smb
$ man smbpasswd (5) файл с шифрованными паролями Samba
$ man smbpasswd (8) изменение SMB-пароля пользователя
$ man smbrun (1) интерфейсная программа между smbd и внешними программами
$ man smbsh (1) Позволяет доступ к файловой системе Windows NT,
используя UNIX-команды
$ man smbstatus (1) отчет о текущих соединениях Samba
$ man smbtar (1) shell-скрипт для резервного копирования совместных ресурсов
SMB напрямую на накопители на магнитной ленте UNIX
$ man smbumount (8) размонтирование для нормальных пользователей
$ man testparm (1) проверка конфигурационного файла smb.conf
на внутренние ошибки
$ man testprns (1) проверка имени принтера на соответствие правилам smbd.
Административные утилиты Samba
Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.
smbstatusУтилита smbstatus это очень простая программа, показывающая текущие соединения Samba:
[root@deep /]# smbstatus Samba version 2.0.7 Service uid gid pid machine ---------------------------------------------- tmp webmaster webmaster 3995 gate (192.168.1.3) Sat Sep 25 19:40:54 1999 No locked files Share mode memory usage (bytes): 1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total
Утилиты пользователя Samba
Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.
smbclient
Утилита smbclient работает подобно ftp-программам, но для Samba. Эта небольшая программа позволяет Вам забирать файлы с сервера на локальную машину, перекладывать файлы с локальной машины на сервер, передавать информацию о каталогах с сервера и пр.
Для соединения с Windows-машиной при помощи утилиты smbclient, используйте команду:
[root@deep /]# smbclient //sbmserver/sharename -U smbclient [root@deep /]# smbclient //gate/tmp -U smbclient Password: Domain=[OPENNA] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0] smb: \> ls . D 0 Tue Mar 14 15:31:50 2000 .. D 0 Tue Mar 14 15:31:50 2000 PostgreSQL D 0 Tue Mar 14 15:32:22 2000 Squid D 0 Tue Mar 14 15:32:28 2000 Imap D 0 Tue Mar 14 15:32:38 2000 E_comm D 0 Tue Mar 14 15:32:42 2000 StackGuard.pdf A 61440 Tue Dec 21 20:41:34 1999 installation-without-XFree86 A 448 Tue Dec 21 20:41:28 1999 lcap-0_0_3-2_src.rpm A 13481 Thu Jan 13 01:50:12 2000 mirc561t.exe A 948224 Tue Dec 21 20:41:54 1999 65510 blocks of size 32768. 5295 blocks available smb: \>
где //sbmserver это имя сервера, к которому Вы хотите подключиться. /sharename каталог на этом сервере, а smbclient это имя пользователя, под которым Вы подключаетесь к серверу.
Инсталлированные файлы
> /etc/rc.d/init.d/smb > /etc/rc.d/rc0.d/K35smb > /etc/rc.d/rc1.d/K35smb > /etc/rc.d/rc2.d/K35smb > /etc/rc.d/rc3.d/S91smb > /etc/rc.d/rc4.d/S91smb > /etc/rc.d/rc5.d/S91smb > /etc/rc.d/rc6.d/K35smb > /etc/pam.d/samba > /etc/logrotate.d/samba > /etc/codepages > /etc/codepages/codepage.437 > /etc/codepages/unicode_map.437 > /etc/codepages/codepage.737 > /etc/codepages/unicode_map.737 > /etc/codepages/codepage.775 > /etc/codepages/codepage.850 > /etc/codepages/unicode_map.850 > /etc/codepages/codepage.852 > /etc/codepages/unicode_map.852 > /etc/codepages/codepage.861 > /etc/codepages/unicode_map.861 > /etc/codepages/codepage.932 > /etc/gshadow- > /usr/bin/smbclient > /usr/bin/smbspool > /usr/bin/testparm > /usr/bin/testprns > /usr/bin/smbstatus > /usr/bin/rpcclient > /usr/bin/smbpasswd > /usr/bin/make_smbcodepage > /usr/bin/make_unicodemap > /usr/bin/nmblookup > /usr/bin/make_printerdef > /usr/bin/smbtar > /usr/bin/addtosmbpass > /usr/bin/convert_smbpasswd > /usr/bin/mksmbpasswd.sh > /usr/man/man1/make_smbcodepage.1 > /usr/man/man1/make_unicodemap.1 > /usr/man/man1/nmblookup.1 > /usr/man/man1/smbclient.1 > /usr/man/man1/smbrun.1 > /usr/man/man1/smbsh.1 > /usr/man/man1/smbstatus.1 > /etc/codepages/unicode_map.932 > /etc/codepages/codepage.866 > /etc/codepages/unicode_map.866 > /etc/codepages/codepage.949 > /etc/codepages/unicode_map.949 > /etc/codepages/codepage.950 > /etc/codepages/unicode_map.950 > /etc/codepages/codepage.936 > /etc/codepages/unicode_map.936 > /etc/codepages/codepage.1251 > /etc/codepages/unicode_map.ISO8859-1 > /etc/codepages/unicode_map.ISO8859-2 > /etc/codepages/unicode_map.ISO8859-5 > /etc/codepages/unicode_map.ISO8859-7 > /etc/codepages/unicode_map.KOI8-R > /etc/lmhosts > /etc/smb.conf > /etc/smbpasswd > /usr/man/man1/smbtar.1 > /usr/man/man1/testparm.1 > /usr/man/man1/testprns.1 > /usr/man/man5/lmhosts.5 > /usr/man/man5/smb.conf.5 > /usr/man/man5/smbpasswd.5 > /usr/man/man7/samba.7 > /usr/man/man8/nmbd.8 > /usr/man/man8/smbd.8 > /usr/man/man8/smbmnt.8 > /usr/man/man8/smbmount.8 > /usr/man/man8/smbpasswd.8 > /usr/man/man8/smbspool.8 > /usr/man/man8/smbumount.8 > /usr/sbin/smbd > /usr/sbin/nmbd > /var/log/samba > /var/lock/samba
Linux FTP сервер
Краткий обзор.
Несмотря на прошедшие годы, использование File Transfer Protocol (FTP) является одним из самых популярных способов пересылки файлов с одной машины на другую через сеть. Клиенты и серверы написаны для каждой из популярных платформ, присутствующих на рынке, делая таким образом FTP наиболее удобным способом пересылки файлов.
Существует много различных путей настройки Вашего FTP-сервера. Один из них приватный, только для пользователей системы, который является конфигурацией по умолчанию FTP-сервера: приватный FTP-сервер позволяет пользователям Linux-системы соединяться с сервером по протоколу FTP и получать доступ к их файлам.
Другой тип ftp сервера: анонимный FTP. Такой сервер позволяет кому угодно соединяться с сервером и передавать файлы без получения учетной записи. Из-за потенциального риска безопасности системы, должны быть приняты меры, чтобы позволить доступ только к определенным каталогам системы.
Конфигурация, которую мы охватываем здесь, предоставляет FTP-полубезопасную область файловой системы (chroot, гостевой FTP-доступ). Она позволит пользователю получить доступ к каталогу FTP-сервера, при этом он не сможет перейти на более высокий уровень. Это наиболее безопасная конфигурация для FTP-сервера.
Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
wu-ftpd версии 2.6.0.
Пакеты.
Домашняя страница Wu-ftpd:
http://www.wu-ftpd.org,
FTP-сервер Wu-ftpd: 205.133.13.68,
Вы должны скачать: wu-ftpd-2.6.0.tar.gz.
Раскройте архив:
[root@deep /]# cp wu-ftpd-version.tar.gz /var/tmp [root@deep /]# cd /var/tmp [root@deep tmp]# tar xzpf wu-ftpd-version.tar.gz
Компиляция и оптмизация
Перейдите в новый каталог Wu-ftpd и введите следующие команды на Вашем терминале:
Шаг 1.
#if defined (LINUX)на:
#if defined (LINUX_BUT_NOT_REDHAT_6_0)
Шаг 2.
#define _PATH_EXECPATH "/bin/ftp-exec"на:
#define _PATH_EXECPATH "/usr/bin/ftp-exec"
Мы изменили каталог /bin/ftp-exec на /usr/bin/ftp-exec для Red Hat Linux.
Шаг 3.
Введите следующие команды на Вашем терминале для конфигурирования Wu-ftpd:
CC="egcs" CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \ -march=pentiumpro -fomit-frame-pointer -fno-exceptions" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ --disable-dnsretry --enable-quota --enable-pam \ --disable-daemon --disable-newlines --disable-virtual \ --disable-plsm --disable-pasvip --disable-anonymous \ --enable-ls --enable-numericuid
Эти опции означают следующее:
- Не повторять ошибочный DNS lookups для улучшения производительности.
- Добавить поддержку квот для большей безопасности (только, если Ваша OS поддерживает это).
- Добавить поддержку PAM для большей безопасности.
- Не разрешать запускать как автономный демон, позволять контролировать FTPD при помощи TCP-Wrappers.
- Подавлять некоторые дополнительные пустые строки.
- Не поддерживать виртуальные серверы.
- Отключить блокирование PID ожидания сообщений (для загруженных серверов).
- Не требовать идентичного IP для пассивного соединения.
- Не разрешать анонимный ftp-доступ для лучшей безопасности.
- Использовать новую внутреннюю команду ls из Wu-ftpd вместо системной ls из Linux для большей безопасности.
- Внутренняя ls выводит UID вместо имен пользователей для лучшей производительности.
Шаг 4.
Сейчас мы должны инсталлировать Wu-ftpd на Linux-сервер:
[root@deep wu-ftpd-2.6.0]# make [root@deep wu-ftpd-2.6.0]# make install [root@deep wu-ftpd-2.6.0]# install -m 755 util/xferstats /usr/sbin [root@deep wu-ftpd-2.6.0]# touch /var/log/xferlog [root@deep wu-ftpd-2.6.0]# chmod 600 /var/log/xferlog [root@deep wu-ftpd-2.6.0]# cd /usr/sbin [root@deep sbin]# ln -sf in.ftpd /usr/sbin/wu.ftpd [root@deep sbin]# ln -sf in.ftpd /usr/sbin/in.wuftpd [root@deep sbin]# strip /usr/bin/ftpcount [root@deep sbin]# strip /usr/bin/ftpwho [root@deep sbin]# strip /usr/sbin/in.ftpd [root@deep sbin]# strip /usr/sbin/ftpshut [root@deep sbin]# strip /usr/sbin/ckconfig [root@deep sbin]# strip /usr/sbin/ftprestart
Команды make и make install настроят программное обеспечение под Вашу систему и проверят ее функциональность на наличие необходимых библиотек, скомпилируют все файлы с исходными кодами в исполняемые двоичные программы и проинсталлируют их вместе с сопутствующими файлами в необходимые места.
Команда install -m будет инсталлировать программу xferstats, используемую для просмотра информации о переданных файлах. Команда touch создаст файл регистрации для xferstats в каталоге /var/log. chmod изменит права доступа к файлу xferlog на чтение-запись только пользователю root. Затем, мы создаем символическую ссылку для исполняемого файла in.ftpd, и, в заключение, удаляем отладочную информацию из всех исполняемых файлов, относящихся к Wu-ftpd.
Очистка после работы.[root@deep /]# cd /var/tmp [root@deep tmp]# rm -rf wu-ftpd-version/ wu-ftpd-version.tar.gz
Команда rm будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Wu-ftpd. Также будет удален сжатый архив Wu-ftpd из каталога /var/tmp.
Настройка пользователя FTP без командного процессора (shell)
Чрезвычайно важно, чтобы Ваши пользователи FTP не имели реального командного процессора. В этом случае, если они по каким-либо причинам смогут покинуть chroot-окружение FTP, то не смогут выполнить никаких задач, так как не имеют командного процессора.
Первое, создайте нового пользователя, которому Вы планируете разрешить подключаться к Вашему FTP-серверу. Это должна быть учетная запись независимая от регулярно используемых, в связи с особенностями работы chroot-окружения. Chroot создаст пользователю ощущение, будто каталог, в который его поместили, находится на самом верху файловой системы.
Шаг 1.
Используйте следующие команды для создания пользователя в файле /etc/passwd. Этот шаг должен выполняться для каждого пользователя, кому нужен доступ к FTP-серверу:
[root@deep /]# mkdir /home/ftp [root@deep /]# useradd -d /home/ftp/ftpadmin/ -s /dev/null ftpadmin > \ /dev/null 2>&1 [root@deep /]# passwd ftpadmin Changing password for user ftpadmin New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully
Команда mkdir создаст каталог ftp в /home для хранения всех домашних каталогов FTP-пользователей. Команда useradd добавит нового пользователя с именем ftpadmin в Вашей системе. В заключение, команда passwd установит пароль для него. После того, как каталог /home/ftp создан, Вам не нужно будет создавать его для каждого нового пользователя.
Шаг 2.
Редактируйте файл /etc/shells (vi /etc/shells) и добавьте в него несуществующий командный процессор, например, null. Этот ложный shell ограничит доступ FTP-пользователям к системе:
[root@deep /]# vi /etc/shells /bin/bash /bin/sh /bin/ash /bin/bsh /bin/tcsh /bin/csh /dev/null(это Ваш несуществующий командный процессор)
ЗАМЕЧАНИЕ. В Red Hat Linux специальное имя устройства (/dev/null) существует для подобных целей.
Шаг 3.
Сейчас редактируйте Ваш файл /etc/passwd и вручную добавьте подстроку /./, разделяющую каталоги /home/ftp и /ftpadmin, где ftpadmin должен автоматически изменить каталог. Этот шаг должен быть выполнен для каждого FTP-пользователя, добавляемого в файл passwd.
Редактируйте файл passwd (vi /etc/passwd) и добавьте/измените строку для пользователя ftpadmin:
ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/nullна:
ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null
Обратите внимание, что путь к домашнему каталогу пользователя ftpadmin немного нечеткий. Первая часть /home/ftp показывает файловую систему, которая должна стать новый корневым каталогом. Разделяющая точка . говорит, что из текущего каталога необходимо автоматически переходить в /ftpadmin. Еще раз отметим, что часть /dev/null отключает вход в систему как регулярного пользователя. С этим изменением пользователь ftpadmin имеет ложный командный процессор вместо реального, тем самым имея ограничения в доступе к системе.
Установка пользовательского окружения chroot
Далее Вы должны создать основу корневой файловой системы с достаточным количеством необходимых компонентов (исполняемые файлы, файлы парлей и т.д.), чтобы позволить Unix выполнить chroot, когда пользователь входит в систему. Заметим, что если Вы использовали опцию --enable-ls во время компиляции, как мы предлагали выше, то каталоги /home/ftp/bin и /home/ftp/lib не нужны, так как Wu-ftpd будет использовать собственную функцию ls. Мы остановимся на демонстрации старого метода, при котором люди копируют /bin/ls в chroot FTP-каталог (/home/ftp/bin) и создают соответствующие библиотеки, связанные с ls.
Необходимо выполнить следующие шаги, чтобы запустить Wu-ftpd в chroot-окружении:
Шаг 1.
Создадим все каталоги chroot-окружения:
[root@deep /]# mkdir /home/ftp/dev [root@deep /]# mkdir /home/ftp/etc [root@deep /]# mkdir /home/ftp/bin (требуется, если Вы не использовали опцию --enable-ls) [root@deep /]# mkdir /home/ftp/lib (требуется, если Вы не использовали опцию --enable-ls)
Шаг 2.
Измените права доступа к новым каталогам на 0511 из соображений безопасности:
[root@deep /]# chmod 0511 /home/ftp/dev [root@deep /]# chmod 0511 /home/ftp/etc [root@deep /]# chmod 0511 /home/ftp/bin (требуется, если Вы не использовали опцию --enable-ls) [root@deep /]# chmod 0511 /home/ftp/lib (требуется, если Вы не использовали опцию --enable-ls)
Команда chmod изменит права доступа к chroot-каталогам dev, etc, bin и lib на чтение и исполнение для root и исполнение для группы и всех остальных пользователей.
Шаг 3.
Копируйте исполняемый файл /bin/ls в каталог /home/ftp/bin и измените права доступа к нему на 0111 (Вы не хотите позволять пользователям модифицировать этот файл):
[root@deep /]# cp /bin/ls /home/ftp/bin (требуется, если Вы не использовали опцию --enable-ls) [root@deep /]# chmod 0111 /bin/ls /home/ftp/bin/ls (требуется, если Вы не использовали опцию --enable-ls)
ЗАМЕЧАНИЕ. Этот шаг необходим только, если Вы не использовали при конфигурировании опцию --enable-ls. Смотрите секцию "Компиляция и оптимизация" в этой главе.
Шаг 4.
Найдите разделяемые библиотеки, от которых зависит программа ls:
[root@deep /]# ldd /bin/ls (требуется, если Вы не использовали опцию --enable-ls) libc.so.6 => /lib/libc.so.6 (0x00125000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00110000)
Копируйте их в новый каталог lib, расположенный в /home/ftp:
[root@deep /]# cp /lib/libc.so.6 /home/ftp/lib (требуется, если Вы не использовали опцию --enable-ls) [root@deep /]# cp /lib/ld-linux.so.2 /home/ftp/lib (требуется, если Вы не использовали опцию --enable-ls)
ЗАМЕЧНИЕ. Эти библиотеки нужны для работы команды ls. Также, как и шаг 3, это необходимо сделать, если Вы во время конфигурирования Wu-ftpd не указали опцию --enable-ls для использования внутренней команды ls.
Шаг 5.
Создайте файл /home/ftp/dev/null:
[root@deep /]# mknod /home/ftp/dev/null c 1 3 [root@deep /]# chmod 666 /home/ftp/dev/null
Шаг 6.
Копируйте файлы group и passwd в каталог /home/ftp/etc. Они не должны быть такими же, как оригиналы. Мы удалим из них всех не FTP-пользователей, исключая root:
[root@deep /]# cp /etc/passwd /home/ftp/etc [root@deep /]# cp /etc/group /home/ftp/etc
Редактируйте файл passwd (vi /home/ftp/etc/passwd) и удалите из него все элементы, кроме root и Ваших FTP-пользователей. Файл должен иметь следующий вид:
root:x:0:0:root:/:/dev/null ftpadmin:x:502:502::/ftpadmin/:/dev/null
ЗАМЕЧАНИЕ. Мы отметим здесь две вещи: первое, домашний каталог всех пользователей был изменен (например, /home/ftp/./ftpadmin на /ftpadmin), и второе, командный процессор для пользователя root был изменен на /dev/null.
Редактируйте файл group (vi /home/ftp/etc/group) и удалите все элементы, исключая root и всех FTP-пользователей. Файл group должен соответствовать Вашему нормальному файлу групп:
root:x:0:root ftpadmin:x:502:
Шаг 7.
Сейчас мы должны иммунизировать файлы passwd и group, находящиеся в chroot-окружении.
Установим бит постоянства на файл passwd:
[root@deep /]# cd /home/ftp/etc [root@deep /]# chattr +i passwd
Установим бит постоянства на файл group:
[root@deep /]# cd /home/ftp/etc [root@deep /]# chattr +i group
Конфигурации
Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающем все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы, связанные с Wu-ftpd, из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями Вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz.
Для запуска ftp-сервера следующие файлы должны быть созданы или скопированы на Ваш сервер.
Копируйте файлы ftpaccess в каталог /etc.
Копируйте файлы ftpusers в каталог /etc.
Копируйте файлы ftphosts в каталог /etc.
Копируйте файлы ftpgroups в каталог /etc.
Копируйте файлы ftpconversion в каталог /etc.
Копируйте ftpd в каталог /etc/logrotate.d.
Копируйте ftp в каталог /etc/pam.d.
Вы можете взять эти файлы из архива floppy.tgz.
Конфигурация файла /etc/ftpaccess
Файл /etc/ftpaccess это основной конфигурационный файл, используемый для конфигурирования сервера Wu-ftpd. Этот файл первоначально предназначен для определения того, какие пользователи, сколько пользователей, могут получить доступ к Вашему серверу, и прочих важных элементов настройки безопасности сервера.
Шаг 1.
Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте/измените в нем следующие строки:
class openna guest 208.164.186.* limit openna 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg email admin@openna.com loginfails 3 readme README* login readme README* cwd=* message /home/ftp/.welcome.msg login message .message cwd=* compress yes all tar yes all chmod yes guest delete yes guest overwrite yes guest rename yes guest log commands real,guest log transfers real,guest inbound,outbound guestgroup ftpadmin guestgroup webmaster # We don't want users being able to upload into these areas. upload /home/ftp/* / no upload /home/ftp/* /etc no upload /home/ftp/* /dev no # We'll prevent downloads with noretrieve. noretrieve /home/ftp/etc noretrieve /home/ftp/dev log security real,guest guest-root /home/ftp ftpadmin webmaster restricted-uid ftpadmin webmaster restricted-gid ftpadmin webmaster greeting terse keepalive yes noretrieve .notar
Шаг 2.
Сейчас мы должны изменить права доступа на 600:
[root@deep /]# chmod 600 /etc/ftpaccess
Эти параметры конфигурационного файла говорят следующее:
class openna guest 208.164.186.*
Опция class определяет классы пользователей, которые имеют доступ к Вашему
FTP-серверу. Вы можете определить столько классов, сколько хотите. В нашем
случае, например, мы определяем класс с именем openna, и позволяем
пользователю guest с учетными записями на ftp-сервере доступ к их домашним
каталогам через FTP, если они заходят с адреса 208.164.186.*. Важно заметить,
что существует три различных типа пользователей: anonymous, guest и real.
Пользователи Anonymous это любой пользователь сети, который подключается к
серверу и пересылает файлы, не имея учетной записи на нем. Пользователь Guest
это реальный пользователь системы, для которых сессии настроены также, как и
для анонимных пользователей FTP (это то, что мы определили в нашем примере),
и пользователь Real должен иметь учетную запись и командный процессор (shell)
(это может приводить к риску для безопасности) на сервере для доступа к нему.
limit openna 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
Опция limit определяет число пользователей данного класса, которым
разрешается подключаться к серверу, и разрешенное время суток. В нашем
примере к FTP-серверу из класса openna может подключаться максимум 20
пользователей, в понедельник, вторник, среду и четверг целый день, а в
пятницу с полуночи до 6:00 вечера Fr0000-1800. Также, если количество
пользователей достигло предела (20), то вновь подключаемым пользователям
будет выдаваться сообщение из файла /home/ftp/.too_many.msg. Это очень
полезный параметр для контроля за ресурсами сервера.
loginfails 3
Опция loginfails определяет число ошибочных попыток подключений к серверу,
которое может осуществить пользователь до того, как будет отсоединен от
сервера. В нашем примере мы отключаем пользователя от FTP-сервера
после трех попыток.
readme README* login
readme README* cwd=*
Опция readme определяет сообщение, выдаваемое клиенту во время регистрации на
сервере, или во время использования команды смены каталога, которая
определяет файлы в текущем каталоге, измененные в последнее время. В нашем
примере мы устанавливаем имя файла README* относительно каталога FTP, и
условия вывода сообщения: при успешном входе в систему login или входе в
новый каталог cwd=*.
message /home/ftp/.welcome.msg login
message .message cwd=*
Опция message определяет специальные сообщения, отображаемые клиентам, когда
они либо вошли в систему, либо используют команду смены рабочего каталога. В
нашем примере мы показываем месторасположение и имя выводимых файлов
/home/ftp/.welcome.msg или .message, и условия при которых они выводятся: при
успешной регистрации в системе login, или когда клиент входит в новый каталог
cwd=*. Для опций readme и message, когда Вы определяете путь для анонимных
пользователей, Вы должны использовать абсолютный путь относительно
анонимного FTP-каталога.
compress yes all
tar yes all
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
Опции compress, tar, chmod, delete, overwrite и rename определяют права,
которые Вы хотите дать Вашим пользователям на выполнение этих команд. В нашем
примере мы даем права группе guest на команды chmod, delete, overwrite и
rename и позволяем всем пользователям сервера (all) использовать команды
compress и tar. Если Вы не определите следующие директивы, они по умолчанию
будут выставлены в yes для всех.
log commands real,guest
Опция log commands включает регистрацию команд пользователей из соображений
безопасности. В нашем примере мы регистрируем все индивидуальные команды
пользователей классов real и guest (real,guest). Результаты регистрации
сохраняются в файле /var/log/message.
log transfers real,guest inbound,outbound
Опция log transfers включает регистрацию всех FTP-пересылок из соображения
безопасности. В нашем примере мы регистрируем все пересылки пользователей
классов real и guest (real,guest), параметры inbound и outbound (inbound,
outbound) определяют направления пересылки, в нашем случае входящие и
исходящие. Результаты сохраняются в файле /var/log/xferlog.
guestgroup ftpadmin
guestgroup webmaster
Опция guestgroup определяет всех реальных пользователей, относящихся к группе
гостей, сессии которых настроены также, как и в анонимном FTP (ftpadmin и
webmaster). Файл /home/ftp/etc/group имеет входы для каждой из этих групп,
каждая из которых имеет только одного члена. Важно, что в конфигурационном
файле в одной строке должна быть записана одна гостевая группа.
log security real,guest
Опция log security включает регистрацию нарушений правил безопасности для
реальных, гостевых и/или анонимных FTP-клиентов. В нашем примере мы разрешаем
регистрацию нарушений для пользователей, использующих FTP-сервер для доступа
с реальных учетных записей и гостевых логинов (real, guest).
guest-root /home/ftp ftpadmin webmaster
restricted-uid ftpadmin webmaster
restricted-gid ftpadmin webmaster
Эти опции, guest-root, restricted-uid, restricted-gid, определяют и
контролируют могут или нет пользователи guest получить доступ к области
FTP-сервера вне их домашних каталогов (это важная функция повышения
безопасности). В нашем примере мы определяем chroot-путь для пользователей
ftpadmin и webmaster в /home/ftp, и они не могут получить доступа к другим
файлам, потому что ограничены своими домашними каталогами (restricted-uid
ftpadmin webmaster, restricted-gid ftpadmin webmaster). Несколько диапазонов
UID может задаваться в этой строке. Если для пользователя выбран guest-root,
то домашний каталог пользователя из файла root-dir/etc/passwd используется
для определения начального каталога, а их домашний каталог в масштабе всей
системы из файла /etc/passwd не используется.
greeting terse
Опция greeting определяет, как много системной информации будет выводится до
того, как удаленный пользователь войдет в систему. Здесь Вы можете
использовать три значения: full используется по умолчанию, показывает имя
хоста и версию демона, brief только имя хоста и terse просто сообщает
"FTP server ready".
keepalive yes
Опция keepalive определяет, должна ли система посылать сообщения keep alive
на удаленный FTP-сервер. Если установлена в yes, то сервер получит
необходимое предупреждение о разрыве соединения или падении удаленной машины.
Конфигурация файла /etc/ftphosts
Файл /etc/ftphosts используется для определения следующего: может ли пользователь входить в систему с определенной машины или ему будет запрещен доступ.
Шаг 1.
Создайте файл ftphosts (touch /etc/ftphosts) и добавьте, например, в него следующие строки:
# Пример файла host access # # Все, что после '#', это комментарии, пустые строки игнорируются allow ftpadmin 208.164.186.1 208.164.186.2 208.164.186.4 deny ftpadmin 208.164.186.5
В нашем примере мы разрешаем пользователю ftpadmin соединяться с FTP-сервером из явно заданного списка адресов 208.164.186.1 208.164.186.2 208.164.186.4, и запрещаем пользователю ftpadmin соединяться с сервера 208.164.186.5.
Шаг 2.
Измените права доступа на 600:
[root@deep /]# chmod 600 /etc/ftphosts
Конфигурация файла /etc/ftpusers
Файл /etc/ftpusers определяет пользователей, которым не разрешен доступ на FTP-сервер.
Шаг 1.
Создайте файл ftpusers (touch /etc/ftpusers) и добавьте в него следующих пользователей:
root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody
Шаг 2.
Измените права доступа к файлу на 600:
[root@deep /]# chmod 600 /etc/ftpusers
Конфигурация файла /etc/ftpconversions
Файл /etc/ftpconversions содержит инструкции, которые разрешают Вам по требованию сжимать файлы перед пересылкой.
Шаг 1.
Редактируйте файл ftpconversions (vi /etc/ftpconversions) и добавьте в него следующие строки:
:.Z : : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS : : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS :.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP : : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP : : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR : : :.tar.Z:/bin/tar -c -Z -f -%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS : : :.tar.gz:/bin/tar -c -z -f -%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP : : :.crc:/bin/cksum %s:T_REG::CKSUM : : :.md5:/bin/md5sum %s:T_REG::MD5SUM
Шаг 2.
Измените права доступа на 600:
[root@deep /]# chmod 600 /etc/ftpconversions
Конфигурация файла /etc/pam.d/ftp
Сконфигурируйте файл /etc/pam.d/ftp для использования pam-аутентификации.
Создайте файл ftp (touch /etc/pam.d/ftp) и добавьте в него следующие строки:
#%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed auth required /lib/security/pam_pwdb.so shadow nullok auth required /lib/security/pam_shells.so account required /lib/security/pam_pwdb.so session required /lib/security/pam_pwdb.so
Конфигурация файла /etc/logrotate.d/ftpd
Настройте файл /etc/logrotate.d/ftpd на автоматическую ротацию файлов регистрации каждую неделю.
Создайте файл ftpd (touch /etc/logrotate.d/ftpd) и добавьте в него следующие строки:
/var/log/xferlog { # ftpd должным образом не обрабатывает SIGHUP nocompress }
Настройка ftpd на использование tcp-wrappers из суперсервера inetd
Tcp-wrappers должен быть включен на запуск и остановку ftpd-сервера. inetd читает настроечную информацию из своего конфигурационного файла /etc/inetd.conf. Для каждого поля этого файла должно обязательно присутствовать его значение, поля разделяются пробелами или символами табуляции.
Шаг 1.
Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте или проверьте на наличие следующие строки:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
Чтобы изменения вступили в силу, пошлите демону inetd сигнал SIGHUP, используя следующую команду:
[root@deep /]# killall -HUP inetd
Шаг 2.
Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте, например, следующую строку:
in.ftpd: 192.168.1.4 win.openna.com
Которая говорит, что клиенту с IP-адресом 192.168.1.4 и именем хоста win.openna.com разрешен FTP-доступ на сервер.
Административные утилиты FTP
ftpwhoПрограмма ftpwho выводит всех активных пользователей ftp, и их текущие процессы в системе. Выходные данные выдаются в формате, напоминающем команду /bin/ps.
[root@deep /]# ftpwho Service class openna: 5443 ? S 0:00 ftpd: win.openna.com: ftpadmin: IDLE - 1 users (20 maximum)
Здесь Вы видите, что к системе подключен один пользователь с именем ftpadmin, пришедший с хоста win.openna.com. Всего к серверу может подключиться до 20 пользователей.
ftpcountУтилита ftpcount это упрощенная версия ftpwho. Она показывает только количество пользователей, подключенных к системе в данный момент, и общее количество, которое может подключиться:
[root@deep /]# ftpcount Service class openna - 1 users ( 20 maximum)
Организация защиты FTP
Файл ftpusersВажно удостовериться, что Вы настроили файл /etc/ftpusers. В нем определяются пользователи, которым не разрешено соединяться с Вашим FTP-сервером. В него должны быть включены, как минимум, следующие пользователи: root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp, operator, games, nobody и ВСЕ другие определенные по умолчанию пользователи, доступные в Вашем файле /etc/passwd.
Анонимный FTPДля отключения анонимного FTP, удалите пользователя ftp из Вашего файла паролей и проверьте, что пакет anonftp-version.i386.rpm не инсталлирован. Для удаления пользователя ftp выполните следующую команду:
[root@deep /]# userdel ftp
Для проверки, что RPM пакет анонимного FTP не инсталлирован у Вас на системе выполните следующую команду:
[root@deep /]# rpm -q anonftp package anonftp is not installedКоманда upload
По умолчанию сервер Wu-ftpd разрешает upload всем пользователям. Параметр upload позволяет удаленным пользователям загружать и размещать файлы на FTP-сервере. Для оптимальной безопасности, мы не хотим разрешать пользователям загружать файлы в подкаталоги bin, etc, dev и lib каталога /home/ftp. В нашем файле /etc/ftpaccess мы уже сменили корневой каталог (chroot) пользователей на /home/ftp, и поэтому они не имеют доступа к другим областям файловой системы.
Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующие строки, которые запретят upload в определенные области:
# Мы не хотим, чтобы пользователи могли закачивать файлы в эти области. upload /home/ftp/* / no upload /home/ftp/* /etc no upload /home/ftp/* /dev no upload /home/ftp/* /bin no (требуется только, если Вы не использовали опцию --enable-ls) upload /home/ftp/* /lib no (требуется только, если Вы не использовали опцию --enable-ls)
Вышеприведенные строки запрещают upload в подкаталоги /, /etc, /dev, /bin и /lib chroot-каталога /home/ftp.
Специальный файл .notarХотите ли Вы разрешать упаковывать командой tar каталоги или нет, Вы должны сделать так, чтобы нельзя было выполнить команду tar в областях, где запрещен upload.
Шаг 1.
Чтобы сделать это, создайте специальный файл .notar в каждом каталоге FTP:
[root@deep /]# touch /home/ftp/.notar [root@deep /]# touch /home/ftp/etc/.notar [root@deep /]# touch /home/ftp/dev/.notar [root@deep /]# touch /home/ftp/bin/.notar (требуется только, если Вы не использовали опцию --enable-ls) [root@deep /]# touch /home/ftp/lib/.notar (требуется только, если Вы не использовали опцию --enable-ls) [root@deep /]# chmod 0 /home/ftp/.notar [root@deep /]# chmod 0 /home/ftp/etc/.notar [root@deep /]# chmod 0 /home/ftp/dev/.notar [root@deep /]# chmod 0 /home/ftp/bin/.notar (требуется только, если Вы не использовали опцию --enable-ls) [root@deep /]# chmod 0 /home/ftp/lib/.notar (требуется только, если Вы не использовали опцию --enable-ls)
Шаг 2.
Файл нулевой длины .notar может привести в замешательство некоторые веб-клиенты и FTP-прокси, чтобы решить эту проблему, надо запретить пересылку этого файла.
Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующую строку, чтобы промаркировать файл .notar как непересылаемый:
noretrieve .notarКоманда noretrieve.
Параметр noretrieve сервера Wu-ftpd позволяет Вам запретить пересылку выбранных каталогов или файлов. Хорошей идеей будет предотвращение передачи некоторых подкаталогов (bin, etc, dev и lib) из каталога /home/ftp при помощи команды noretrieve в файле /etc/ftpaccess. Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующие строки для предотвращения передачи ряда каталогов:
# Мы предотвращаем перекачку при помощи noretrieve. noretrieve /home/ftp/etc noretrieve /home/ftp/dev noretrieve /home/ftp/bin (требуется только, если Вы не использовали опцию --enable-ls) noretrieve /home/ftp/lib (требуется только, если Вы не использовали опцию --enable-ls)
Инсталлированные файлы
> /etc/pam.d/ftp > /etc/logrotate.d/ftpd > /etc/ftpaccess > /etc/ftpconversions > /etc/ftpgroups > /etc/ftphosts > /etc/ftpusers > /home/ftp/ > /usr/man/man5/ftpconversions.5 > /usr/man/man5/xferlog.5 > /usr/man/man8/ftpd.8 > /usr/man/man8/ftpshut.8 > /usr/man/man8/ftprestart.8 > /usr/sbin/in.ftpd > /usr/sbin/ftpshut > /usr/sbin/ckconfig > /usr/bin/ftpcount > /usr/bin/ftpwho > /usr/man/man1/ftpcount.1 > /usr/man/man1/ftpwho.1 > /usr/man/man5/ftpaccess.5 > /usr/man/man5/ftphosts.5 > /usr/sbin/ftprestart > /usr/sbin/xferstats > /usr/sbin/wu.ftpd > /usr/sbin/in.wuftpd > /var/log/xferlog