Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Безопасность работы с системой Linux
Использование ssh

  Автор: © Matteo Dell'Omodarme
Перевод: © Дмитрий Попков


 

При каждом заходе telnet-ом на удаленную машину, все данные соединения передаются по сети, давая возможность потенциальному взломщику отслеживать соединение и, по большому счету, вставлять несанкционированные команды в поток данных. Применeние некоторых мощных систем шифрования позволит значительно усилить защиту сети.

Из man ssh мы можем узнать что: "Ssh (Secure Shell) - программа для регистрации на удаленной машине и выполнения команд на ней. Предназначена заменить rlogin и rsh, и обеспечить безопасную шифрованную связь между двумя компьютерам по незащищенной сети. Соединения X11 и произвольные TCP/IP порты могут также быть перенаправлены по защищенному каналу". Это мощная, очень удобная в работе программа, которая использует сильное шифрование для защиты всех передаваемых конфиденциальных данных, включая пароли.

В настоящее время существуют два SSH протокола, SSH2 и SSH1, первый является усовершенствованием SSH1. SSH2, помимо двойного шифрованного обмена ключами RSA, поддерживает и другие методы. Текущий дистрибутив поставляется со схемой обмена ключами Diffie-Hellman, имеет поддержку DSA и других алгоритмов открытых ключей.

SSH2 может быть совместим с SSH1, но не совместим по умолчанию; SSH2 сервер один не может управлять SSH1 соединением, требуется еще и SSH1 сервер, чтобы сделать это.

 

Получение и установка SSH

Вы можете получить SSH2 и SSH1 клиентов и серверы с master FTP server, или его зеркал. Последняя версия SSH1 протокола - ssh-1.2.30.tar.gz, в то время как для SSH2 ssh-2.3.0.tar.gz

Установка действительно проста. Первый шаг - распакуйте исходники:

tar -zxf ssh-1.2.30.tar.gz

Это создаст каталог ssh-1.2.30. Теперь войдите в этот каталог, и запустите процесс конфигурации:

сd ssh-1.2.30

./configure.

Скрипт configure выполнит всю необходимую конфигурацию, поиск в системе требуемых библиотек и программ. Когда скрипт закончит свою работу, выполните :

make

После успешного завершения войдите супер-пользователем и установите бинарные, конфигурационные файлы и файл hostkey выполнив:

make install

Это установит клиентов (scp1, ssh-add1, ssh-agent1, ssh-askpass1, ssh-keygen1, ssh1) в /usr/local/bin, и сервер (sshd1) в /usr/local/sbin. Обратите внимание, что, в /usr/local/bin имеется также символическая ссылка на реально исполняемые программы.

Следующим шагом установим SSH2. Действия те же, что и для SSH1:

tar -zxf ssh-2.3.0.tar.gz cd ssh-2.3.0 ./configure make
и как супер-пользователь:
make install

 

Совместимость SSH1 - SSH2

В дальнейшем мы предполагаем, что SSH1 и SSH2 установлены.
Чтобы сделать SSH2 сервер способным управлять соединениями SSH1, надо отредактировать конфигурационные файлы SSH2, которые обычно помещают в каталог /etc/ssh2/.
В том каталоге редактируем sshd2_config - файл конфигурации для sshd2, который является демоном для ssh2. Добавьте строки:

Ssh1Compatibility yes Sshd1Path /usr/local/sbin/sshd1

Измените путь на реальный, куда установили sshd1. В этой конфигурации sshd2 сервер перенаправит запросы от SSH1 клиента к sshd1.

Теперь добавьте строки к файлу ssh2_config, размещенному в том же каталоге:

Ssh1Compatibility yes Ssh1Path /usr/local/bin/ssh1

Теперь ssh2 клиент вызовет ssh1 клиента при соединении с SSH1 сервером.

 

Запуск SSH

