Глава 13. SSH: Безопасная работа в сети

Содержание

13.1. Пакет OpenSSH
13.2. ssh
13.3. scp—безопасное копирование
13.4. sftp—безопасная передача файлов
13.5. Демон SSH (sshd)—серверная часть
13.6. Механизм аутентификации SSH
13.7. X, аутентификация и механизмы переадресации
13.8. Настройка SSH-демона с помощью YaST
13.9. Дополнительная информация

Аннотация

Часто бывает необходимо получить доступ к компьютеру удаленно. Если пользователь отправляет логин и пароль в виде обычного текста, они могут быть перехваченны и использованны злоумышеленником для того, чтобы получить доступ к удаленной системе от именни этого пользователя. Это откроет доступ нападавшему ко всем файлам пользователя, так же может быть использован для попытки получения root привилегий или попытки проникновения на другую систему. В прошлом для удаленных соединений использовалась программа telnet, которая не шифрует передаваемый траффик и не предпринимает ничего для предотвращения прослушивания. Есть и другие незащищенные каналы связи, создаваемые, например, при использовании FTP или других программ для копирования через сеть.

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

13.1. Пакет OpenSSH

В openSUSE пакет OpenSSH установлен по умолчанию. Программы ssh, scp, и sftp предоставляют альтернативу telnet, rlogin, rsh, rcp и ftp. В конфигурации по умолчанию доступ к openSUSE возможен только с помощью служебных программ из комплекта OpenSSH, и только если запущен sshd и открыты соответствующие порты в брандмауэре.

13.2. ssh

Используя ssh, можно подключиться к удаленным системам и работать в интерактивном режиме. Это заменяет и telnet и rlogin. Программа slogin является всего лишь линком на ssh. Например, для того, чтобы залогиниться в системе sun, используйте команду ssh sun, после чего надо будет ввести пароль, т.е. пройти аутентификацию в системе sun.

После успешной аутентификации можно использовать либо консоль, либо интерактивные приложения, такие как YaST. Если имя пользователся на локальной машине отличается от имени на удаленной, используйте команду ssh -l augustine sun или ssh augustine@sun.

Кроме того, ssh позволяет выполнять команды на удаленных системмах, используя rsh. В следующем примере запускается команда uptime на машине sun и создается директория с именем tmp. Вывод команды можно видеть на локальном терминале системы jupiter.

ssh otherplanet "uptime; mkdir tmp"
Password:
1:21pm  up  2:17,  9 users,  load average: 0.15, 0.04, 0.02

Кавычки здесь необходимы, чтобы посылать обе инструкции в одной команде. Вторая команда создает директорию tmp в системе sun, cразу после окончания работы uptime.

13.3. scp—безопасное копирование

scp копирует файлы на удаленную машину. Это более безопасная замена для rcp. Например scp MyLetter.tex sun: скопирует файл MyLetter.tex из системы jupiter в sun. Если имя пользователей в системе jupiter отличается от имени в системе sun, укажите его, используя такой формат: username@host. Ключ -l имеет другое значение для этой команды.

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

scp также поддерживает рекурсивное копирование. Команда scp -r src/ sun:backup/ скопирует содержимое всей директории src, включая все поддиректории, в папку backup системы sun. Если эти поддиректории не существуют, они будут созданны автоматически.

При использовании ключа , scp сохранит дату последнего изменения как у источника. Ключ -C позволит сжать передаваеммые данные. Это минимизирует объем передаваемых данных, но нагрузит процессор.

13.4. sftp—безопасная передача файлов

Для безопасной передачи данных, вместо программы scp, может использоваться sftp. Во время sftp-сессии доступны многие из команд, используемых при работе с ftp. Использование sftp может быть более лучшим выбором чем scp, особенно если не известны имена копируемых файлов.

13.5. Демон SSH (sshd)—серверная часть

Для работы с программами ssh и scp, в фоновом режиме должнен быть запущен SSH-демон, который будет использовать порт 22 TCP/IP. При запуске в первый раз, демон генерирует три пары ключей. Каждая пара стоит из секретного и открытого ключа. Чтобы гарантировать безопасность соединения через SSH, доступ к файлу с секретным ключем должен быть только у системного администратора. По умолчанию, этот файл имеет именно такие права. Секретный ключ используется только локальным SSH-демоном и не должен быть предоставлен кому-то ещё. Открытый ключ (узнаваемый по расширению файла .pub) отправляется клиенту, запросившему соединение. Файл, в котором находится открытый ключ, может прочитать любой пользователь системы.

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

OpenSSH для связи между SSH-сервером и SSH-клиентом поддерживает первую и вторую версию протокола SSH. По умолчанию используется вторая версия. Если Вы хотите использовать первую версию, используйте ключ -1.

При использовании версии 1, SSH-сервер посылает свой открытый ключ и так называемый "ключ сервера", которые генерируются раз в час. На основании этих ключей SSH-клиент генерирует ключ сессии, который в последствии он посылает SSH-серверу. SSH-клиент также говорит серверу какой метод шифрования использовать. Вторая версия протокола SSH не требуют ключа сервера. Обе стороны используют алгоритм Диффи-Хеллмана (Diffie-Hellman) для обмена ключами.

Секретный и серверный ключи необходимы для расшифровки ключа сессии и не могут быть получены, при использовании лишь открытых ключей. Только при соединении SSH-демон может расшифровать ключ сессии, используя свои секретные ключи. Эта начальная фаза установки соедининения более детально будет показана (включая отладочную информацию) при использовании ключа -v.

Клиент сохраняет открытые host-ключи в фaйле ~/.ssh/known_hosts, после первого соединения с удаленной системой. Это предотвращает любые попытки "нападений посредине" внешними SSH серверами, использующими поддельные имена или IP-адреса. Такие нападения будут сразу же обнаружены по отличному ключу, которого нет в ~/.ssh/known_hosts или неспособностью сервера расшифровать ключ сессии из-за отсутсвия соответствующих секретных ключей.

Рекомендуестся сохранять секретные и открытые ключи, которые находятся в /etc/ssh/, на каком-нибудь безопасном внешнем носителе. В этом случае эти ключи могут быть снова использованны, к примеру, после переустановки системы.

13.6. Механизм аутентификации SSH

Аутентификация в своей простейшей форме, как упоминалось выше, это просто ввод пароля. Цель SSH сосоит в том, чтобы предоставить пользователю безопасное программное обеспечение, которое так же просто в использовании. Поскольку при создании подразумевалась альтернатива rsh и rlogin, SSH так же предоставило очень простые методы аутентификации, подходящие для ежедневного использования. Достигается это посредством еще одной пары ключей, создаваемых пользователем. В составе openssh-пакета специально для этого есть вспомогательная программа ssh-keygen. После команд ssh-keygen -t rsa или ssh-keygen -t dsa, генерируется эта пара ключей.

Подтвердите использование установок по умолчанию и введите пароль. Пароль должен содержать (рекомендованное количество для процедуры, описанной тут) от 10 до 30 символов. Не используйте простые или короткие слова или фразы. Подтвердите пароль (введите его еще раз). После этого секретный и открытый ключи, в этом примере, будут сохраненны в id_rsa и id_rsa.pub.

Используйте ssh-keygen -p -t rsa или ssh-keygen -p -t dsa, чтобы изменить пароль. Скопируйте открытый ключ (id_rsa.pub в этом примере) на другую машину и сохраните его в ~/.ssh/authorized_keys. При следующем соединении будет предложенно идентифицировать cебя, т.е. подтвердить пароль еще раз. Если этого не произойдет, проверьте расположение и содержимое этих файлов.

Эта процедура не так удобна, чем ввод пароля при каждом новом соединении. По этой причине пакет openssh предоставляет другую программу, ssh-agent, который сохраняет секретные ключи на время X-сессии. Все X-сессии запускаются как дочерний процесс ssh-agent. Самый простой способ сделать это - установить параметр yes для переменной usessh в начале файла .xsession, выйти и зайти в систему снова, используя, к примеру, KDM или GDM. Можно так же просто сделать ssh-agent startx.

После этого Вы можете использовать ssh или scp как обычно. Если Вы создадите свой открытый ключ, как описанно выше, Вам не придется больше вводить свой пароль. Не забывайте о завершении X-сессии, а так же ее защите при помощи пароля, используя, например, xlock.

[Note]Права доступа к файлам при использовании host-аутентификации

При использовании host-аутентификации, файл /usr/lib/ssh/ssh-keysign или /usr/lib64/ssh/ssh-keysign должен иметь SETUID бит, который в openSUSE не установлен по умолчанию. Вы должны установить его сами в ручную. Используйте для этого файл /etc/permissions.local, чтобы быть уверенным, что SETUID бит сохраниться и после обновления OpenSSH.

13.7. X, аутентификация и механизмы переадресации

Помимо описанных выше возможностей, через SSH также можно работать с удаленными X-приложениями. При использовании ssh с ключем -X, переменная DISPLAY автоматически устанавливается на удаленной машине, и весь вывод X-приложения экспортируется через SSH-соединение. Другими словами, X-приложение запускается на удаленной системе, но работать с ней можно локально, при этом передаваемые данные не могут быть перехвачены злоумышленником.

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

