Демон sshd#

sshd (OpenSSH Daemon) - программа-демон для ssh (подробнее см. в «Утилита ssh»). Обеспечивает безопасную связь между двумя недоверенными хостами по незащищенной сети.

sshd прослушивает подключения от клиентов, в обычной конфигурации запускается при загрузке с /etc/rc. sshd запускает новый демон для каждого входящего соединения. Разветвленные демоны управляют обменом ключами, аутентификацией, выполнением команд, обменом данными и проч.

sshd можно настроить с помощью параметров командной строки или файла конфигурации (по умолчанию sshd_config - подробнее см. в «Файл /etc/ssh/sshd_config»). Параметры командной строки переопределяют значения, указанные в файле конфигурации. sshd перечитывает файл конфигурации, когда получает сигнал зависания, SIGHUP, и выполняется с именем и параметрами, с которыми он был запущен, например, /usr/sbin/sshd.

Синтаксис sshd:

sshd <options>

Где <options> - передаваемые демону опции, при необходимости - с соответствующими аргументами.

Часто используемые опции утилиты представлены в таблице ниже.

Опция

Описание

-4

Использовать только адреса IPv4

-6

Использовать только адреса IPv6

-c <host_certificate_file>

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

-D

Отключить режим демона для sshd

-d

Включить режим отладки. Подробный вывод направляется в стандартный поток ошибок без перевода в фоновый режим. При этом не будет порождаться дочерний процесс, и будет обрабатываться только одно соединение. Опция предназначена только для отладки на сервере. Несколько опций -d повышают уровень отладки. Максимум - 3

-E <log_file>

Перенаправить журналы отладки в указанный файл вместо системного журнала

-e

Перенаправить журналы отладки в стандартный поток ошибок stderr вместо системного журнала

-f <config_file>

Указать имя конфигурационного файла sshd. По умолчанию используется /etc/ssh/sshd_config. sshd не запустится, если нет файла конфигурации

-g <login_grace_time>

Задать клиентам время для аутентификации. Значение по умолчанию - 120 секунд. Если не удается аутентифицировать пользователя в течение указанного времени, сервер отключается и завершает работу. Нулевое значение указывает на отсутствие временного ограничения для аутентификации

-h <host_key_file>

Указать файл, из которого считывается ключ хоста. Этот параметр необходимо указать, если sshd запускается не от имени пользователя с административными полномочиями (например, root), поскольку обычно файлы ключей хоста не доступны для чтения никому, кроме него. По умолчанию используется значение /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key и /etc/ssh/ssh_host_rsa_key. Можно иметь несколько файлов ключей хоста для разных алгоритмов ключей

-o <option>

Указать параметры в формате, используемом в файле конфигурации. Требуется для указания дополнительных настроек, для которых нет опций командной строки

-p <port>

Указать порт, через который сервер будет прослушивать соединения (по умолчанию 22). Можно указать несколько вариантов портов. Порты, указанные в файле конфигурации с параметром Port, будут игнорироваться, если указан порт в командной строке. Порты, указанные с помощью параметра ListenAddress, переопределяют порты командной строки

-q

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

-T

Включить расширенный тестовый режим, в котором проверяется корректность файла конфигурации, эффективная конфигурация выводится в стандартный поток вывода stdout, затем работа sshd завершается

-t

Включить тестовый режим. Проверяется только наличие файла конфигурации и работоспособность ключей.

В целях обеспечения безопасности при неудачной попытке входа в систему через ssh в журнале аудита отображается использованное имя пользователя. Пример сообщения о попытке войти в систему пользователем, которого не существует:

type=USER_LOGIN msg=audit(1710405845.689:26165): pid=726595 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="(unknown)" exe="/usr/sbin/sshd" hostname=? addr=hh.hh.hh.hh terminal=ssh res=failed' UID="root" AUID="unset"

Где запись acct="(unknown)" информирует, что использованного имени пользователя в системе нет.

sshd проверяет валидность имени пользователя, который подключается к серверу SSH. Валидация включает в себя, в том числе, контроль задания имени пользователя, соответствия его критериям безопасности и присутствия его в системе.

В целях тестирования возможен отказ от проверки имени на валидность посредством перенастройки соответствующих директив конфигурационного файла (например, AllowUsers, DenyUsers, AllowGroups, DenyGroups). Это позволит пропустить имя пользователя, отсутствующее в системе, и проверить запись сообщений аудита.

Для записи информации о пользователе, осуществляющем попытку подключения по SSH, в журнал аудита /var/log/audit/audit.log необходимо, чтобы была включена функция конфигурации audit_username. Для входа по паролю – директива PasswordAuthentication. Сценарий проверки:

  1. Выберите произвольное имя пользователя, которого нет в системе, например, random_user, и попытайтесь подключиться по SSH к удаленному хосту с адресом hh.hh.hh.hh:

    ssh random_user@hh.hh.hh.hh
    

    Попытка входа завершится неудачей.

  2. Проверьте записи о попытках входа (тип событий USER_LOGIN) в журнале аудита:

    ausearch --ts today -m USER_LOGIN
    

    Подробнее про ausearch см. в «Утилита ausearch». Пример записи из вывода команды:

    type=USER_LOGIN msg=audit(1710410303.658:463): pid=3716 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:sshd_t:s0-s0:c0.c1023 msg='op=login acct="random_user" exe="/usr/sbin/sshd" hostname=? addr=hh.hh.hh.hh terminal=ssh res=failed' UID="root" AUID="unset" prev_crc32=5c832c35 crc32=a8f72eec
    

    В представленном примере отражено использованное имя пользователя - acct="random_user", а также результат - res=failed, информирующий о неудачной попытке входа.

Примеры использования#

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

    sshd
    
  • Для запуска sshd на переднем плане используйте команду:

    sshd -D
    
  • Для запуска sshd в режиме отладки (с подробным выводом) воспользуйтесь командой:

    sshd -D -d
    
  • Для запуска sshd на порте port1 используйте команду:

    sshd -p port1