Существуют два основных способа запуска sshd при начальной загрузке.

  • Войдите в /etc/rc.d каталог, и отредактируйте файл rc.local. В его конец добавьте строки:

    echo "Starting sshd ...."  /usr/local/sbin/sshd
    

    Таким способом sshd запускается в конце очередной загрузки компьютера с сообщением "Starting sshd...." на экране.
    Запускать sshd можно и без перезагрузки из командной строки:

    /usr/local/sbin/sshd
    
  • Альтернативно, в системах, использующих System V инициализацию, Вы можете поместить сценарий sshd2.startup, поставляемый с дистрибутивом, в /etc/rc.d/init.d, назвав его sshd2. Перейдите в каталог rc$number.d , где $number - ваше значение runlevel по умолчанию. Вы можете найти это значение в файле /etc/inittab: 
     id:5:initdefault
    
    или
     id:3:initdefault
    
    В первом случае ваш runlevel - 5, во втором 3.

    В каталоге rc$number.d выполните команду:

    ln -s ../init.d/sshd2 S90sshd2
    

    Потом перейдите в директорию /etc/rc.d/rc0.d и выполните:

      ln -s ../init.d/sshd2 K90sshd2
      

    Повторите операцию в каталоге /etc/rc.d/rc6.d.

    Теперь Вы можете запускать sshd2 без перезагрузки машины, просто выполнив сценарий:

    /etc/rc.d/init.d/sshd2 start
    

 

Установление SSH соединения

Запустив sshd на своей машине, проверьте правильность настроек, попробовав зайти на нее, используя ssh клиента. Давайте предположим, что ваша машина названа host1 и вы входите под именем myname. Запустите ssh соединение, используя команду:

ssh -l myname host1

ssh2 клиент (клиент по умолчанию) попробует соединиться с host1 порт 22 (порт по умолчанию). Sshd2 демон, выполняющийся на host1, перехватывает запрос и запрашивает пароль для myname. Если пароль правилен, он позволяет вход в систему и запускает shell.

 

Генерирование и управление ssh ключами

Ssh предлагает и другой аутентификационный механизм, основанный на аутентификационных ключах: метод шифрования с открытым ключом. Каждый пользователь, желающий использовать ssh с аутентификацией с открытым ключом, должен выполнить команду ssh-keygen (без опций) чтобы создать ключи. Команда генерирует пары ключей (публичный и частный) и запрашивает passphrase для их защиты.Создаются два файла в каталоге $HOME/.ssh2/ : id_dsa_1024_a и id_dsa_1024_a.pub, пользовательские частный и публичный ключи.

Давайте предположим, что у нас есть два аккаунта, myname1 на host1 и myname2 на host2. Мы хотим войти с host1 на host2, используя аутентификацию ssh c открытыми ключами. Чтобы сделать это, потребуются четыре шага:

  1. На host1 генерируем ключевую пару, используя команду ssh-keygen, и выбираем passphrase (кодовую фразу), чтобы защитить ее.

  2. Входим на host2, используя парольную идентификацию ssh, и повторяем предыдущую операцию. Переходим в каталог $HOME/.ssh2, и создаем файл identification, содержащий следующие строки:
    # identification
    IdKey  id_dsa_1024_a
    

    Этот файл используется sshd, чтобы идентифицировать ключевую пару, которую нужно использовать в течение соединения.

  3. Находясь на host2, получим публичный ключ ssh host1, и переименуем его (например в host1.pub):

      ftp host1
      [...]
      cd .ssh2
      get id_dsa_1024_a.pub host1.pub
      

    По окончании ftp сеанса копию публичного ключа host1, названного host1.pub, перемещаем в каталог $HOME/.ssh2 на host2.

  4. Создаем файл authorization, содержащий следующие строки:
      # authorization
      Key     host1.pub
      

    Этот файл содержит все доверительные публичные ssh ключи, помещенные в каталог $HOME/.ssh2. Когда ssh инициировано пользователем, публичный ключ которого соответствует одной из записей файла authorizashion, стартует схема аутентификации с открытыми ключами.

Чтобы проверить полученную конфигурацию, пробуйте соединиться с host1 на host2, используя ssh. Sshd должен ответить запросом о passphrase, иначе, если затребован пароль, в процессе конфигурации были ошибки, и Вы должны тщательно проверить шаги с 1 до 4.
Требуемая passphrase - ваша ЛОКАЛЬНАЯ passphrase (то есть passphrase, защищающая публичный ключ host1 ).

 

В следующей статье...

Следующая статья представит другие программы и средства из комплекта ssh: ssh-agent и ssh-add (две полезных программы управления passphrase), а также sftp и scp (защищенный ftp).

 


Copyright © 2000, Matteo Dell'Omodarme.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 61 of Linux Gazette, January 2001