Оба механизма не используются по умолчанию, но могут быть в любое время включены. Для этого отредактируйте системный конфигурационный файл /etc/ssh/sshd_config или пользовательский ~/.ssh/config.

ssh также может быть использован для перенаправления TCP/IP соединения. В приведенном ниже примере SSH перенаправляет SMTP и POP3 порт:

ssh -L 25:sun:25 jupiter

С помощью этой команды, все соединения на 25 порт (SMTP) системы jupiter будут перенаправляться через зашифрованный канал на SMTP порт системы sun. Это особенно полезно для тех, кто использует SMTP серверы без SMTP-AUTH или POP-before-SMTP. Электронная почта, откуда бы она ни пришла, будет переданна для дальнейшей доставки «домашнему» почтовому серверу. Точно так же все POP3 запросы (порт 110) на jupiter могут быть перенаправленны на POP3 порт sun, при помощи следующей команды:

ssh -L 110:sun:110 jupiter

Обе команды должны быть выполненны с правами root, так как соединение использует привилегированные порты. При использовании электронной почты обычными пользователями будет использоваться SSH соединение. Дополнительную информацию можно найти в man-руководствах для каждой из программ, описанной выше, а также в документации проекта OpenSSH: /usr/share/doc/packages/openssh.

13.8. Настройка SSH-демона с помощью YaST

YaST-модуль, отвечающий за настройку SSHD, не устанавливается по умолчанию. Для его установки запустите YaST, выберете Software+Software Management и найдите и установите пакет yast2-sshd.

Для настройки sshd-сервера с помошью YaST запустите YaST и выберете Сетевые службы+Настройка SSHD. Затем сделайте следующее:

  1. На вкладке Общие, в таблице SSHD TCP Ports, выберите порты, которые должен использовать SSHD. По умолчанию используется порт 22. Вы можете выбрать несколько портов. Чтобы добавить новый порт, нажмите кнопку Добавить, введите номер порта и нажмите кнопку ОК. Для удаления порта, найдите его в таблице, нажмите кнопку Удалить и подтвердите удаление.

  2. На вкладке "Общие" находятся и другие настройки, поддерживаемые sshd-демоном. Для отключения переадресации TCP (TCP Forwarding), снимите флажок Разрешить TCP переадресацию. Отключение переадресации TCP не улучшает безопасность, если пользователи не имеют доступа к терминалу, так как они всегда могут установить свои собственные переадресации. См. Раздел 13.7, «X, аутентификация и механизмы переадресации» для получения дополнительной информации о переадресации TCP.

    Чтобы отключить переадресацию X, снимите флажок Разрешить X11 переадресацию. Если эта опция отключена, любые запросы переадресации X11 вперед будут приводить к ошибке. Однако пользователи всегда могут установить свою собственную переадресацию. См.Раздел 13.7, «X, аутентификация и механизмы переадресации» для получения дополнительной информации о переадресации X.

    Опция Разрешить сжатие определяет, должна ли связь между сервером и клиентам быть сжата.

  3. Вкладка Настройки входа в систему содержит общие настройки входа в систему и аутентификации. В Показывать Сообщение дня после входа в систему определяется, должен ли sshd выводить сообщение из /etc/motd при интерактивном режиме входа в систему. Если Вы хотит отключить возможность входить в систему пользователю root, отключите Разрешать вход администратора в систему.

    В Максимальном числе попыток аутентификации устанавливается максимальное количество попыток аутентификации за одно соединение. Аутентификация RSA определяет, разрешенна ли аутентификация RSA. Этот параметр применяется только к первой версии протокола SSH. Аутентификация по открытому ключу определяет, разрешеа ли аутентификация пользователя с помощью открытого ключа. Этот параметр используется только во второй версии протокола SSH.

  4. На вкладке Протокол и шифрования определяются версии протокола SSH, которые должны поддерживатся. Вы можете выбрать первую или вторую версию, а так же параллельную поддержку обоих SSH-протоколов.

    В Поддерживаемые методы шифрования перечисленны все поддерживаемые алгоритмы шифрования. Вы можете удалить шифр, выбрав его в списке и нажав кнопку Удалить. Чтобы добавить шифр, выберите его из выпадающего меню и нажмите кнопку Добавить.

  5. Нажмите Finish для сохранения настроек.

13.9. Дополнительная информация

http://www.openssh.com/ru

Страница проекта OpenSSH

man ssh_config

man-страница о конфигурационных файлах OpenSSH.

man sshd

man-страница о OpenSSH-демоне

man scp , man sftp , man slogin , man ssh , man ssh-add , man ssh-agent , man ssh-copy-id , man ssh-keyconvert , man ssh-keygen , man ssh-keyscan

man-страницы о программах копирования файлов (scp, sftp), login (slogin, ssh), и ключах.