L  i  n  u  x    P  a  r  k
при поддержке ВебКлуба
Назад Оглавление Вперед

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

В этой главе
Linux OpenSSH Клиент/Сервер
Конфигурация
Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером
Конфигурирование OpenSSH для каждого пользователя
Утилиты пользователя OpenSSH
Linux SSH2 Клиент/Сервер
Конфигурации
Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером
Конфигурирование SSH2 для каждого пользователя
Утилиты пользователя SSH2

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 следующее:

[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 22<br> Опция ⌠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■ определяет может ли 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■ file.

Создайте файл 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:
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

Назад Оглавление Вперед