Openssh - Permitir que o root acesse sftp e ssh

Openssh - Permitir que o root acesse sftp e ssh

Quero configurar o sftp no meu servidor para ser acessado pelo usuário root.

Mudei minha configuração /etc/ssh/sshd_configpara:

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

Funciona e posso me conectar por sftp ao meu servidor, mas agora posso mais me conectar por ssh. Recebi esta mensagem:

This service allows sftp connections only.

O mesmo acontece comMatch group root

Como posso configurar o sftp para permitir root, mas manter o ssh também?


Atualizar:

Comentar a opção ssh do ForceCommand internal-sftp ainda funciona, mas não consigo me conectar por sftp. sshd_config:
Subsystem   sftp    /usr/libexec/sftp-server
Match user root
ChrootDirectory /
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp

Erro:

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

Do lado do servidor:

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

Nota: Se eu também remover Subsystem sftp /usr/libexec/sftp-server, recebo um erro diferente ao tentar conectar por sftp: subsystem request failed on channel 0

Responder1

A ForceCommanddiretiva só permite que o root use sftp, tente comentar essa linha.

Responder2

A página de manual do OpenSSHsshd_config(5)descreve isso:

ForceCommand

Força a execução do comando especificado por ForceCommand, ignorando qualquer comando fornecido pelo cliente e ~/.ssh/rcse presente. O comando é invocado usando o shell de login do usuário com a -copção. Isso se aplica à execução de shell, comando ou subsistema. É mais útil dentro de um Matchbloco. O comando fornecido originalmente pelo cliente está disponível na SSH_ORIGINAL_COMMANDvariável de ambiente. Especificar um comando internal-sftpforçará o uso de um servidor SFTP em processo que não requer arquivos de suporte quando usado com ChrootDirectory. O padrão é none.

Conforme dito aqui, você ForceCommand internal-sftpsó permite SFTP.

Além disso,PermitRootLogin yesé perigoso porque permite a autenticação por senha para root eChrootDirectory /não é realmente um limitanteprisão chrootde forma alguma. É recomendado

  • use autenticação de chave pública rootou desative rootcompletamente o login
  • usar em vez de login sudodiretoroot
  • use autenticação de chave pública para qualquer usuário com sudoprivilégios
  • use senha para sudo(juntamente com o anterior, é efetivamente um MFA para os privilégios escalados).

Fico lembrando disso, pois Server Fault é para questões relacionadas a ambientes de negócios e sua configuração atual não demonstra práticas razoáveis ​​neste contexto.

Responder3

Você pode tentar executar este manual ansible que verifica sua configuração ssh e cria uma configuração ssh segura. https://github.com/dev-sec/ansible-collection-hardening/tree/master/roles/ssh_hardening

Depois de executar isso, você só precisa permitir o rootlogin no sshd_config e então tanto o ssh quanto o sftp devem funcionar

Responder4

Bem, o problema aqui é que isso /usr/libexec/sftp-servernão existe no lado do servidor. Eu adicionei na imagem com uma nova compilação do Yocto e consegui conectar por ssh e sftp com root usando a configuração padrão:

# 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

informação relacionada