diff --git a/README.md b/README.md index b038a03..ba31928 100644 --- a/README.md +++ b/README.md @@ -206,9 +206,289 @@ ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDW0f99tvseYmt9J+EJw9vvOUcJwKWdJufFy65SSnxe ``` ## Добавление публичного ключа в OpenSSH +> *Предполагается что Вы вошли под root правами* + +Для добавления ключей авторизации по SSH в OpenSSH используется файл `authorized_keys` который находится в каталоге `~/.ssh` + +**Шаг 1:** Создать каталог `.ssh` +```bash +mkdir ~/.ssh +``` +Эта команда создаст нужный каталог или выведет: +> mkdir: /root/.ssh: File exists + +**Шаг 2:** Установить права доступа к каталогу `~/.ssh` +```bash +chmod 700 ~/.ssh +``` + +**Шаг 3:** Создать файл `authorized_keys` в каталоге `~/.ssh` и добавить в него Ваш публичный ключ +```bash +nano ~/.ssh/authorized_keys +``` +Скопируйте [Ваш публичный ключ](#создание-публичного-и-приватного-ключа) и вставте его в файл authorized_keys сочетанием клавиш `Ctrl+Shift+V` + +Сохраните файл `Ctrl+X` -> `Y` -> `Enter` + +**Шаг 4:** Установить права доступа к файлу `authorized_keys` +```bash +chmod 600 ~/.ssh/authorized_keys +``` + + ## Редактирование конфигурации OpenSSH +Для включения авторизации по ключу необходимо отредактировать конфигурационный файл OpenSSH +> Дополнительно изменим порт подключения по SSH - это необходимо для безопасности + +**Шаг 1:** Открыть файл конфигурации OpenSSH путь к файлу `/etc/ssh/sshd_config` +```bash +nano /etc/ssh/sshd_config +``` + +
+ Вы увидите файл конфигурации OpenSSH вида: + +```ini + +# This is the sshd server system-wide configuration file. See +# sshd_config(5) for more information. + +# This sshd was compiled with PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games + +# The strategy used for options in the default sshd_config shipped with +# OpenSSH is to specify options with their default value where +# possible, but leave them commented. Uncommented options override the +# default value. + +# In general, the first uncommented definition of an option takes precedence. +# For options that accept multiple values, like 'Port', subsequent definitions +# are appended to the configuration. +# +# Note that the above implies that configuration options from snippets in +# /etc/ssh/sshd_config.d/*.conf take precedence over those defined in this +# file. In addition, configuration snippet files are processed in lexical +# order, so options defined in files with names that sort earlier take +# precedence. +# +# Such configuration snippets may be present in default installations of +# Ubuntu. +# Include /etc/ssh/sshd_config.d/*.conf + +# When systemd socket activation is used (the default), the socket +# configuration must be re-generated after changing Port, AddressFamily, or +# ListenAddress. +# +# For changes to take effect, run: +# +# systemctl daemon-reload +# systemctl restart ssh.socket +# +Port 22 +#AddressFamily any +#ListenAddress 0.0.0.0 +#ListenAddress :: + +#HostKey /etc/ssh/ssh_host_rsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key +#HostKey /etc/ssh/ssh_host_ed25519_key + +# Ciphers and keying +#RekeyLimit default none + +# Logging +#SyslogFacility AUTH +#LogLevel INFO + +# Authentication: + +#LoginGraceTime 2m +PermitRootLogin yes +#StrictModes yes +#MaxAuthTries 6 +#MaxSessions 10 + +#PubkeyAuthentication no + +# Expect .ssh/authorized_keys2 to be disregarded by default in future. +AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody + +# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts +#HostbasedAuthentication no +# Change to yes if you don't trust ~/.ssh/known_hosts for +# HostbasedAuthentication +#IgnoreUserKnownHosts no +# Don't read the user's ~/.rhosts and ~/.shosts files +#IgnoreRhosts yes + +# To disable tunneled clear text passwords, change to "no" here! +#PasswordAuthentication yes +#PermitEmptyPasswords no + +# Change to "yes" to enable keyboard-interactive authentication. Depending on +# the system's configuration, this may involve passwords, challenge-response, +# one-time passwords or some combination of these and other methods. +# Beware issues with some PAM modules and threads. +KbdInteractiveAuthentication no + +# Kerberos options +#KerberosAuthentication no +#KerberosOrLocalPasswd yes +#KerberosTicketCleanup yes +#KerberosGetAFSToken no + +# GSSAPI options +#GSSAPIAuthentication no +#GSSAPICleanupCredentials yes +#GSSAPIStrictAcceptorCheck yes +#GSSAPIKeyExchange no + +# Set this to 'yes' to enable PAM authentication, account processing, +# and session processing. If this is enabled, PAM authentication will +# be allowed through the KbdInteractiveAuthentication and +# PasswordAuthentication. Depending on your PAM configuration, +# PAM authentication via KbdInteractiveAuthentication may bypass +# the setting of "PermitRootLogin prohibit-password". +# If you just want the PAM account and session checks to run without +# PAM authentication, then enable this but set PasswordAuthentication +# and KbdInteractiveAuthentication to 'no'. +UsePAM yes + +#AllowAgentForwarding yes +#AllowTcpForwarding yes +#GatewayPorts no +X11Forwarding yes +#X11DisplayOffset 10 +#X11UseLocalhost yes +#PermitTTY yes +PrintMotd no +#PrintLastLog yes +#TCPKeepAlive yes +#PermitUserEnvironment no +#Compression delayed +#ClientAliveInterval 0 +#ClientAliveCountMax 3 +#UseDNS no +#PidFile /run/sshd.pid +#MaxStartups 10:30:100 +#PermitTunnel no +#ChrootDirectory none +#VersionAddendum none + +# no default banner path +#Banner none + +# Allow client to pass locale and color environment variables +AcceptEnv LANG LC_* COLORTERM NO_COLOR + +# override default of no subsystems +Subsystem sftp /usr/lib/openssh/sftp-server + +# Example of overriding settings on a per-user basis +#Match User anoncvs +# X11Forwarding no +# AllowTcpForwarding no +# PermitTTY no +# ForceCommand cvs server +``` + +
+ +> Файл /etc/ssh/sshd_config управляет безопасностью и поведением SSH-сервера, где активные (не закомментированные) директивы переопределяют значения по умолчанию. Ключевые настройки включают использование порта 22, включение PAM, поддержку SFTP и, в данном случае, разрешение прямого входа под root-пользователем (PermitRootLogin yes). + +**Шаг 2:** Изменить строчку: `#PubkeyAuthentication no` на `PubkeyAuthentication yes` + +**Шаг 3:** Сохранить изменения `Ctrl+X` -> `Y` -> `Enter` + +
+ Ниже разбор всех ключевых параметров из конфига, разбитый по логическим группам. + +> Важное правило этого файла: если строка начинается с #, параметр закомментирован и работает значение по умолчанию. Если # нет — настройка активна. + +1. Сетевые настройки + +Port 22: Стандартный порт для SSH. Часто меняют на нестандартный (например, 2222), чтобы спастись от ботов-сканеров. + +AddressFamily any: Разрешает подключения и через IPv4, и через IPv6. + +ListenAddress: Позволяет указать конкретный IP-адрес сервера, на котором SSH будет ждать подключений (по умолчанию — на всех). + +2. Ключи сервера и шифрование + +HostKey: Пути к секретным ключам самого сервера. Они нужны, чтобы клиент (твой ПК) мог убедиться, что подключается именно к тому серверу, к которому планировал. + +RekeyLimit: Настройка того, как часто сервер будет обновлять сессионные ключи (по умолчанию — раз в 1 ГБ данных или раз в час). + +3. Логирование + +SyslogFacility AUTH: Категория системного журнала (syslog), куда полетят логи авторизации. + +LogLevel INFO: Степень детализации логов. INFO — золотая середина (кто зашел, когда, ошибки). + +4. Доступ и ограничения (Аутентификация) + +LoginGraceTime 2m: Время, которое дается пользователю на ввод пароля. Если не успел — дисконнект. + +PermitRootLogin yes: (Важно!) Разрешает вход под пользователем root. В целях безопасности лучше ставить prohibit-password (только по ключам) или no. + +StrictModes yes: Проверяет права доступа к файлам в папке .ssh. Если они открыты для всех, SSH откажется работать (защита от кражи ключей). + +MaxAuthTries 6: Сколько попыток ввода пароля дается, прежде чем соединение оборвется. + +MaxSessions 10: Максимальное количество открытых сессий (окон) в рамках одного сетевого соединения. + +5. Методы входа + +PubkeyAuthentication: Разрешает вход по SSH-ключам (самый безопасный способ). + +AuthorizedKeysFile: Путь, где лежат публичные ключи клиентов, которым разрешен вход. + +PasswordAuthentication: Разрешает или запрещает вход по обычному паролю. + +PermitEmptyPasswords no: Запрещает вход пользователям с пустым паролем. + +KbdInteractiveAuthentication no: Отключает "интерактивный" ввод (часто используется для одноразовых паролей или хитрых систем PAM). + +6. Взаимодействие с системой + +UsePAM yes: Подключает систему PAM (Pluggable Authentication Modules). Она позволяет использовать системные пароли, политики блокировки и другие модули Linux для авторизации. + +PrintMotd no: Не показывать "сообщение дня" (Message of the Day) при входе. + +AcceptEnv: Разрешает клиенту передавать свои переменные окружения (например, язык системы LANG). + +7. Дополнительные возможности + +X11Forwarding yes: Разрешает пробрасывать графические интерфейсы (если ты запустишь GUI-приложение на сервере, оно откроется в окне на твоем компе). + +Subsystem sftp: Указывает путь к программе, которая обеспечивает работу SFTP (передачу файлов через SSH). + +Match User: Специальный блок в конце. Позволяет задать индивидуальные настройки для конкретного пользователя или группы (например, одному юзеру запретить всё, кроме SFTP). + + +
+ +**Шаг 4:** Перезапустить службу ssh +```bash +systemctl restart ssh +``` + + ## Проверка доступа по ключу +Теперь **ВАЖНО** подключится к серверу по ключу. + +Используйте Termius. + +Как добавить Host и выполнить авторизацию по ключу можно прочитать в документации к Termius. + ## Окончательное редактирование конфигурации OpenSSH +> Если авторизация по ключу прошла успешно, то можно приступить к окончательному редактированию конфигурации + + # Настройки UFW ## Редактирование файла приложения OpenSSH-Server ## Создание файла приложения HTTP