
Quero configurar o sftp no meu servidor para ser acessado pelo usuário root.
Mudei minha configuração /etc/ssh/sshd_config
para:
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 ForceCommand
diretiva só permite que o root use sftp, tente comentar essa linha.
Responder2
A página de manual do OpenSSHsshd_config(5)descreve isso:
Força a execução do comando especificado por
ForceCommand
, ignorando qualquer comando fornecido pelo cliente e~/.ssh/rc
se presente. O comando é invocado usando o shell de login do usuário com a-c
opção. Isso se aplica à execução de shell, comando ou subsistema. É mais útil dentro de umMatch
bloco. O comando fornecido originalmente pelo cliente está disponível naSSH_ORIGINAL_COMMAND
variável de ambiente. Especificar um comandointernal-sftp
forçará o uso de um servidor SFTP em processo que não requer arquivos de suporte quando usado comChrootDirectory
. O padrão énone
.
Conforme dito aqui, você ForceCommand internal-sftp
só 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
root
ou desativeroot
completamente o login - usar em vez de login
sudo
diretoroot
- use autenticação de chave pública para qualquer usuário com
sudo
privilé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-server
nã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