Здесь кратко описана настройка сервера ssh, а также генерация и передача ключа пользователя на сервер. Для этого примера настройка выполнялась в Debian 12.
О безопасности различных типов ключей написано немало, но часто рекомендуется использовать тип ED25519.
Генерацию ключа для пользователя системы, обрабатывающей чувствительные данные, следует выполнять в системе, которой вы доверяете. Это может быть как домашний компьютер, так и специализированный ПК в рамках удостоверяющего центра, да и все что угодно, если вы уверены в конфиденциальности данных. Не следует выполнять генерацию ключа на чужом ПК, или в системе, где устанавливается разнообразное ПО из недоверенных источников.
При генерации ключа будет создано два файла: один из них будет содержать секретную (закрытую/приватную) часть ключа, а другой - открытую (публичную) часть. Файл закрытой части ключа необходимо держать в надежном хранилище и исключать его распространения, а файл открытой части можно передавать на серверы, где вам необходимо проходить аутентификацию.
В ходе генерации будет запрошен ввод парольной фразы. Настоятельно рекомендуется не игнорировать этот шаг. Парольная фраза будет запрашиваться каждый раз при прохождении аутентификации при помощи данного ключа. Это рекомендуется делать всегда в качестве дополнительной меры защиты, если ключ не будет использоваться при работе, например, скриптов.
Выполним генерацию ключевой пары:
ssh-keygen -t ed25519 -C "COMMENT" -f "FILENAME"
Далее, чтобы сервер мог проверить подлинность клиента, нужно файл открытой части ключа передать на этот сервер.
Есть несколько способов передачи файла с открытой частью ключа на сервер:
- с использованием физического носителя;
- с использованием утилиты
ssh-copy-id;
- с использованием буфера обмена;
- путем копирования файла на сервер.
В рамках этой заметки я не буду описывать каждый из указанных способов. Вы можете прочитать соответствующие статьи по этим темам. Далее, я приведу пример базового файла конфигурации сервера.
Конфигурация сервера выполняется путем редактирования файла конфигурации /etc/ssh/sshd_config. В этом файле содержатся все необходимые параметры для работы.
Чтобы проверить корректность параметров конфигурации можно выполнить:
Если ошибок нет, можно применить настройки, перезапустив сервер:
Для просмотра статуса сервера выполните:
Ниже приводится пример базового файла конфигурации:
AddressFamily inet
AllowAgentForwarding no
AllowStreamLocalForwarding no
AllowTcpForwarding no
# AllowUsers administrator@...
AuthenticationMethods publickey
AuthorizedKeysFile /etc/ssh/authorized-keys/%u
Banner none
DebianBanner no
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
ClientAliveCountMax 1
ClientAliveInterval 300
DisableForwarding yes
KbdInteractiveAuthentication no
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256
HostKeyAlgorithms -ecdsa-sha2-nistp256
# ListenAddress ...
LoginGraceTime 20
LogLevel VERBOSE
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,umac-128-etm@openssh.com
MaxAuthTries 3
PermitEmptyPasswords no
PermitRootLogin no
PubkeyAuthentication yes
SyslogFacility AUTHPRIV
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
X11Forwarding no
X11UseLocalhost no
Compression no
MaxSessions 2
# Port ...
TCPKeepAlive no
UseDNS no
UsePAM yes
# Match User USERNAME
# ChrootDirectory /home/...
# AuthenticationMethods publickey password
# PasswordAuthentication yes
Обратите внимание, в приведенном выше примере некоторые параметры закомментированы. Их вы можете настроить в соответствии с вашими потребностями, поэтому я счел нужным оставить их здесь без рекомендаций. Кроме этого, имейте в виду, что данная конфигурация зависит от версии сервера ssh и некоторые параметры могут быть неподходящими или небезопасными в вашем случае.
На сервере должна быть создана директория /etc/ssh/authorized-keys/, в которую необходимо помещать файлы с открытыми частами ключей пользователей. Имя каждого такого файла должно быть эквивалентным имени пользователя.
Крайне важным является соблюдение установки прав доступа к файлам закрытой и открытой частей ключа.
Файл закрытой части ключа следует делать доступным для чтения и записи только его владельцу. К файлу открытой части ключа такого требования не предъявляется. Вместо этого, необходимо установить корректные права на директорию и файл открытой части ключа, размещаемые на сервере.
Согласно указанной выше конфигурации, файлы открытых частей ключей всех пользователей размещаются в директории /etc/ssh/authorized-keys. Установите для этой директорию права 755 (владелец по-умолчанию "root" имеет полные права, группа и остальные - только чтение и выполнение):
chmod 755 /etc/ssh/authorized-keys
На файлы открытых частей ключей пользователей установите права владения и чтения только для соответствующих пользователей:
chown USERNAME:USERNAME /etc/ssh/authorized-keys/USERNAME
chmod 400 /etc/ssh/authorized-keys/USERNAME
Для проверки настройки безопасности вашей конфигурации рекомендуется использование сканеров безопасности. Одним из таких сканеров являются ssh-audit и lynis, они входят в стандартный репозиторий Debian.
Рекомендуется периодически обновлять сканер и выполнять проверки конфигурации для профилактики появления в системе небезопасных параметров.