Внутреннее устройство Linux - Уорд Брайан (читать книги полностью .txt) 📗
Есть несколько других распространенных сетевых серверов, которые вы можете найти в своей системе:
• httpd, apache, apache2 — веб-серверы;
• sshd — демон защищенной оболочки (см. раздел 10.3);
• postfix, qmail, sendmail — почтовые серверы;
• cupsd — сервер печати;
• nfsd, mountd — демоны сетевой файловой системы (для совместного использования файлов);
• smbd, nmbd — демоны совместного использования файлов Windows (см. главу 12);
• rpcbind — демон удаленного вызова процедуры (RPC, Remote Procedure Call) для службы зеркала портов.
Общим свойством большинства сетевых серверов является то, что они обычно действуют в виде нескольких процессов. Хотя бы один из процессов прослушивает сетевой порт, и когда поступает новое входящее соединение, прослушивающий процесс использует команду fork(), чтобы создать новый дочерний процесс, который становится ответственным за новое соединение. Процесс-потомок, или исполнитель, завершает работу при закрытии соединения. Тем временем исходный процесс продолжает прослушивание сетевого порта. Этот процесс позволяет серверу с легкостью справляться с множеством подключений, не создавая сложностей.
Однако имеются некоторые исключения из этой модели. Вызов команды fork() добавляет системе дополнительную работу. Для сравнения: такие высокопроизводительные TCP-серверы, как веб-сервер Apache, могут во время запуска создать несколько процессов-исполнителей, чтобы они всегда были наготове для обработки соединений. Серверы, которые принимают UDP-пакеты, просто получают данные и реагируют на них. У них нет соединений, которые надо прослушивать.
10.3. Защищенная оболочка (SSH)
Каждый сервер работает по-своему. Подробно рассмотрим автономный сервер SSH. Одним из самых распространенных сетевых сервисных приложений является защищенная оболочка (SSH) — стандарт де-факто для удаленного доступа к компьютерам с Unix. Настроенная оболочка SSH дает возможность защищенного входа в оболочку, удаленного исполнения команд, простого совместного использования файлов, а также позволяет заменить старые, незащищенные системы удаленного доступа telnet и rlogin на криптографические системы с открытым ключом для аутентификации и упрощенными шифрами для сеансовых данных. Большинство поставщиков интернет-услуг и облачных сервисов требуют наличия оболочки SSH для доступа к своим сервисам, а многие сетевые устройства на основе Linux (например, устройства сетевого хранения данных) также обеспечивают доступ с помощью оболочки SSH. Оболочка OpenSSH (http://www.openssh.com/) является популярной бесплатной реализацией SSH для Unix, и она присутствует практически во всех версиях Linux. Клиент оболочки OpenSSH называется ssh, а сервер — sshd. Существуют две основные версии протокола SSH: 1 и 2. Оболочка OpenSSH поддерживает обе версии, однако первая применяется редко.
Из многих полезных возможностей и функций оболочки SSH можно упомянуть следующие:
• шифрование пароля и других сеансовых данных для защиты от шпионов;
• туннелирование других сетевых соединений, включая те, которые исходят от клиентов системы X Window (подробнее об этом рассказано в главе 14);
• наличие клиентов почти для любой операционной системы;
• использование ключей для аутентификации хоста.
примечание
Туннелирование — это процесс упаковки и передачи одного сетевого подключения с помощью другого. Преимущества использования оболочки SSH для туннелирования подключений системы X Window заключаются в том, что оболочка SSH настраивает среду отображения за вас и шифрует данные внутри туннеля.
Однако у оболочки SSH есть и свои недостатки. Для начала, чтобы установить SSH-соединение, вам необходим открытый ключ удаленного хоста, а он появляется у вас не обязательно с помощью защищенного способа (хотя можно проверить его вручную, чтобы убедиться в том, что вы не подверглись взлому). Чтобы получить представление о работе различных криптографических методов, обратитесь к книге Брюса Шнайера (Bruce Schneier) Applied Cryptography: Protocols, Algorithms, and Source Code in C («Прикладная криптография: протоколы, алгоритмы и программный код на языке C»), 2-е издание (Wiley, 1996). Более подробно об оболочке SSH и работе с ней рассказано в книге Майкла У. Лукаса (Michael W. Lucas) OpenSSH, PuTTY, Tunnels and Keys («Оболочка OpenSSH, клиент PuTTY, туннели и ключи»), а также в книге Дэниела Дж. Барретта (Daniel J. Barrett), Ричарда Е. Сильвермана (Richard E. Silverman) и Роберта Дж. Бернса (Robert G. Byrnes) SSH, The Secure Shell («SSH — защищенная оболочка»), 2-е издание (O’Reilly, 2005).
10.3.1. Сервер SSHD
Для запуска сервера sshd необходим файл конфигурации, а также ключи хоста. В большинстве версий ОС файл конфигурации находится в каталоге /etc/ssh, и если вы установили пакет sshd, то вся конфигурация будет выполнена корректно за вас. Имя файла конфигурации sshd_config легко спутать с файлом установщика клиента ssh_config, поэтому будьте внимательны.
В файле sshd_config вам не придется что-либо менять, но никогда не помешает проверить его. Этот файл состоит из пар «ключевое слово — значение», как показано в приведенном фрагменте:
Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
Строки, которые начинаются с символа #, являются комментариями, и многие из них в файле sshd_config могут указывать на значения по умолчанию. Страница руководства sshd_config(5) содержит описание всех возможных значений, наиболее важными из которых являются:
• HostKey file — использует файл file в качестве ключа хоста (о ключах хоста скоро пойдет речь);
• LogLevel level — заносит сообщения с помощью уровня level системного журнала;
• PermitRootLogin value — позволяет пользователю superuser войти в защищенную оболочку, если значение value равно yes. Чтобы предотвратить вход, установите значение no;
• SyslogFacility name — заносит сообщения с помощью устройства name системного журнала;
• X11Forwarding value — включает туннелирование клиента системы X Window, если значение value равно yes;
• XAuthLocation path — обеспечивает путь для команды xauth. Туннелирование системы X11 не будет работать без этого пути. Если команда xauth расположена не в каталоге /usr/bin, укажите для значения path полный путь к команде xauth.
Ключи хоста
У оболочки OpenSSH есть три набора ключей хоста: один для протокола версии 1 и два для протокола 2-й версии. В каждом наборе присутствует открытый ключ (файл с расширением .pub) и секретный ключ (файл без расширения). Никому не показывайте секретный ключ, даже в собственной системе, поскольку при этом вы подвергаетесь риску вторжения злоумышленников.
В оболочке SSH версии 1 есть только ключи RSA, а в версии 2 есть ключи RSA и DSA. RSA и DSA являются алгоритмами шифрования открытого ключа. Имена файлов ключей приведены в табл. 10.1.
Таблица 10.1. Файлы ключей оболочки OpenSSH
Имя файла
Тип ключа
ssh_host_rsa_key
Секретный ключ RSA (версия 2)
ssh_host_rsa_key.pub
Открытый ключ RSA (версия 2)
ssh_host_dsa_key
Секретный ключ DSA (версия 2)
ssh_host_dsa_key.pub
Открытый ключ DSA (версия 2)
ssh_host_key
Секретный ключ RSA (версия 1)
ssh_host_key.pub
Открытый ключ RSA (версия 1)
Обычно вам не понадобится создавать ключи, поскольку за вас это выполнит команда из оболочки OpenSSH или из вашей версии ОС, но вам все же следует знать о том, как создавать ключи, если вы планируете использовать команды, подобные ssh-agent. Чтобы создать ключи для протокола SSH версии 2, используйте команду ssh-keygen, которая включена в оболочку OpenSSH: