Linux: Полное руководство — страница 51 из 98

alias office director secretar

В дальнейшем, чтобы отправить сообщение в производственный отдел, просто введите команду:

$ mail proizv

Программа mail попросит вас ввести тему, а затем текст сообщения. Для окончания ввода нажмите Ctrl+D, и mail отправит сообщения пользователям.

Если пользователей много, использовать механизм псевдонимов не очень удобно. Гораздо удобнее, чтобы программа mail брала список подписчиков из какого-нибудь файла. К сожалению, разработчики не предусмотрели такой возможности, однако с помощью небольшого сценария мы можем эту возможность организовать.

Создайте сценарий

smaller
в своем домашнем каталоге (листинг 14.4).

Листинг 14.4. Сценарий smailer

#!/bin/bash

DT=`date`

echo $DT >> log

for user in `cat users`

do

 echo "Sending message to $user"

 mail $user -s Subscribe < msg 2>> log

done

Сообщение, которое вы хотите отправить, запишите в файл

msg
, а список подписчиков по одному в строке — в файл
users
.

Программу mail можно использовать и для чтения почты. Для этого просто введите команду

mail
. Если в пашем почтовом ящике есть новые сообщения, программа выведет на экран нумерованный список, и вы сможете ввести номер сообщения, которое хотите прочитать. Для удаления сообщения используется команда d <номер> или d <диапазон>. Выйти из программы можно, введя команду q.

Программа mail — это исключительно пользовательский агент: она работает только с вашим локальным ящиком, В другие почтовые клиенты обычно встроен и агент доступа, забирающий сообщения с внешнего сервера, например, pop.mail.ru. Я советую использовать в качестве почтового клиента программу kmail, входящую в состав KDE.

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

14.6. Защита программы sendmail. Программа smrsh

Однажды неизвестный хакер может заставить ваш sendmail выполнить какую-нибудь программу. Какая это будет программа — зависит от его фантазии: безобидная команда echo или «rm -rf /». О том, как это сделать, я писать не буду — лучше разберемся, как этого не допустить.

По умолчанию для запуска внешних программ используется оболочка

/bin/sh
(или
/bin/bash
), которая позволяет запускать любые программы без ограничения. Вместо оболочки
/bin/sh
рекомендуется использовать защищенную оболочку smrsh, которая позволяет определить, какие программы можно запускать, а какие — нет.

Определим список программ, которые можно запускать. В него войдут пользовательские агенты (mail), агент доставки procmail и, может быть, что-нибудь еще. Категорически нельзя разрешать запускать командные оболочки (sh, bash, tcsh и другие), потоковый редактор sed, интерпретаторы perl, php и программу uuencode.

Создайте в каталоге

/etc/smrsh
ссылки на программы, которые можно запускать:

$ cd /etc/smrsh

$ ln -s /bin/mail mail

$ ln -s /usr/bin/procmail procmail

Откройте файл

sendmail.cf
и замените строки:

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL,

 R=EnvToL/HdrToL, D=$z:/,

 T=X-Unix/X-Unix/X-Unix,

 A=sh -c $u

строками:

Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=EnvFromL/Hdr-FromL,

 R=EnvToL/HdrToL, D=$z:/,

 T=X-Unix/X-Unix/X-Unix,

 A=smrsh -c $u

После этого перезапустите программу sendmail:

# service sendmail restart

Глава 15Настройка сервера FTP

FTP (File Transfer Protocol) — один из старейших протоколов Интернета — используется для обмена файлами между системами. Обычно на FTP-сервере размещают свободно распространяемое программное обеспечение, документацию, обновления программ, драйверы и прочую публичную информацию. Примером FTP-сервера может послужить сервер

ftp://ftp.redhat.com
. На этом сервере вы можете найти как саму операционную систему Linux Red Hat, так и обновления ее пакетов, а также дополнительные программы.

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

Над файлами и каталогами вы можете производить обычные операции: создание, удаление, копирование, перемещение, переименование. Как правило, при выполнении операции копирования вы либо копируете файлы на сервер (команда put) — загружаете на сервер, либо копируете файлы с сервера на свою локальную машину (команда get) — скачиваете с сервера. Работа с FTP-клиентом рассмотрена в п.6.4.5.3, а в этой главе я покажу, как создать FTP-сервер.

