Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum






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

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

Глава 11. Программы обеспечения безопасности (Сетевые сервисы)

Linux OpenSSH клиент и сервер

Краткий обзор

Как было написано в главе "Инсталляция вашего Linux сервера", многие сетевые сервисы, включая, но не ограничиваясь, telnet, rsh, rlogin или rexec, уязвимы к электронному прослушиванию. В результате любой человек, имеющий доступ к компьютеру в Вашей сети, может прослушивать сообщения и перехватывать пароли и другую полезную информацию, проходящую по сети в открытом виде. Программа telnet необходима для решения ежедневных административных задач, но она не безопасна, так как передает через сеть пароли в открытом виде. Чтобы решить эту проблему необходима программа, которая заменит telnet. К счастью такая программа есть, это OpenSSH настоящая и безопасная замена старых и небезопасных программ удаленного доступа таких, как telnet, rlogin, rsh, rdist или rcp.

Согласно официальному файлу README по OpenSSH:

Ssh (Secure Shell) это программа для подключения к компьютерам через сеть, выполнения команд на удаленных машинах и перемещения файлов с одного компьютера на другой. Она предоставляет строгую аутентификацию и безопасную передачу информации по незащищенным каналам. Ssh предназначен заменить rlogin, rsh, rcp и rdist.

В нашей конфигурации мы будем настраивать OpenSSH на поддержку tcp-wrappers (inetd superserver) для улучшения безопасности уже безопасной программы и чтобы не запускать ее как демон. В результате когда клиент пытается соединиться с сервером, ssh будет запущен TCP-WRAPPER для его аутентификации и авторизации перед тем, как разрешить подключение.

OpenSSH это свободно распространяемая замена SSH1, в которой были удалены все патентозависимые алгоритмы (во внешние библиотеки), все известные ошибки в безопасности и добавлены новые возможности. Мы рекомендуем использовать OpenSSH вместо SSH1 (свободно распространяемой, но содержащей ошибки) или SSH2, который изначально тоже был бесплатным, но сейчас поставляется под коммерческой лицензией. Для тех, кто использует SSH2 от компании Datafellows, мы описываем в этой книге обе версии, начиная с OpenSSH.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
OpenSSH версии 1.2.3.

Пакеты.
Домашняя страница OpenSSH: http://violet.ibs.com.au/openssh,
Вы должны скачать: openssh-1.2.3.tar.gz.

Необходимые условия.

OpenSSH требует, чтобы был установлен пакет zlib-devel, который содержит заголовочные файлы и библиотеки нужные программам, использующим библиотеки zlib компрессии и декомпрессии. Если это не так, то установите его с Вашего Red Hat Linux 6.1 или 6.2 CD-ROM.

Чтобы узнать, установлен ли у Вас zlib-devel дайте команду:

[root@deep /]# rpm -qi zlib-devel
package zlib-devel is not installed

Для инсталляции zlib-devel дайте следующие команды:

[root@deep /]# mount /dev/cdrom /mnt/cdrom/
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS/
[root@deep RPMS]# rpm -Uvh gd-devel-version.i386.rpm
gd            ##################################################
[root@deep RPMS]# rpm -Uvh zlib-devel-version.i386.rpm
zlib-devep    ##################################################
[root@deep RPMS]# cd /; umount /mnt/cdrom/

Библиотека OpenSSL, необходимая для включения поддержки SSL в OpenSSH, тоже должна быть установлена на Вашей системе.

ЗАМЕЧАНИЕ. Для того, чтобы получить большую информацию об OpenSSL сервере, читайте соответствующую главу этой книги. Даже если Вам не нужно использовать OpenSSL для создания и хранения зашифрованных файлов ключей, все равно для правильной работы OpenSSH требуются библиотеки OpenSSL.

Архивы.

