Openssh — разрешить root доступ как к sftp, так и к ssh

Openssh — разрешить root доступ как к sftp, так и к ssh

Я хочу настроить sftp на своем сервере так, чтобы к нему имел доступ пользователь root.

Я изменил конфигурацию на /etc/ssh/sshd_config:

PermitRootLogin yes
AuthorizedKeysFile  .ssh/authorized_keys
PermitEmptyPasswords yes
ChallengeResponseAuthentication no
Compression no
ClientAliveInterval 15
ClientAliveCountMax 4
#Other options are commented
[...]
Subsystem sftp /usr/libexec/sftp-server

Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Это работает, и я могу подключиться по sftp к своему серверу, но теперь я больше не могу подключиться по ssh. Я получил это сообщение:

This service allows sftp connections only.

То же самое происходит сMatch group root

Как настроить sftp так, чтобы разрешить root, но при этом оставить ssh?


Обновлять:

Комментарий ForceCommand internal-sftp option ssh по-прежнему работает, но я не могу подключиться по sftp. sshd_config:
Subsystem   sftp    /usr/libexec/sftp-server
Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

Ошибка:

user@notebook:~$ sftp root@my_device
Warning: the ECDSA host key for 'my_device' differs from the key for the IP address 'xx.xx.xx.xx'
Offending key for IP in /home/myUser/.ssh/known_hosts:78
Matching host key in /home/myUer/.ssh/known_hosts:93
Are you sure you want to continue connecting (yes/no)? yes
Connection closed.  
Connection closed

На стороне сервера:

root@my_device:~# cat /var/log/auth.log | grep ssh
2024-01-17T19:25:21.659884+00:00 my_device sshd[30592]: Accepted none for root from xx.xx.xx.xx port 38024 ssh2
2024-01-17T19:25:21.881328+00:00 my_device sshd[30592]: Received disconnect from xx.xx.xx.xx port 38024:11: disconnected by user
2024-01-17T19:25:21.881997+00:00 my_device sshd[30592]: Disconnected from user root xx.xx.xx.xx port 38024

Примечание: Если я также удалю, Subsystem sftp /usr/libexec/sftp-serverто при попытке подключения по sftp возникнет другая ошибка: subsystem request failed on channel 0

решение1

Директива ForceCommandпозволяет использовать sftp только пользователю root, попробуйте закомментировать эту строку.

решение2

Страница руководства OpenSSHsshd_config(5)описывает это:

ForceCommand

Принудительно выполняет команду, указанную с помощью ForceCommand, игнорируя любую команду, предоставленную клиентом, и ~/.ssh/rcесли она присутствует. Команда вызывается с помощью оболочки входа пользователя с опцией -c. Это относится к выполнению оболочки, команды или подсистемы. Это наиболее полезно внутри блока Match. Команда, изначально предоставленная клиентом, доступна в SSH_ORIGINAL_COMMANDпеременной окружения. Указание команды internal-sftpприведет к принудительному использованию внутрипроцессного SFTP-сервера, который не требует файлов поддержки при использовании с ChrootDirectory. Значение по умолчанию — none.

Как здесь сказано, ForceCommand internal-sftpразрешен только SFTP.

Более того,PermitRootLogin yesопасен, так как включает аутентификацию по паролю для root, иChrootDirectory /на самом деле не является ограничивающимchroot-тюрьмавообще. Рекомендуется

  • использовать аутентификацию с открытым ключом или вообще rootотключить вход в системуroot
  • использовать sudoвместо прямого rootвхода
  • использовать аутентификацию с открытым ключом для всех пользователей, имеющих sudoпривилегии
  • использовать пароль для sudo(вместе с предыдущим это фактически является MFA для повышения привилегий).

Я постоянно напоминаю об этом, поскольку Server Fault предназначен для вопросов, связанных с бизнес-средами, а ваша текущая конфигурация не демонстрирует разумных практик в этом контексте.

решение3

Вы можете попробовать запустить этот сценарий Ansible, который проверит вашу конфигурацию SSH и создаст безопасную конфигурацию SSH. https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/ssh_hardening

После запуска вам нужно будет только разрешить rootlogin в sshd_config, после чего и ssh, и sftp должны работать.

решение4

Ну, проблема здесь была в том, что этого /usr/libexec/sftp-serverне существует на стороне сервера. Я добавил его в образ с новой сборкой Yocto, а затем смог подключиться по ssh и sftp с правами root, используя конфигурацию по умолчанию:

# override default of no subsystems
Subsystem   sftp    /usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

Связанный контент