15.1. Сервер WU-FTPD

Сервер FTP wu-ftpd, разработанный в Вашингтонском университете, очень широко распространен. Он устанавливается из пакета wu-ftpd, входящего в состав практически каждого дистрибутива.

Демон in.ftpd может быть либо постоянно загружен в память (режим standalone), либо вызываться суперсервером xinetd (inetd) по мере необходимости. Режим standalone и применяется, как правило, если FTP-серверу нужно часто обрабатывать запросы клиентов. Второй режим используется в целях экономии памяти, когда нагрузка на FTP-сервер не очень велика.

Чтобы запускать сервер FTP из-под супердемона, добавьте в файл

inetd.conf
следующую строку:

ftpstream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a

Таким образом, FTP-сервер вызывается не напрямую, а через TCP-wrapper, чем обеспечивается дополнительная безопасность. Если вы используете супердемон xinetd, описание FTP-сервера должно выглядеть так (листинг 15.1).

Листинг 15.1. Фрагмент файла xinetd.conf

service ftp

{

 socket_type = stream

 wait = no

 user = root

 server = /usr/etc/in.ftpd

 server_args = -1

 instances = 4

 log_on_success += DURATION USERID

 log_on_failure += USERID

 access_times = 2:00-8:59 12:00-23:59

 nice = 10

}

Ключ -l регистрирует все сеансы FTP в службе syslog. Другие ключи, с которыми можно запускать FTP-сервер, перечислены в таблице 15.1.


Ключи командной строки сервера wu-ftpd Таблица 15.1

КлючНазначение
-dЗаписывает отладочную информацию в журнал syslog
-lРегистрирует все FTP-сеансы в журнале syslog
-LРегистрирует в журнале syslog все команды, отправленные серверу FTP
-tсекундыУстанавливает предел времени ожидания дли пассивных клиентов (по умолчанию 15 минут). Если за этот промежуток времени от клиента не поступит ни одной команды, то FTP-сеанс с сервером будет разорван
-TсeкундыМаксимально допустимое время сеанса FTP (по умолчанию 2 часа)
-aРазрешает использование файла конфигурации
ftpaccess
-AЗапрещает использование файла конфигурации
ftpaccess
. Эта опция установлена по умолчанию
-IРегистрирует в журнале xterlog файлы, полученные сервером FTP
-oРегистрирует в журнале xferlog файлы, переданные сервером во время сеанса

15.1.1. Настройка WU-FTPD. Конфигурационные файлы

Сервер wu-ftpd использует пять файлов конфигурации:

/etc/ftpaccess
— основной файл конфигурации;

/etc/ftphosts
— файл, позволяющий запретить доступ к wu-ftpd с определенных узлов или определенным пользователям;

/etc/ftpusers
— этот файл содержит список локальных пользователей (зарегистрированных на сервере), которым запрещается взаимодействовать с wu-ftpd;

/etc/ftpservers
— позволяет задавать и использовать различную конфигурацию FTP-сервера для различных узлов;

/etc/ftpconversions
— определяет типы файлов архивов, которые будут использоваться при сжатии (архивировании) передаваемых данных. Само сжатие включается и выключается в файле
/etc/ftpaccess
.

Основной файл ftpaccess. Директивы сервера WU-FTPD

В этом файле содержатся директивы, которые управляют правами доступа и регистрацией пользователей, задают параметры TCP/IP-взаимодействия, виды регистрируемых событий, используются для конфигурирования анонимного доступа к FTP-серверу и т.п. Пример файла

/etc/ftpaccess
приведен в листинге 15.2.

Листинг 15.2. Примерный файл ftpaccess

class all real,guest,anonymous *


email root@localhost


loginfails 3


readme README* login

readme README* cwd=*


message /welcome.msg login

message .message cwd=*


compress yes all

tar yes all

chmod     no guest, anonymous

delete    no guest,anonymous

overwrite no guest,anonymous

rename    no guest,anonymous


log transfers anonymous,real inbound,outbound


shutdown /etc/shutmsg


passwd-check rfc822 warn

Директива class определяет класс пользователей, которые будут иметь доступ к серверу FTP. В примере 11.3 задан класс all, который состоит из следующих типов пользователей: настоящие (real), гости (guest), анонимные (anonymous). Под настоящими пользователями подразумеваются те, которые зарегистрированы на сервере, то есть их учетные записи хранятся в файле

