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