SSH – это основной способ подключения к удаленным Linux- и Unix-подобным серверам с помощью командной строки. SSH обеспечивает безопасное соединение, которое позволяет запускать команды, взаимодействовать с системой и создавать туннели.
Большинство пользователей знают об основных принципах запуска и подключения к удаленному серверу. Обычно это делается с помощью такой команды:
ssh username@remote_server
Читайте также: Использование SSH для подключения к удаленному серверу на Ubuntu
Есть еще много вариантов настройки SSH-демона, которые могут повысить безопасность, улучшить управление пользовательскими подключениями и т. д. В данном руководстве рассматриваются опции тонкой настройки SSH.
Примечание: Руководство выполнено на сервере Ubuntu 12.04, но любой современный дистрибутив Linux должен работать аналогичным образом.
1: Конфигурационный файл SSHD
Основным конфигурационным файлом демона SSH является /etc/ssh/sshd_config.
Примечание: Не путайте этот файл с ssh_config, который определяет параметры клиентов.
Откройте файл в редакторе:
sudo nano /etc/ssh/sshd_config
Вы увидите файл с большим количеством опций и комментариев (в зависимости от вашего дистрибутива). Большинство дистрибутивов предлагают довольно хорошие значения по умолчанию, но при желании вы можете отладить параметры и сделать их ещё лучше.
Рассмотрим базовые опции в файле дистрибутива Ubuntu 12.04.
Порты и протоколы
- Port 22: определяет порт, на котором демон SSH прослушивает соединения. По умолчанию SSH использует порт 22. Изменение номера порта может потенциально снизить количество вредоносных SSH-подключений.
- Protocol 2: SSH поддерживает две версии протокола. Этот параметр рекомендуется оставить без изменений (если только вам не требуется поддержка клиентов, которые могут работать только с протоколом 1).
Ключи
- HostKey /etc/ssh/ssh_host…: эти строки указывают ключи хоста сервера. Эти ключи помогают клиентам определить сервер. Если клиенты взаимодействовали с этим сервером ранее, они могут проверить подлинность соединения с помощью этих ключей.
- UsePrivilegeSeparation yes: эта опция позволяет SSH порождать дочерние процессы с необходимым уровнем привилегий. Это помогает изолировать процессы и повысить безопасность.
- KeyRegenerationInterval и ServerKeyBits: эти параметры влияют на ключ сервера, который создается для протокола SSH 1. Если все соединения вашего сервера привязаны к протоколу 2, оставьте эти параметры по умолчанию.
Логирование и ограничения
- SyslogFacility и LogLevel: эти опции настраивают ведение логов. Первая опция определяет код объекта для сообщений логов, а вторая – уровень логирования (количество вносимых в лог данных).
- LoginGraceTime 120: этот параметр указывает количество секунд ожидания входа в систему. Если в течение этого срока пользователь не смог войти, сервер сбросит соединение.
- PermitRootLogin yes: эта опция управляет SSH-доступом пользователя root. Поскольку злоумышленники точно знают, что учетная запись root присутствует на сервере и предоставляет неограниченный доступ к машине, её часто пытаются взломать. После настройки учетной записи пользователя с привилегиями sudo рекомендуется установить здесь значение «no».
- StrictModes yes: игнорирует любые файлы конфигурации пользовательского уровня с неправильными привилегиями. Если пользователь не ограничивает доступ к конфигурационным файлам, это снижает уровень безопасности. Лучше запретить доступ к файлу, пока пользователь не исправит привилегии.
- IgnoreRhosts и RhostsRSAAuthentication: эти опции настраивают поддержку аутентификации rhost. Это синтаксис протокола 1, который не поддерживается протоколом 2.
- HostbasedAuthentication no: это версия предыдущих опций, поддерживаемая протоколом 2. Она позволяет осуществлять аутентификацию на основе хоста подключаемого клиента. Обычно это допустимо только в изолированных средах, поскольку можно исходную информацию можно подделать. Вы можете указать информацию о хосте в файле /etc/ssh/shosts.equiv или в /etc/hosts.equiv (это выходит за рамки данного руководства).
- PermitEmptyPasswords no: если поддерживается парольная аутентификация, эта опция ограничивает SSH-доступ для учетных записей, у которых нет пароля. доступ таких учетных записей подвергает огромному риску безопасность сервера. За редкими исключениями этот параметр всегда имеет значение no.
- ChallengeResponseAuthentication: эта строка включает или отключает аутентификацию типа «запрос-ответ», которую можно настроить с помощью PAM. Это выходит за рамки настоящего руководства.
Отображение на экране
- X11Forwarding yes: позволяет перенаправлять графические пользовательские интерфейсы X11 на клиентскую машину. Это означает, что вы можете запустить графическую программу на сервере и взаимодействовать с ней на клиенте. Клиент должен поддерживать оконную систему X.
- X11DisplayOffset 10: смещение отображаемого числа sshd для форвардинга X11. Это смещение позволяет SSH порождать окна X11, чтобы избежать конфликтов с сервером X.
- PrintMotd no: запрещает демону SSH читать и отображать сообщения дня. Иногда оно считывается оболочкой, поэтому вам также может понадобиться изменить настройки оболочки.
- PrintLastLog yes: выводит информацию о последнем входе в систему.
Подключения и среда
- TCPKeepAlive yes: настраивает отправку сообщений keepalive TCP на клиентский компьютер. Это может помочь серверу распознать проблемы и сбросить вредоносное соединение. Если эта опция отключена, соединения не будут сбрасываться.
- AcceptEnv LANG LC_*: опция позволяет принимать определенные переменные среды клиентской машины. В этом конкретном случае принимаются переменные отчета, которые могут помочь корректно отобразить сеанс оболочки для клиента.
- Subsystem sftp /usr/lib/openssh/sftp-server: настраивает внешние подсистемы, которые может использовать SSH (в данном примере поддерживается сервер SFTP, путь к которому указан в параметре).
- UsePAM yes: указывает, что для аутентификации пользователей можно использовать PAM (Pluggable Authentication Modules).
2: Другие опции SSHD
Есть много других опций, которые может использовать SSH-демон. Некоторые из них могут быть полезны в большинстве случаев, а другие можно использовать только в определенных обстоятельствах. Рассмотрим основные опции.
Фильтрация пользователей и групп
Некоторые параметры позволяют контролировать, какие пользователи будут иметь возможность входа через SSH. Эти опции следует рассматривать как взаимоисключающие. Например, параметр AllowUsers подразумевает, что всем остальным пользователям доступ запрещен.
- AllowGroups: эта опция позволяет указать имена групп. Только пользователи, входящие в одну из этих групп, смогут входить в систему. Опция создает белый список групп, которым должен быть предоставлен доступ.
- AllowUsers: работает аналогично предыдущей опции; указывает конкретных пользователей, которым разрешено входить в систему. Любой пользователь, не входящий в этот список, не сможет войти. По сути это белый список пользователей.
- DenyGroups: эта опция создает черный список групп, которые не должны входить в систему. Пользователи, принадлежащие к этим группам, не будут иметь доступа.
- DenyUsers: черный список пользователей. Указывает, какие пользователи не должны получать доступ к системе через SSH.
Кроме того, существуют другие ограничительные параметры. Они могут использоваться в сочетании с любым из вышеперечисленных параметров.
- Match: позволяет гораздо более тонко контролировать, кто и при каких обстоятельствах может входить в систему. Эта опция определяет набор параметров, который используется при подключении определенного пользователя или группы.
- RevokedKeys: список отозванных открытых ключей. Предотвращает использование перечисленных ключей для входа в систему.
Дополнительные опции
Существует несколько параметров для настройки сетевого трафика, который будет прослушивать демон SSH:
- AddressFamily: указывает, от каких адресов принимаются подключения. По умолчанию опция имеет значение «any»; для поддержки адресов IPv4 используется значение inet, а для адресов IPv6 – inet6.
- ListenAddress: позволяет настроить SSH-демон для прослушивания определенного адреса и порта. По умолчанию демон будет слушать все адреса этого компьютера.
Доступны также параметры для настройки аутентификации на основе сертификатов, параметры ограничения подключения (ClientAliveCountMax и ClientAliveInterval), а также опции, которые могут изолировать вошедшего в систему пользователя в предварительно сконфигурированной среде chroot (опция ChrootDirectory).
3: Ограничение входа
Вые были упомянуты некоторые из инструментов, которые могут ограничить доступ пользователей и групп к системе. Рассмотрим их подробнее.
Самый простой синтаксис выглядит примерно так:
AllowUsers demouser fakeuser madeupuser
Как видите, в каждой из этих директив можно указать несколько пользователей через пробел.
Мы также можем использовать подстановочные символы и инвертированные параметры. Например, чтобы разрешить доступ всем, кроме пользователя john, можно ввести:
AllowUsers * !john
Эта строка сделает то же самое:
DenyUsers john
Вместо символа ? может стоять любой символ. Например, строка:
AllowUsers ?im
разрешит доступ в систему пользователям tim, jim, vim и т.п.
В определении пользователей можно использовать формат user@hostname, чтобы ограничить вход пользователю, который привязан к конкретному хосту.
AllowUsers demouser@host1.com fakeuser
Эта опция заблокирует доступ всем пользователям с именем fakeuser и пользователю demouser, если он принадлежит хосту host1.
Также ограничить доступ по хосту вне файла sshd_config через TCP-упаковщики. Это настраивается с помощью файлов /etc/hosts.allow и /etc/hosts.deny.
Например, ограничить доступ можно на основе трафика SSH; для этого нужно добавить такие строки в файл hosts.allow:
sshd: .example.com
Предположим, что в файле hosts.deny есть строка, которая выглядит так:
sshd: ALL
Она разрешит вход в систему только тем пользователям, которые приходят с домена example.com или субдомена.
4: Опция match
Опция match определяет шаблон критериев, согласно которому будут применяться или не применяться остальные параметры.
Опция Match содержит пары «ключ-значение». Она может использовать ключи User, Group, Host, Address. Их можно отделить друг от друга пробелами. Сами шаблоны отделяются запятыми. Также тут можно использовать подстановочные символы и инвертированные параметры.
Match User !demouser,!fakeuser Group sshusers Host *.example.com
Шаблон сработает только тогда, когда пользователь – не demouser или fakeuser, входит в группу sshusers и привязан к example.com или поддомену.
Ключ Address может обрабатывать CIDR.
Читайте также: Сетевые технологии: IP-адреса, подсети и бесклассовая адресация CIDR
Параметры, которые соответствуют шаблонам Match, применяются условно. Область действия этих условных опций – до конца файла или до совпадения со следующим шаблоном. Поэтому значения по умолчанию рекомендуется помещать в начало файла, а исключения в конце.
В связи с этим опции часто указывают, что они выполняются только в случае совпадения предыдущего шаблона. Например:
Match User !demouser,!fakeuser Group sshusers Host *.example.com
AuthorizedKeysFile /sshusers/keys/%u
PasswordAuthentication yes
X11Forwarding
X11DisplayOffset 15
Чтобы увидеть полный список параметров Match, посмотрите справочную страницу sshd_config:
man sshd_config
Найдите раздел Match.
Заключение
Как видите, доступ пользователей к системе и качество работы демона SSH во многом зависит от его настроек. Прежде чем применить изменения настроек, нужно тщательно их протестировать и заранее исправить все ошибки.
Файл /etc/ssh/sshd_config позволяет управлять доступом к серверу. Умение настраивать SSH – очень важный навык для всех пользователей Linux.