/etc/passwd
.

С помощью директивы email можно указать адрес администратора сервера.

Директива loginfails задает максимальное количество попыток регистрации. Если это количество превышено, пользователь автоматически будет отключен. Значение по умолчанию для этой директивы равно 5.

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

Директивы chmod и delete определяют, могут ли пользователи использовать одноименные команды FTP. А директивы overwrite или delete разрешают или запрещают определенным пользователям перезаписывать или удалять файлы на сервере. В приведенном примере пользователи классов guest и anonymous не могут выполнять ни одну из упомянутых операций.

Общий список директив сервера wu-ftpd перечислен в таблице 15.2.


Директивы сервера wu-ftpd Таблица 15.2

ДирективаОписание
autogroup имя_группы имя_класса […]Разрешает доступ анонимным пользователям определенных классов к файлам, которые принадлежат к указанной группе
alias псевдоним каталогСоздает псевдоним дли каталога на FTP-сервере. Псевдоним позволяет быстро (указав только псевдоним) перейти в соответствующий ему каталог из любого другого каталога на сервере
anonymous-root каталог [имя_класса]Указывает каталог, который будет использоваться в качестве корневого для заданного класса пользователей. После успешной регистрации пользователя на FTP-сервере он автоматически попадет в соответствующий его классу каталог. Если имя класса не указано, то данная директива будет задавать корневой каталог для анонимных пользователей, для которых корневой каталог не определен явно
banner /абсолютный/путь/к/файлуПеред регистрацией клиента ему будет показано сообщение из указанного файла
bit-limit [raw] in | out | total макс_кол_байт [имя_класса]Устанавливает ограничение на количество пересылаемой информации в байтах для пользователей указанного класса. Если имя класса не указать, то данное ограничение будет применяться ко всем пользователям, для которых ограничение не указано явно. Необязательный параметр raw позволяет ограничить весь объем пересылаемой информации (в том числе и служебной), а не только пересылаемых файлов. Значения in, out, total указывают поток данных (на сервер, от сервера или оба одновременно), подлежащий учету
class имя_класса типы_пользователей адреса_узловСоздает класс пользователей с указанным именем, В качестве типа пользователей используются ключевые слова anonymous (анонимные пользователи), guest (гостевые пользователи) и real (зарегистрированные пользователи). Если указывается несколько типов, то они перечисляются через запятую без пробелов. В поле адреса_узлов указываются адреса узлов, пользователи только с которых будут принадлежать данному классу. Символ звездочка «*» означает все узлы. Адреса узлов могут указываться в виде одного из следующих форматов: ♦IP-адрес. Отдельный IP-адрес. ♦IP-адрес: маска сетиIР-адрес/cidr. IP-адрес с маской CIDR. ♦!nameserved. Указание этого идентификатора приводит к запрету доступа со всех узлов, имена которых не удается получить от DNS-cepвepa. ♦/имя_файла. Указывается абсолютное имя текстового файла, в котором содержится список IP-адресов (по одному в строке)
cdpath каталогОпределяет для директивы cdpath выражение, с помощью которого задается путь поиска при переходе в указанный каталог
compress yes | no имя_классаРазрешает или запрещает сжатие данных перед отправкой (команда compress) для указанного класса пользователей
defaultserver privateЗапрещает анонимный доступ к серверу
deny адреса_узлов /путь/к/файл_сообщенияЗапрещает доступ к серверу для узлов с указанными адресами. При этом будет отображено сообщение из файл_сообщения. Адреса узлов могут указываться в виде одного из следующих форматов: ♦IP-адресIP-адрес:маска_сетиIP-адрес/cidr!nameserved/имя_файла
email адрес_почтыПочтовый адрес администратора сервера
file-limit [raw] in | out| total количество_файлов [имя_класса]Устанавливает ограничение на количество пересылаемых файлов для пользователей указанного класса. Параметр количество_файлов как раз и задает максимально допустимое количество файлов. Значение остальных параметров такое же, как и для директивы bit-limit
guestgroup имя группы [имя группы…]Всем пользователям, входящим а группу с указанным именем, будет разрешен гостевой доступ к серверу FTP
limit имя_класса максимум периоды файл_сообщенияОграничивает число одновременно работающих пользователей, принадлежащих указанному классу, в определенное время суток. Параметр максимум задает максимально допустимое количество одновременно работающих пользователей. Параметр периоды задает временные интервалы. Клиенту, которому запрещается доступ к FTP-серверу в результате действия данной директивы, будет показано сообщение из файла
loginfails количествоОпределяет максимальное число неудачных попыток регистрации пользователя, после которых он будет отключен. По умолчанию количество попыток равно 5
log commands типы_пользователейРегистрирует в журнале команды, которые вводились пользователями указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real
log transfers тип_пользователей список_направленийРегистрирует а журнале акты передачи файлов пользователями указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real. В поле список_направлений задается направление передачи, подлежащее протоколированию: inbound (входящие файлы), outbound (исходящие). Если указываются оба направления. То они должны быть разделены запятой без пробела
message файл_сообщения действиеОтображает файл_сообщения во время регистрации или при перехода в другой каталог. Соответственно значение в поле действие может быть либо LOGIN (регистрация) или CWD=каталог (переход в каталог). Запись cwd=* задает любой каталог
noretrieve [class=имя_класса] список_файловЗапрещает получение указанных в списке файлов. Если указан параметр class, то этот запрет распространяется только на пользователей заданного класса
readme файл действиеВо время регистрации или при смене каталога пользователь получит сообщение о существовании и времени модификации указанного файла. Параметр действие определяется так же, как и в директиве message
tar yes | no имя_классаРазрешает или запрещает использование команды tar для указанного класса пользователей, то есть разрешает или запрещает архивирование файлов архиватором tar перед их пересылкой
virtual адресРазрешает использование виртуального FTP-узла

