Библиотека сайта rus-linux.net
Глава 12. Важные сетевые возможности
После успешной установки IP и resolver Вы должны перейти к настройке сервисов, обеспечивающих хорошую работу в сети. Эта глава начинается с описания настройки нескольких простых сетевых приложений, включая суперсервер inetd и программ семейства rlogin.
Конечно, я не могу описать все сетевые приложения в этой работе. Если Вы хотите установить то приложение, которое здесь не обсуждается, обратитесь к руководству по этому приложению.
Суперсервер inetd
Часто услуги предоставляются так называемыми демонами (daemons). Daemon является программой, которая открывает некоторый порт и ждет входящих соединений. Если происходит соединение, программа создает дочерний процесс, который обрабатывает соединение в то время, как основной процесс продолжает ждать дальнейших запросов. Этот подход имеет тот недостаток, что для каждого предлагаемого сервиса daemon должен быть свой. А они занимают ресурсы системы пока ждут соединения.
Таким образом, почти все версии Un*x запускают "суперсервер", который создает сокеты для ряда услуг и слушает их одновременно при использовании системного вызова select(2). Когда отдаленный хост запрашивает одну из услуг, суперсервер замечает это и порождает другой сервер, установленный для этого порта, а сам продолжает слушать соединения.
Обычно используется суперсервер inetd, Internet
Daemon. Он запускается при начальной загрузке системы и берет список услуг,
к которым он обращается из файла запуска /etc/inetd.conf
. В дополнение к вызываемым серверам там есть ряд тривиальных услуг,
которые являются внутренними сервисами inetd. Они
включают chargen, который просто генерирует ряд
знаков и daytime, который возвращает время.
|
Значения полей:
- service
- Задает имя сервиса. Service name должно быть
переведено в номер порта с помощью файла
/etc/services
. Этот файл будет описан в соответствующем разделе. - type
- Определяет тип сокета: stream (для протоколов, ориентированных на соединение) или dgram (для датаграмных протоколов). TCP-сервисы должны всегда использовать stream, в то время как UDP-услуги должны всегда использовать dgram.
- protocol
- Задает транспортный протокол для этого сервиса. Это
поле должно быть подходящим названием протокола, найденным в файле
protocols
. - wait
- Эта опция применяется только на dgram. Это может быть wait или nowait. Если определен wait, то inetd выполняет одновременно только один сервер для порта. Иначе после запуска сервера он немедленно продолжит слушать порт. Это полезно для серверов, которые читают все входящие датаграммы и завершают работу. Большинство RPC-серверов имеет этот тип и должны определять wait . Противоположный тип, "многопоточные" серверы, могут быть запущены в нескольких копиях, но это редко используется. Эти серверы должны определять nowait. Сокеты stream должны всегда использовать nowait.
- user
- Это поле является идентификатором пользователя, от имени которого работает сервис. Часто это будет root, но некоторые сервисы могут применять различных пользователей. Это очень хорошая идея применения принципа наименьшего количества привилегий, который заявляет, что Вы не должны запускать команду от имени привилегированного пользователя, если программа не требует этого для функционирования. Для примера, NNTP (сервер новостей) будет запущен от имени news, а сервисы, вызывающие возможное нарушение защиты (tftp или finger), будут работать как nobody.
- server
- Задает полный путь к программе сервера, который будет выполнен. Внутренние сервисы помечаются ключевым словом internal.
- cmdline
- Командная строка, которую нужно выполнить на сервере. Она включает аргумент 0, который является именем команды. Обычно это не будет именем программы сервера, если программа ведет себя по-разному, когда вызывается с различными именами. Это поле пусто для внутренних сервисов.
Пример файла inetd.conf
показан в
примере 12-1.
Сервис finger закомментирован, чтобы он не был
доступен. Это часто делается из соображений безопасности, потому что может
использоваться нападающими для того, чтобы получить имя пользователя на Вашей
системе.
Пример 12-1. Типовой файл /etc/inetd.conf
# # inetd services ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue #finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd /boot/diskless #login stream tcp nowait root /usr/sbin/rlogind in.rlogind #shell stream tcp nowait root /usr/sbin/rshd in.rshd #exec stream tcp nowait root /usr/sbin/rexecd in.rexecd # # inetd internal services # daytime stream tcp nowait root internal daytime dgram udp nowait root internal time stream tcp nowait root internal time dgram udp nowait root internal echo stream tcp nowait root internal echo dgram udp nowait root internal discard stream tcp nowait root internal discard dgram udp nowait root internal chargen stream tcp nowait root internal chargen dgram udp nowait root internal |
tftp также закомментирован. tftp
осуществляет примитивный протокол передачи файлов (
Trivial File Transfer Protocol), который позволяет передавать любые
общедоступные файлы из Вашей системы без пароля. Это особенно вредно для
файла /etc/passwd
, даже более того, когда Вы не
используете теневой пароль.
TFTP обычно используется бездисковыми клиентами и X-терминалами при загрузке их кода с сервера при начальной загрузке. Если Вы должны запустить tftpd, удостоверьтесь, что область доступа к директориям клиентов будет строго ограничена. Это показано во второй строке для tftp, в примере.
Назад | Глобальное оглавление | Вперед |
Еще о сетевой трансляции адресов (Network Address Translation) | Контроль доступа с помощью tcpd |