L i n u x P a r k при поддержке ВебКлуба |
Назад | Оглавление | Вперед |
Глава 11 Программы обеспечения безопасности (Сетевые сервисы) - OpenSSHВ этой главеLinux OpenSSH Клиент/Сервер Конфигурация Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером Конфигурирование OpenSSH для каждого пользователя Утилиты пользователя OpenSSH Linux SSH2 Клиент/Сервер Конфигурации Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером Конфигурирование SSH2 для каждого пользователя Утилиты пользователя SSH2 |
Как было написано во 2 главе ⌠Инсталляция вашего Linux сервера■, многие сетевые сервисы, включая, но не ограничиваясь, telnet, rsh, rlogin или rexec, уязвимы к электронному прослушиванию. В результате, любой человек, имеющий доступ к компьютеру в вашей сети, может прослушивать сообщения и перехватывать пароли и другую полезную информацию, проходящую по сети в открытом виде. Программа telnet необходима для решения ежедневных административных задач, но она не безопасна, так как передает через сеть пароли в открытом виде. Чтобы решить эту проблему необходима программа, которая заменит нам telnet. К счастью такая программа есть, это OpenSSH √ настоящая и безопасная замена старых и небезопасных программ удаленного доступа, таких как telnet, rlogin, rsh, rdist или rcp.
Согласно официальному OpenSSH README файлу:
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Для инсталляции 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Компиляция и оптимизация.
Шаг 1.Переместитесь в новый каталог OpenSSH и выполните следующие команды:
CC="egcs" \Вышеприведенные опции говорят OpenSSH следующее:
Вкомпилировать libwrap и включить поддержку TCP Wrappers (/etc/hosts.allow|deny)
Заблокировать длительные задержки при разрешении имен под Linux/glibc-2.1.2
для улучшения времени соединения
Определить месторасположение OpenSSL
Сейчас мы должны компилировать и инсталлировать OpenSSH на сервере:
[root@deep openssh-1.2.3]# makemake √ компилирует исходные коды в двоичные файлы;
make install √ инсталлирует исполняемы и вспомогательные файлы
make host-key √ создает ключ сервера
install √ инсталлирует PAM поддержку на Red Hat Linux, которая сейчас имеет
больше возможностей, чем популярный пакет из коммерческого ssh-1.2.x.
Команда ⌠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 сервис. Для разделения нескольких имен используйте
пробелы.
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 file (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 демон
Создайте, локально, ваш общедоступный и персональный ключи:
[root@deep /]# su adminРезультат должен выглядеть примерно так:
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
ЗАМЕЧАНИЕ. Если вы имеете несколько бюджетов, то вы можете хотеть создать независимые ключи для них.
Вы хотите создать ключи для:
Это позволит вам ограничить доступ между серверами, например не позволит почтовому бюджету получить доступ на Веб сервер или Шлюз. Это расширяет полную защиту, если одни из ваших аутентификационных ключей скомпрометирован по какой-нибудь причине.
Шаг 2.Копируйте ваш общедоступный ключ (identity.pub) на удаленный компьютер в каталог ⌠/home/admin/.ssh■ под именем ⌠authorized_keys■.
ЗАМЧЕАНИЕ. Одним из способов копирования файла является использование ftp команд или вам нужно послать по электронной почте ваш общедоступный ключ администратору системы. Только включите содержимое файла ~/.ssh/identity.pub в сообщение.
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить 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 /]$ scp1 -p admin@mail:/etc/test1 /tmpДля копирования файла с локальной на удаленную систему используйте следующую команду:
[root@deep /]# su adminНапример:
[admin@deep /]$ scp1 -p /usr/bin/test2 admin@mail:/var/tmpЗАМЕЧАНИЕ. Опция ⌠-p■ говорит, что время модификации и доступа, также как и режимы исходных файлов, должны быть сохранены и на копии. Это обычно желательно.
OpenSSH может использоваться для:
> /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
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
Назад | Оглавление | Вперед |