Кроме общих директив, сервер wu-ftpd имеет директивы, которые управляют правами доступа. Директивы прав доступа определяют, какие операции могут выполнять пользователи того или иного типа. Эти директивы перечислены в таблице 15.3.


Директивы прав доступа Таблица 15.3

ДирективаНазначение
chmod yes | no типы_пользователейРазрешает или запрещает выполнять команду chmod для пользователей указанных типов. В качестве типов пользователей указываются ключевые слова anonymous, guest, real
delete yes | no типы_пользователейРазрешает или запрещает выполнять команду delete для пользователей указанных типов
overwrite yes | no типы_пользователейРазрешает или запрещает пользователям указанных типов перезаписывать файлы на сервере
rename yes | no типы_пользователейРазрешает или запрещает пользователям указанных типов переименовывать файлы на сервере
Password-check rfc822| trivial | none enforce | warnЗадает уровень проверки пароля. При этом в качестве первого параметра указывается метод проверки пароля: ♦none — отключает проверку паролей; ♦trivial — все пароли должны обязательно содержать символ '@'; ♦rfs822 — в качестве паролей должны указываться адреса электронной почты, задаваемые согласно стандарту RFC822 (рекомендую использовать именно его значение). Вторым параметром задается действие, которое должно производиться в тех случаях, когда пользователь введет неправильный пароль. Значение warn говорит о том, что пользователь просто будет проинформирован об ошибке в пароле и далее ему будет позволено заново зарегистрироваться на FTP-сервере. Если указать значение enforce, то пользователю будет выдано сообщение о неправильном пароле и ему в дальнейшем будет запрещен доступ к серверу
upload yes | no типы_пользователейРазрешает или запрещает закачку файлов на сервер пользователям указанных типов
Файл ftphosts — параметры доступа для пользователей с указанных узлов

Файл

ftphosts
используется для разрешения или запрещения доступа определенных пользователей с указанных узлов. Например, вы можете разрешить доступ пользователю admin только с компьютера
admin.domain.ru
и запретить со всех остальных. А для других пользователей разрешить доступ со всех компьютеров. Таким образом, в файле могут быть записи двух видов: разрешающие и запрещающие. Формат записей в файле
ftphosts
следующий:

allow | deny пользователь узел [узел...]

Разрешающая запись

allow
разрешает пользователю регистрироваться с узлов, указанных в списке, но запрещает регистрацию со всех остальных. Запись
deny
, наоборот, запрещает доступ с определенных узлов, но разрешает со всех остальных. В листинге 15.2 приведен пример файла
ftphosts
.

Листинг 15.2. Пример файла ftphosts

allow admin 192.168.1.1

deny user 192.168.1.2 192.168.1.3

Файл ftpusers — список локальных пользователей, которым запрещено пользоваться WU-FTPD

Файл

/etc/ftpusers
содержит список локальных пользователей, которым запрещается обращение к серверу wu-ftpd. Эти пользователи не могут зарегистрироваться на сервере. При попытке регистрации будет выведено сообщение об ошибке Login Incorrect, даже если пользователь ввел правильный пароль.

Из соображений безопасности этот файл должен содержать хотя бы имена пользователей root, bin, nobody, daemon, news, uucp. Пустые строки, а также строки, начинающиеся с символа #, игнорируются. Полностью корректный с точки зрения безопасности файл представлен в листинге 15.3.

Листинг 15.3. Файл ftpusers

root

bin


adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

Файл ftpservers — разные настройки ftp-сервера для различных узлов

По умолчанию настройки wu-ftpd применяются ко всем клиентам, подключающимся к нему. Файл

/etc/ftpservers
позволяет задать режим, в котором для определенных узлов будут применяться свои индивидуальные настройки.

Файл

/etc/ftpservers
состоит из записей следующего вида:

IP-адрес(или имя узла) Каталог

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

192.168.1.2 /etc/ftpd/user34
, то при обращении клиента 192.168.1.2 для него будут использоваться конфигурационные файлы из каталога
/etc/ftpd/user34
.

Файл ftpconversions — форматы сжатия

В файле

/etc/ftpconversions
задаются форматы сжатия, разрешенные для использования во время сеанса FTP. Обращаю ваше внимание на то, что само сжатие передаваемых данных включается и выключается соответствующей директивой в файле
ftpaccess
. Стандартный файл
ftpconversions
представлен в листинге 15.4.

Листинг 15.4 Файл ftpconversions

:.Z ::       :/bin/compress -d -с %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_REGIT_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 -e -z -f - %s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

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

Например, сжатый программой gzip файл должен иметь имя с суффиксом gz. Чтобы к имени файла был добавлен суффикс gz, запись в файле

ftpconversions
должна иметь постфикс gz.

Файл xferlog — журнал FTP-сервера

В файл

xferlog
записываются все транзакции, которые были произведены в ходе сеансов работы пользователей. С помощью ключей и -i сервера FTP можно выбрать тип транзакций, записываемых в журнал.

Рассмотрим листинг 11.7, в котором представлен фрагмент файла

xferlog
.

Листинг 15.5. Фрагмент файла xferlog

Wed Jan 9 11:49:35 2002 1 localhost.localdomain 1490

 /home/den/vmware.html a _ о r den ftp 0 * с

Wed Jan 9 11:50:08 2002 1 localhost.localdomain 281

 /home/den/w.out a _ о r den ftp 0 * с

Wed Jan 9 11:50:15 2002 1 localhost.localdomain 281

 /home/den/w.out a _ i r den ftp 0 * с

Wed Jan 9 11:52:08 2002 1 localhost.localdomain 888

 /home/den/ftphosts.html b _ i r den ftp 0 * с

Из первой записи видно, что пользователь den был зарегистрирован с удаленного узла localhost.localdomain. Начало передачи файла

/home/den/vmware.html
произошло в среду, 9 января 2002 года в 11:49. Общее время передачи — одна секунда. Общий объем переданной информации составляет 1490 байт.

Для передачи файла использовался режим ASCII (а), не было произведено никаких специальных операций (_). Файл

vmware.html
пользователь загружал с сервера, на что указывает направление передачи (о). Пользователь
den
является зарегистрированным пользователем системы (r). Символ g на этом месте означал бы гостевую регистрацию, а символ a — анонимную. Название службы, которая производила операцию — ftp.

Теперь рассмотрим четвертую запись. Тот же пользователь den передал на сервер файл

ftphosts.html
. Направление передачи — на сервер (i). Режим передачи — двоичный (b). Вторая и третья записи сообщают о загрузке с сервера и на сервер файла
w.out
в текстовом (а) режиме.

Остается только отметить, что файл

xferlog
используется обоими серверами FTP — wu-ftpd и ProFTPD.

15.2. Сервер ProFTP