Хорошей идеей будет создать список файлов установленных в Вашей системе до инсталляции OpenSSH и после в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > OpenSSH1
После инсталляции:
find /* > OpenSSH2
Для получения списка установленных файлов:
diff OpenSSH1 OpenSSH22 > OpenSSH-Installed

Раскройте архив:

[root@deep /]# cp openssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf openssh-version.tar.gz

Компиляция и оптимизация.

Шаг 1.

Переместитесь в новый каталог OpenSSH и выполните следующие команды:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
        -march=pentiumpro -fomit-frame-pointer -fno-exceptions"
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-tcp-wrappers \
            --with-ipv4-default --with-ssl-dir=/usr/include/openssl

Вышеприведенные опции говорят OpenSSH следующее:

Вкомпилировать libwrap и включить поддержку TCP Wrappers (/etc/hosts.allow|deny). Заблокировать длительные задержки при разрешении имен под Linux/glibc-2.1.2 для улучшения времени соединения. Определить месторасположение OpenSSL.

Шаг 2.

Сейчас мы должны компилировать и инсталлировать OpenSSH на сервере:

[root@deep openssh-1.2.3]# make
[root@deep openssh-1.2.3]# make install
[root@deep openssh-1.2.3]# make host-key
[root@deep openssh-1.2.3]# install -m644 contrib/redhat/sshd.pam \
                                   /etc/pam.d/sshd

make компилирует исходные коды в двоичные файлы.
make install инсталлирует исполняемые и вспомогательные файлы.
make host-key создает ключ сервера.
install инсталлирует PAM-поддержку на Red Hat Linux, которая сейчас имеет больше возможностей, чем популярный пакет из коммерческого ssh-1.2.x.

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openssh-version/ openssh-version.tar.gz

Команда rm, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции OpenSSH. Она также удалит архив .tar.gz.

Конфигурации

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающей все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере так, как это показано ниже. Файл с конфигурациями Вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz.

Для запуска OpenSSH клиента/сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте ssh_config в каталог /etc/ssh.
Копируйте sshd_config в каталог /etc/ssh.
Копируйте sshd в каталог /etc/pam.d.

Вы можете взять эти файлы из архива floppy.tgz.

Настройка файла /etc/ssh/ssh_config.

Файл /etc/ssh/ssh_config это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции, изменяющие действия клиентских программ. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи, влияющие на безопасность, полный список Вы можете найти на странице руководства (man) для ssh (1).

Редактируйте файл ssh_config (vi /etc/ssh/ssh_config) и добавьте или измените следующие параметры:

# Site-wide defaults for various options
Host *
    ForwardAgent no
    ForwardX11 no
    RhostsAuthentication no
    RhostsRSAAuthentication no
    RSAAuthentication yes
    PasswordAuthentication yes
    FallBackToRsh no
    UseRsh no
    BatchMode no
    CheckHostIP yes
    StrictHostKeyChecking no
    IdentityFile ~/.ssh/identity
    Port 22
    Cipher blowfish
    EscapeChar ~

Host *
Опция Host ограничивает влияние всех нижестоящих объявлений и опций только на компьютеры соответствующие шаблону, приведенному после ключевого слова. * подразумевает все компьютеры. При помощи этой опции Вы сможете в одном файле определить параметры для разных машин.

ForwardAgent no
Опция ForwardAgent определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция ForwardX11 для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как мы устанавливали сервер и не инсталлировали GUI, мы можем спокойно выключить эту опцию.

RhostsAuthentication no
Опция RhostsAuthentication определяет, можем ли мы использовать аутентификацию, базирующуюся на rhosts. Так как она не безопасна, то отключаем ее.

RhostsRSAAuthentication no
Опция RhostsRSAAuthentication определяет, использовать ли rhosts аутентификацию совместно с RSA host-аутентификацией или нет.

RSAAuthentication yes
Опция RSAAuthentication определяет, использовать RSA-аутентфикацию или нет. Эта опция должна быть установлена в yes для лучшей безопасности сессий. RSA использует пару из общедоступного и личного ключей, созданную при помощи утилиты ssh-keygen1.

PasswordAuthentication yes
Опция PasswordAuthentication определяет, можем ли мы использовать аутентификацию, базирующуюся на паролях или нет. Для большей безопасности эта опция должна быть установлена в yes.

FallBackToRsh no
Опция FallBackToRsh определяет, что если соединение с демоном ssh завершилось ошибкой, должен ли автоматически использоваться rsh. Запомните, что сервис rsh небезопасен, поэтому эту опцию устанавливаем в no.

UseRsh no
Опция UseRsh определяет, что сервис rlogin/rsh должен использоваться на этом компьютере. Как и с опцией FallBackToRsh, эта опция должна быть установлена в no из соображений безопасности.

BatchMode no
Опция BatchMode определяет, можем ли мы отключить запрос имени и пароля при соединении. Эта опция полезна, когда Вы создаете скрипты и не хотите вводить пароль (например, скрипт, который использует команду scp для создания резервных копий через сеть).

CheckHostIP yes
Опция CheckHostIP определяет, будет или нет ssh дополнительно проверять IP-адрес компьютера, который подключается к серверу, для определения DNS spoofing. Рекомендую установить эту опцию в yes.

StrictHostKeyChecking no
Опция StrictHostKeyChecking определяет, будет или нет ssh автоматически добавлять новые ключи компьютера в файл $HOME/.ssh/known_host. Эта опция, когда установлена в yes, предоставляет максимальную защиту от атак Trojan horse. С этой опцией должна быть проведена одна процедура. Вначале она устанавливается в no, чтобы ключи с обычно используемых компьютеров были собраны в файле, а затем нужно установить ее в yes, чтобы воспользоваться ее дополнительными возможностями.

IdentityFile ~/.ssh/identity
Опция IdentityFile определяет альтернативный идентификационный файл RSA-идентификации для чтения. Много таких файлов может быть определено с помощью этой опции.

Port 22
Опция Port опередляет, какой порт используется для ssh-соединений на удаленном компьютере. По умолчанию это 22.

Cipher blowfish
Опция Cipher определяет, какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

EscapeChar ~
Опция EscapeChar определяет сессионный знак перехода в приостановленное состояние.

Настройка файла /etc/ssh/sshd_config.

Файл /etc/ssh/sshd_config это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции, изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи, влияющие на безопасность sshd, полный список Вы можете найти на странице руководства к sshd (8). Редактируйте файл sshd_config (vi /etc/ssh/sshd_config) и добавьте или измените следующие параметры:

# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin

Port 22
Опция Port определяет, какой порт слушает ssh-демон для входящих соединений. По умолчанию это 22.

ListenAddress 192.168.1.1
Опция ListenAddress определяет IP-адрес интерфейса, к которому подключен сокет ssh-демона. По умолчанию это 0.0.0.0, для улучшения безопасности Вы можете ограничиться только одним адресом.

HostKey /etc/ssh/ssh_host_key
Опция HostKey определяет место, содержащее приватный ключ сервера.

ServerKeyBits 1024
Опция ServerKeyBits определяет, как много бит используется в ключе сервера. Эти биты используются, когда демон стартует для генерации RSA-ключа.

LoginGraceTime 600
Опция LoginGraceTime определяет, как долго в секундах после соединения сервер ждет правильной регистрации пользователя до его разрыва.

KeyRegenerationInterval 3600
Опция KeyRegenerationInterval определяет, как долго в секундах сервер должен ждать перед автоматической регенерацией своего ключа. Эта опция защиты предназначена для предотвращения расшифровки захваченного сеанса связи.

PermitRootLogin no
Опция PermitRootLogin определяет, может ли root подключаться, используя ssh. Никогда не говорите yes в этой опции.

IgnoreRhosts yes
Опция IgnoreRhosts определяет, должны ли файлы rhosts или shosts использоваться при аутентификации. Из соображений безопасности рекомендуется не использовать эти файлы.

IgnoreUserKnownHosts yes
Опция IgnoreUserKnownHosts определяет, должен ли ssh-демон игнорировать пользователей $HOME/.ssh/known_hosts во время RhostsRSAAuthentication.

StrictModes yes
Опция StrictModes определяет, должен ли ssh проверять права пользователей в их домашних каталогах и файлы rhosts перед тем, как пустить на сервер. Эта опция должна всегда быть установлена в yes потому, что иногда пользователи могут случайно оставить свои каталоги и файлы открытыми всем для записи.

X11Forwarding no
Опция X11Forwarding определяет, должен ли сервер перенаправлять X11-пакеты или нет. Так как мы установили сервер без GUI, эту опцию устанавливаем в no.

PrintMotd yes
Опция PrintMotd определяет, должен ли ssh-демон печатать содержимое файла /etc/motd, когда пользователь входит на сервер. Файл /etc/motd также известен как "сообщение дня".

SyslogFacility AUTH
Опция SyslogFacility определяет, с какого средства (facility) поступают сообщения в syslog от sshd. facility представляет подсистему, которая создает сообщение, в нашем случае AUTH.

LogLevel INFO
Опция LogLevel определяет уровень важности сообщения, поступающего системе syslog от sshd. INFO хороший выбор. Смотрите страницу man для sshd для получения большей информации о других возможностях.

RhostsAuthentication no
Опция RhostsAuthentication определяет, может ли sshd использовать rhosts-аутентификацию. Так как rhosts-аутентификация небезопасна, то мы не используем эту опцию.

RhostsRSAAuthentication no
Опция RhostsRSAAuthentication определяет, можно ли использовать rhosts-аутентификацию вместе с RSA-аутентификацией.

RSAAuthentication yes
Опция RSAAuthentication определяет, можно ли использовать RSA-аутентификацию. Эта опция должна быть установлена в yes для лучшей безопасности. RSA использует пару из общедоступного и личного ключей, созданных с помощью утилиты ssh-keygen1.

PasswordAuthentication yes
Опция PasswordAuthentication определяет, можно ли использовать аутентификацию по паролю. Для лучшей защищенности эта опция должна быть установлена в yes.

PermitEmptyPasswords no
Опция PermitEmptyPasswords определяет, позволяет ли сервер входить на сервер с логинов с пустыми паролями. Если Вы используете утилиту scp для автоматического создания резервных копий через сеть, то нужно установить эту опцию в yes.

AllowUsers admin
Опция AllowUsers определяет и контролирует, какие пользователи могут использовать ssh-сервис. Для разделения нескольких имен используйте пробелы.

Настройка OpenSSH для использования с TCP-Wrappers inetd суперсервером

Tcp-Wrappers может быть использован для запуска и остановки Вашего ssh сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.

Шаг 1.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:

ssh stream tcp nowait root /usr/sbin/tcpd sshd -i

ЗАМЕЧАНИЕ. Параметр -i говорит, что sshd должен запускаться из inetd. После редактирования файла etc/inetd.conf отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.

[root@deep /]# killall -HUP inetd

Шаг 2.

Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте следующую строку:

sshd: 192.168.1.4 win.openna.com

Которая значит, что клиенту с IP-адресом 192.168.1.4 и именем компьютера win.openna.com разрешен ssh-доступ к серверу.

Эти строки демона (для tcp-wrappers) используются sshd:

sshdfwd-X11 (если Вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Используемый в tcp-forwarding).

ЗАМЕЧАНИЕ. Если Вы решили переключиться на использование ssh, сделайте так, чтобы Вы инсталлировали и использовали его на всех Ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.

Дополнительная документация

Для получения большей информации, вот несколько man-страниц, которые можно прочитать.

$ man ssh (1) OpenSSH secure shell клиент (программа удаленного подключения)
$ man ssh [slogin] (1) OpenSSH secure shell клиент (программа удаленного подключения)
$ man ssh-add (1) добавление identities для агента аутентификации
$ man ssh-agent (1) аутентификационный агент
$ man ssh-keygen (1) генерация аутентификационного ключа
$ man sshd (8) ssh-демон

Конфигурирование OpenSSH для каждого пользователя

Шаг 1.

Создайте локально общедоступный и персональный ключи:

[root@deep /]# su admin
[admin@deep /]$ ssh-keygen

Результат должен выглядеть примерно так:

Initializing random number generator...
Generating p: ............................++ (distance 430)
Generating q: ......................++ (distance 456)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key
      (/home/admin/.ssh/identity): [Press Enter]
Enter passphrase:
Enter the same passphrase again:
Your identification has been saved in /home/admin/.ssh/identity.
Your public key is:
1024 37
149377575112519555336911203184772938622900493947151365111458061088700
017643784946768312975778431585322723612061006231460440536487184367748
423324091941848098890786099717524446977589647127757030728779973708569
993017043141563536333068888944038178461608592483844590202154102756903
055846534063365635584899765402181 admin@deep.openna.com
Your public key has been saved in /home/admin/.ssh/identity.pub

ЗАМЕЧАНИЕ. Если Вы имеете несколько логинов, то можете хотеть создать независимые ключи для них.

Вы хотите создать ключи для:

  1. Ваш почтовый сервер
  2. Ваш веб-сервер
  3. Ваш шлюз

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

Шаг 2.

Копируйте Ваш общедоступный ключ (identity.pub) на удаленный компьютер в каталог /home/admin/.ssh под именем authorized_keys.

ЗАМЧЕАНИЕ. Одним из способов копирования файла является использование ftp-команд или Вам нужно послать по электронной почте Ваш общедоступный ключ администратору системы. Только включите содержимое файла ~/.ssh/identity.pub в сообщение.

Изменение Вашей pass-phrase

Вы можете изменить pass-phrase в любое время используя опцию -p утилиты ssh-keygen.
[root@deep /]# su admin
[admin@deep /]$ ssh-keygen -p
Enter file key is in (/home/admin/.ssh/identity): [Press ENTER]
Enter old passphrase:
Key has comment 'admin@deep.openna.com'
Enter new passphrase:
Enter the same passphrase again:
Your identification has been saved with the new passphrase.

Утилиты пользователя OpenSSH

Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить man-страницы и документацию для получения деталей.

Ssh

ssh (Secure Shell) команда предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Это программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.

Для подключения к удаленной машине используйте команду:

[root@deep /]# ssh -l <login_name> <hostname>

Например:

[root@deep /]# ssh -l admin www.openna.com
admin@deep.openna.com's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com
No mail.
[admin@www admin]$

Где <login_name> это имя, которое Вы используете для соединения с ssh-сервером и <hostname> это имя удаленного ssh-сервера.

scp

scp (Secure Copy) это утилита для копирования файлов из локальной системы на удаленную и наоборот, или между двумя удаленными системами. Для копирования файлов с удаленной системы на локальную используйте следующую команду:

[root@deep /]# su admin
[admin@deep /]$ scp -p <login_name@hostname>:/dir/for/file \
                    localdir/to/filelocation

Например:

[admin@deep /]$ scp1 -p admin@mail:/etc/test1 /tmp
Enter passphrase for RSA key 'admin@mail.openna.com':
test1 | 2 KB | 2.0 kB/s | ETA: 00:00:00 | 100%

Для копирования файла с локальной на удаленную систему используйте следующую команду:

[root@deep /]# su admin
[admin@deep /]$ scp -p localdir/to/filelocation \
                    <username@hostname>:/dir/for/file

Например:

[admin@deep /]$ scp1 -p /usr/bin/test2 admin@mail:/var/tmp
admin@mail's password:
test2 | 7 KB | 7.9 kB/s | ETA: 00:00:00 | 100%

ЗАМЕЧАНИЕ. Опция -p говорит, что время модификации и доступа, также как и режимы доступа исходных файлов, должны быть сохранены и на копии. Это обычно желательно.

Некоторые возможности использования OpenSSH

OpenSSH может использоваться для:

  1. Замены telnet, rlogin, rsh, rdist и rcp
  2. Организации безопасного резервного копирования через сеть
  3. Удаленного выполнения команд
  4. Доступа к корпоративным ресурсам через Интернет

Инсталлируемые файлы

> /etc/ssh
> /etc/ssh/ssh_config
> /etc/ssh/sshd_config
> /etc/ssh_host_key
> /etc/ssh_host_key.pub
> /usr/bin/ssh
> /usr/bin/slogin
> /usr/man/man1/ssh.1
> /usr/man/man1/scp.1
> /usr/man/man1/ssh-add.1
> /usr/man/man1/ssh-agent.1
> /usr/man/man1/ssh-keygen.1
> /usr/bin/scp
> /usr/bin/ssh-add
> /usr/bin/ssh-agent
> /usr/bin/ssh-keygen
> /usr/man/man1/slogin.1
> /usr/man/man8/sshd.8
> /usr/sbin/sshd

Бесплатные SSH-клиенты для Windows

Putty
Домашняя страница Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty.html.

Tera Term Pro и TTSSH
Домашняя страница Tera Term Pro: http://hp.vector.co.jp/authors/VA002416/teraterm.html.
Домашняя страница TTSSH: http://www.zip.com.au/~roca/download.html.

Linux SSH2 клиент и сервер

Краткий обзор

Сейчас стало ясно, что все пользователи Linux, должны использовать OpenSSH вместо SSH2 от компании Datafellows. Однако, для пользователей и организаций, которые хотят использовать коммерческую версию этого программного обеспечения, мы приводим следующее описание. Это SSH2 коммерческая версия SSH. В нашей конфигурации мы настраиваем SSH2 на поддержку работы с TCP-Wrappers из соображений безопасности.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам /var/tmp (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем root.
SSH2 версии 2.0.13.

Пакеты.
Домашняя страница SSH2: http://www.ssh.org,
Вы должны скачать: ssh-2.0.13.tar.gz.

Архивы.

Хорошей идеей будет создать список файлов, установленных в Вашей системе до инсталляции SSH2 и после, в результате, с помощью утилиты diff, Вы сможете узнать, какие файлы были установлены. Например, до инсталляции:
find /* > SSH1
После инсталляции:
find /* > SSH2
Для получения списка установленных файлов:
diff SSH1 SSH2 > SSH2-Installed

Раскройте архив:

[root@deep /]# cp ssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf ssh-version.tar.gz

Компиляция и оптимизация

Шаг 1.

Переместитесь в новый каталог SSH2 и выполните следующие команды:

CC="egcs"
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro \
        -march=pentiumpro -fomit-frame-pointer -fno-exceptions"
./configure --prefix=/usr --without-ssh-agent1-compat \
            --disable-suid-ssh-signer --disable-tcp-port-forwarding \
            --disable-X11-forwarding --enable-tcp-nodelay --with-libwrap

Вышеприведенные опции говорят SSH2 следующее:

  • Не включать совместимость с ssh-agent1
  • Инсталлировать программу ssh-signer без suid-бита
  • Отключить поддержку перенаправление портов (port forwarding)
  • Отключить поддержку перенаправление X11
  • Включить опцию сокета TCP_NODELAY
  • Вкомпилировать поддержку libwrap (tcp_wrappers)
[root@deep ssh-2.0.13]# make clean
[root@deep ssh-2.0.13]# make
[root@deep ssh-2.0.13]# make install
[root@deep ssh-2.0.13]# rm -f /usr/bin/ssh-askpass

Команда make clean удаляет все предыдущие следы компиляции, чтобы избежать любых ошибок. Команда make компилирует все исходные файлы в исполняемые, а в заключении команда make install инсталлирует двоичные и сопутствующие им файлы в определенное место.

Очистка после работы.

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf ssh-version/ ssh-version.tar.gz

Команда rm, использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции SSH2. Она также удалит архив .tar.gz.

Конфигурации

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве floppy.tgz, включающей все конфигурационные файлы для всех программ. Если Вы скачаете этот файл, то Вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере так, как это показано ниже. Файл с конфигурациями Вы можете скачать с адреса http://www.openna.com/books/floppy.tgz.

Для запуска SSH2 клиента/сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте ssh2_config в каталог /etc/ssh2.
Копируйте sshd2_config в каталог /etc/ssh2.
Копируйте sshd в каталог /etc/pam.d.

Вы можете взять эти файлы из архива floppy.tgz.

Настройка файла /etc/ssh2/ssh2_config

Файл /etc/ssh2/ssh2_config это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции, изменяющие действия клиентских программ. Он содержит пары ключ-значение, записанных в одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность, полный список Вы можете найти на странице руководства для ssh2 (1).

Редактируйте файл ssh2_config (vi /etc/ssh2/ssh2_config) и добавьте или измените следующие параметры:

# ssh2_config
# SSH 2.0 Client Configuration File
*:
  Port 22
  Ciphers blowfish
  Compression yes
  IdentityFile identification
  AuthorizationFile authorization
  RandomSeedFile random_seed
  VerboseMode no
  ForwardAgent no
  ForwardX11 no
  PasswordPrompt "%U's password: "
  Ssh1Compatibility no
  Ssh1AgentCompatibility none
  NoDelay yes
  KeepAlive yes
  QuietMode no

Port 22br> Опция Port определяет, на какой порт ssh присоединяется на удаленнном компьютере. По умолчанию 22.

Ciphers blowfish
Опция Ciphers определяет, какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

Compression yes
Опция Compression определяет использовать ли во время сессии сжатие. Сжатие будет улучшать скорость связи и обмена файлами.

IdentityFile identification
Опция IdentityFile определяет альтернативное имя для пользовательского идентификационного файла.

AuthorizationFile authorization
Опция AuthorizationFile определяет альтернативное имя для пользовательского файла авторизации.

RandomSeedFile random_seed
Опция RandomSeedFile определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).

VerboseMode no
Опция VerboseMode заставляет ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.

ForwardAgent no
Опция ForwardAgent определяет, какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция ForwardX11 для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как мы устанавливали сервер и не инсталлировали GUI, мы можем спокойно выключить эту опцию.

PasswordPrompt "%U's password: "
Опция PasswordPrompt определяет строку запроса пароля, которая будет выводится пользователю, когда он подключается к системе. Переменные '%U' и '%H' задают имя пользователя и хоста соответственно.

Ssh1Compatibility no
Опция Ssh1Compatibility определяет, будут или нет использоваться SSH1-совместимые алгоритмы в SSH2 для ssh1-пользователей.

Ssh1AgentCompatibility none
Опция Ssh1AgentCompatibility определяет, будет или нет направляться SSH1-агент соединений с SSH2 для пользователей ssh1.

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

KeepAlive yes
Опция KeepAlive определяет, должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в yes, то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.

QuietMode no
Опция QuietMode определяет, будет ли система запущена в "тихом" режиме. Эта опция должна быть установлена в no потому, что в "бесшумном" режиме никакой информации не заносится в системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, надо установить опцию в no.

Настройка файла /etc/ssh2/sshd2_config

Файл /etc/ssh2/sshd2_config это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции, изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи, влияющие на безопасность sshd, полный список Вы можете найти на man-странице для sshd2 (8).

Редактируйте файл sshd2_config (vi /etc/ssh2/sshd2_config) и добавьте или измените следующие параметры:

# sshd2_config
# SSH 2.0 Server Configuration File
*:
  Port 22
  ListenAddress 192.168.1.1
  Ciphers blowfish
  IdentityFile identification
  AuthorizationFile authorization
  HostKeyFile hostkey
  PublicHostKeyFile hostkey.pub
  RandomSeedFile random_seed
  ForwardAgent no
  ForwardX11 no
  PasswordGuesses 3
  MaxConnections 5
  PermitRootLogin no
  AllowedAuthentications publickey,password
  RequiredAuthentications publickey,password
  VerboseMode no
  PrintMotd yes
  CheckMail yes
  UserConfigDirectory "%D/.ssh2"
  SyslogFacility DAEMON
  Ssh1Compatibility no
  NoDelay yes
  KeepAlive yes
  UserKnownHosts yes
  AllowHosts 192.168.1.4
  DenyHosts *
  QuietMode no
# subsystem definitions
  subsystem-sftp sftp-server

Port 22
Опция Port определяет, какой порт слушает ssh2-демон для входящих соединений. По умолчанию 22.

ListenAddress 192.168.1.1
Опция ListenAddress определяет IP-адрес интерфейса, к которому подключен сокет ssh-демона. По умолчанию это 0.0.0.0, для улучшения безопасности Вы можете ограничиться только одним адресом.

Ciphers blowfish
Опция Ciphers определяет, какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

IdentityFile identification
Опция IdentityFile определяет альтернативное имя для идентификационного файла пользователей.

AuthorizationFile authorization
Опция AuthorizationFile задает альтернативное имя для файла полномочий пользователей (user's authorization file).

HostKeyFile hostkey
Опция HostKeyFile определяет место, содержащее приватный ключ сервера. По умолчанию /etc/ssh2/hostkey.

PublicHostKeyFile hostkey.pub
Опция PublicHostKeyFile определяет альтернативный файл, содержащий публичный ключ сервера. По умолчанию это /etc/ssh2/hostkey.pub.

RandomSeedFile random_seed
Опция RandomSeedFile определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).

ForwardAgent no
Опция ForwardAgent определяет, какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция ForwardX11 определяет, должен ли сервер перенаправлять X11-пакеты или нет. Так как мы установили сервер без GUI, то эту опцию устанавливаем в no.

PasswordGuesses 3
Опция PasswordGuesses определяет, как много попыток имеет пользователь, чтобы ввести имя и пароль, при парольной аутентификации.

MaxConnections 5
Опция MaxConnections определяет максимальное число одновременных соединений, которыми демон ssh2 может управлять.

PermitRootLogin no
Опция PermitRootLogin определяет6 может ли root подключаться, используя ssh. Никогда не говорите yes в этой опции.

AllowedAuthentications publickey,password
Опция AllowedAuthentications определяет, какие виды аутентификации разрешено использовать. С этой опцией администратор может вынуждать пользователей заканчивать несколько аутентификаций прежде, чем они расссматриваются как заверенные.

RequiredAuthentications publickey,password
Опция RequiredAuthentications связана с AllowedAuthentications, определяет какие метода аутентификации пользователь должен завершить прежде, чем продолжить свою работу. Этот параметр должен иметь те же значения, что и AllowedAuthentications, или сервер все время будет запрещать соедиенния.

VerboseMode no
Опция VerboseMode заставляет демон ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.

PrintMotd yes
Опция PrintMotd определяет, должен ли ssh2-демон печатать содержимое файла /etc/motd, когда пользователь входит на сервер. Файл /etc/motd также известен как "сообщение дня".

CheckMail yes
Опция CheckMail определяет, должен ли ssh2 демон печатать информацию о новой почте, которая пришла пользователю.

UserConfigDirectory "%D/.ssh2"
Опция UserConfigDirectory определяет месторасположение конфигурационных данных пользователей.

SyslogFacility DAEMON
Опция SyslogFacility определяет с какого средства (facility) поступают сообщения в syslog от sshd2. facility представляет подсистему, которая создает сообщение, в нашем случае DAEMON.

Ssh1Compatibility no
Опция Ssh1Compatibility определяет, будут ли использоваться SSH1-совместимые алгоритмы в SSH2 для пользователей ssh1.

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

KeepAlive yes
Опция KeepAlive определяет, должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в yes, то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.

UserKnownHosts yes
Опция UserKnownHosts определяет, может ли быть использован домашний каталог пользователя $HOME/.ssh2/knownhosts для получения публичного ключа хоста, когда используется hostbased-аутентификация.

AllowHosts 192.168.1.4
Опция AllowHosts определяет и контролирует, какие компьютеры имеют доступ к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено.

DenyHosts *
Опция DenyHosts определяет и контролирует, какие хосты не имеют доступа к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено. По умолчанию шаблон * означает все компьютеры.

QuietMode no
Опция QuietMode определяет, будет ли система запущена в "тихом" режиме. Эта опция должна быть установлена в no потому, что в "бесшумном" режиме, никакой информации не заносится в системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, надо установить опцию в no.

Настройка SSH2 для использования с TCP-Wrappers inetd суперсервером

Tcp-Wrappers может быть использован для запуска и остановки Вашего ssh2 сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.

Шаг 1.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:

ssh stream tcp nowait root /usr/sbin/tcpd sshd -i

ЗАМЕЧАНИЕ. Параметр -i говорит, что sshd должен запускаться из inetd.

После редактирования файла etc/inetd.conf отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.

[root@deep /]# killall -HUP inetd

Шаг 2.

Редактируйте файл hosts.allow file (vi /etc/hosts.allow) и добавьте следующую строку:

sshd: 192.168.1.4 win.openna.com

Которая значит, что клиенту с IP-адресом 192.168.1.4 и именем компьютера win.openna.com разрешен ssh-доступ к серверу.

Эти строки демона (для tcp-wrappers) используются sshd2:
ssh,ssh2 (может вызываться по имени ssh2 (обычно используется ssh)).
sshdfwd-X11 (если Вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Используемый в tcp-forwarding).

ЗАМЕЧАНИЕ. Если Вы решили переключиться на использование ssh, сделайте так, чтобы Вы инсталлировали и использовали его на всех Ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.

Конфигурация файла /etc/pam.d/ssh

Для лучшей безопасности Вашего ssh2-сервера, Вы можете настроить его на аутентификацию через PAM. Чтобы сделать это, надо создать файл /etc/pam.d/ssh.

Создайте файл ssh (touch /etc/pam.d/ssh) и добавьте или измените, если нужно:

#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so use_authtok nullok md5 shadow
session required /lib/security/pam_pwdb.so

Дополнительная документация

Для получения большей информации, вот несколько man-страниц, которые можно прочитать:

$ man ssh-add2 (1) добавляет identities агенту аутентификации
$ man ssh-agent2 (1) агент аутентификации
$ man ssh-keygen2 (1) генератор пары аутентификационных ключей
$ man ssh2 (1) secure shell клиент (программа удаленного подключения)
$ man sshd2 (8) secure shell демон.

Конфигурирование SSH2 для каждого пользователя

Шаг 1.

Создайте локально Ваш личный и публичный ключи:

[root@deep /]# su admin
[admin@deep /]$ ssh-keygen2
Generating 1024-bit dsa key pair
6 Oo..oOo.oOo.
Key generated.
1024-bit dsa, admin@deep.openna.com, Sun Feb 13 2000 05:33:38 -0500
Passphrase :
Again :
Private key saved to /home/admin/.ssh2/id_dsa_1024_a
Public key saved to /home/admin/.ssh2/id_dsa_1024_a.pub

Шаг 2

Создайте файл identification в Вашем каталоге ~/.ssh2 на локальной машине:
[admin@deep]$ cd ~/.ssh2
[admin@deep .ssh2]$ echo "IdKey id_dsa_1024_a" > identification

ЗАМЕЧАНИЕ. Опционально можно создать идентификационный файл и на удаленной машине. Он содержит имя приватного ключа, который используется при аутентификации.

Шаг 3

Копируйте Ваш публичный ключ с локальной машины (id_dsa_1024_a.pub) на удаленную в каталог ~/.ssh2 под именем Local.pub.

Шаг 4

Создайте файл authorization в каталоге ~/.ssh2 на удаленной машине:

[admin@remote .ssh2]$ touch authorization

ЗАМЕЧАНИЕ. ~/ означает Ваш домашний каталог.

Шаг 5

Добавьте следующую строку в файл authorization на удаленной машине:

[admin@remote .ssh2]$ vi authorization
key Local.pub

Утилиты пользователя SSH2

Команды, описанные ниже, мы будем часто использовать, но на самом деле их много больше, и Вы должны изучить man-страницы и документацию для получения деталей.

Ssh2

ssh2 (Secure Shell) команда, предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Это программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.

Для подключения к удаленной машине используйте команду:

[root@deep /]# ssh2 -l <login_name> <hostname>

например:

[root@deep /]# ssh2 -l admin www.openna.com
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a"
with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com
No mail.
[admin@www admin]$

Где <login_name> это имя, которое Вы используете для соединения с ssh2-сервером и <hostname> это имя удаленного ssh2-сервера.

sftp2

Утилита sftp2 (Secure File Transfer) это ftp-подобный клиент, который предоставляет возможность передачи файлов через сеть. До того, как начать использовать sftp2, Вы должны подключиться к ssh2-серверу.

Для ftp через ssh2 используйте следующую команду:

[admin@deep /]$ sftp2 <hostname>

Например:

[admin@deep /]$ sftp2 www.openna.com
local path : /home/admin
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a"
with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
remote path : /home/admin
sftp>

Где <hostname> это имя удаленного сервера, с которым Вы хотите обмениваться файлами посредством sftp.

Инсталлированные файлы

> /etc/pam.d/ssh
> /etc/ssh2
> /etc/ssh2/hostkey
> /etc/ssh2/hostkey.pub
> /etc/ssh2/sshd2_config
> /etc/ssh2/ssh2_config
> /root/.ssh2
> /root/.ssh2/random_seed
> /root/ssh2
> /usr/man/man1/ssh2.1
> /usr/man/man1/ssh-keygen2.1
> /usr/man/man1/ssh-add2.1
> /usr/man/man1/ssh-agent2.1
> /usr/man/man1/scp2.1
> /usr/man/man1/sftp2.1
> /usr/man/man1/ssh.1
> /usr/man/man1/ssh-add.1
> /usr/man/man1/ssh-agent.1
> /usr/man/man1/ssh-keygen.1
> /usr/man/man1/scp.1
> /usr/man/man1/sftp.1
> /usr/man/man8/sshd2.8
> /usr/man/man8/sshd.8
> /usr/bin/ssh2
> /usr/bin/scp2
> /usr/bin/sftp2
> /usr/bin/sftp-server2
> /usr/bin/ssh-agent2
> /usr/bin/ssh-keygen2
> /usr/bin/ssh-signer2
> /usr/bin/ssh-add2
> /usr/bin/ssh
> /usr/bin/ssh-agent
> /usr/bin/ssh-add
> /usr/bin/ssh-askpass
> /usr/bin/ssh-keygen
> /usr/bin/scp
> /usr/bin/sftp
> /usr/bin/sftp-server
> /usr/bin/ssh-signer
> /usr/sbin/sshd2
> /usr/sbin/sshd

Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют