Все настроечные файлы протокола SSH находятся в директории /etc/ssh. Здесь можно увидеть следующий перечень:
□ файл конфигурации SSH-сервера — sshd_config;
□ файл конфигурации SSH-клиента — ssh_config;
□ файлы ключей для различных алгоритмов
• ssh_host_dsa_key;
• ssh_host_dsa_key.pub;
• ssh_host_key;
• ssh_host_key.pub;
• ssh_host_rsa_key;
• ssh_host_rsa_key.pub.
Почему так много файлов с ключами? Просто SSH работает с разными алгоритмами шифрования и поддерживает два наиболее популярных и криптостойких алгоритма DSA (ssh_host_dsa_key, ssh_host_dsa_key.pub) и RSA (это сокращение состоит из имен основателей алгоритма шифрования: Ronald Rivest, Adi Shamir и Leonard Adleman) (ssh_host_rsa_key и ssh_host_rsa_key.pub). Оставшиеся два файла ssh_host_key, ssh_host_key.pub хранят ключи для первой версии SSH. Для каждого алгоритма требуется по два файла: с расширением pub — хранит открытый ключ, без расширения — содержит приватный ключ.
С помощью открытого ключа можно закодировать данные и отправить на сервер, но для расшифровки нужен только закрытый ключ, который не может быть подобран простыми алгоритмами, он должен быть только у вас, его необходимо беречь и никому не показывать.
5.3.2. Основные параметры конфигурации сервера SSH
Давайте теперь рассмотрим содержимое файла конфигурации SSH-сервера (sshd). Его можно увидеть в листинге 5.1. Файл небольшой, поэтому для удобства я привел его полностью, убрав только некоторые комментарии.
Листинг 5.1. Файл конфигурации sshd
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
#HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
#HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssb_host_dsa_key
#Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 3600
#ServerKeyBits 768
#Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
#Authentication:
#LoginGraceTime 600
#PermitRootLogin yes
#StrictModes yes
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#rhosts authentication should not be used
#RhostsAuthentication no
#Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
#For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
#similar for protocol version 2
#HostbasedAuthentication no
#Change to yes if you don't trust ~/.ssh/known_hosts for
#RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
#To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
#Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
#Kerberos options
#KerberosAuthentication automatically enabled if keyfile exist
#KerberosAuthentication yes
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#AFSTokenPassing automatically enabled if k_hasafs() is true
#AFSTokenPassing yes
#Kerberos TGT Passing only works with the AFS kaserver
#KerberosTgtPassing no
#PAMAuthenticationViaKbdInt yes
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#KeepAlive yes
#UseLogin no
#MaxStartups 10
#no default banner path
#Banner /some/path
#VerifyReverseMapping no
#override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
Рассмотрим основные параметры, которые вам могут пригодиться:
□ Port — порт, на котором ожидаются подключения. По умолчанию это 22. Некоторые администраторы любят изменять это значение, перенося сервер на другой порт. В какой-то степени это оправдано. Например, если у вас нет Web-сервера, то можно поместить SSH на 80 порт. Хакеры будут думать, что это Web-сервер, и не будут его ломать;
□ Protocol — поддерживаемые протоколы. Обратите внимание, что первым идет число 2, а затем 1. Это значит, что сервер будет сначала пытаться подключиться по протоколу второй версии, и только потом по первому. Я рекомендую убрать комментарии с этой строки и удалить число 1, чтобы использовалась только последняя версия. Уже давно пора обновить клиентское программное обеспечение и перейти на более безопасные технологии. Зацикливание на старых программах приносит только убытки;
□ ListenAddress — определяет адреса для прослушивания подключения. У вашего сервера может быть несколько сетевых карт. По умолчанию идет прослушивание всех интерфейсов. Вы должны указать только те, с которых вы будете подключаться по SSH. Например, очень часто одна сетевая карта смотрит во внутреннюю сеть, а другая — в Интернет. Если вы будете подключаться по SSH-протоколу только из внутренней сети, то следует прослушивать только этот адрес (задается в формате адрес:порт). Разрешается описывать несколько таких записей, чтобы указать требуемые интерфейсы;
□ HostKey — указывается путь к файлам, содержащим ключи шифрования. Нужно прописывать только закрытые ключи, которые использует сервер для расшифровки пакетов;
□ KeyRegenerationInterval — в версии 1 во время сессии могут регенерироваться ключи. Это позволяет сделать невозможным раскрытие пакетов за счет смены ключей, которые по умолчанию меняются каждые 3600 секунд. Если установить 0, то регенерации не будет. Так как мы отказались от 1 версии протокола (см. параметр protocol), то этот атрибут не влияет на работу;
□ ServerKeyBits — длина серверного ключа. По умолчанию установлено 768, минимальное значение — 512;
□ SyslogFacility — задает тип сообщений, которые будут сохраняться в журнале;
□ LogLevel — уровень событий, которые будут попадать в журнал. Возможные уровни соответствуют системным, которые мы будем рассматривать в разд. 12.5;
□ LoginGraceTime — интервал времени, в течение которого пользователь должен ввести правильный пароль, иначе соединение будет разорвано;
□ РеrmitRootLogin — определяет, разрешено (yes) или запрещено (no) входить в систему по SSH-протоколу под пользователем root. Мы уже говорили, что root — это бог в системе, и его возможности нужно использовать аккуратно. Если в систему нельзя входить с такими правами, то и по SSH тем более. Срочно меняйте этот параметр на no;
□ StrictModes — указывает, должен ли sshd проверять состояние файлов и их владельцев, пользовательских файлов и домашней директории до ввода пароля. Желательно установить yes, потому что многие начинающие пользователи делают свои файлы все доступными для записи;
□ RSAAuthentication — разрешена ли аутентификация по алгоритму RSA. Параметр действует для 1 версии протокола;
□ PubkeyAuthentication — дозволена ли аутентификация по публичному ключу. Параметр действует для 2-й версии протокола;
□ AuthorizedKeysFile — файл с публичным ключом, который может использоваться для аутентификации;
□ RhostsAuthentication — разрешение аутентификации по файлам $HOME/.rhosts и /etc/hosts.equiv. По умолчанию стоит no, и без особой надобности менять этот параметр не стоит, потому что это небезопасно;
□ IgnoreRhosts — если параметр равен yes, то запрещается читать файлы ~/.rhosts и ~/.shosts. Без необходимости значение лучше не изменять, потому что это может повлиять на безопасность;
□ AuthorizedKeysFile — файл для хранения списка авторизованных ключей. Если пользователь входит в систему с имеющимся в этом файле ключом, то его пустят автоматически без ввода дополнительных паролей;
□ RhostsRSAAuthentication — если этот параметр yes, то при аутентификации будет требоваться ключ хоста из директории /etc/ssh/ssh_known_hosts. Параметр используется в 1 версии SSH;
□ IgnoreUserKnownHosts — если параметр равен no, то необходимо доверять компьютерам из списка ~/.ssh/known_hosts при RhostsRSAAuthentication-аутентификации. Не верьте никому, поэтому параметр лучше всего изменить на yes;
□ PasswordAuthentication — если значение равно yes, то будет требоваться пароль. При использовании авторизации через ключи параметр можно отключить;
□ PermitEmptyPasswords — по умолчанию установлено no, что запрещает использование пустых паролей, и изменять это значение не стоит;
□ KerberosAuthentication — использовать проверку подлинности по протоколу Kerberos. В последнее время именно эта аутентификация набирает большую популярность благодаря своей безопасности;
□ KerberosOrLocalPasswd — если пароль Kerberos не был принят, то включается проверка локального файла паролей из файла /etc/shadow;