Como posso desativar o sftp temporariamente sem recarregar o serviço?

3

Eu configurei um usuário com chroot que tem acesso a apenas 1 diretório através do sftp do sshd para que um de meus colegas de trabalho possa fazer upload de certos tipos de arquivos. Vou então fazer uma maneira de acionar um comando através de HTTP que irá executar um longo processo nos arquivos, e eu preciso desabilitar o sftp enquanto o processo está sendo executado.

Existe um comando que eu possa usar para desativar o sftp sem ter que alterar o arquivo sshd_config e recarregar o serviço? Eu estava pensando em fazer o bloqueio de portas, mas ainda preciso acessar o ssh.

Eu li sobre desabilitar a conta de usuário com passwd -l , mas se ele já estiver logado através do sftp, ainda permitiria modificações.

Alguma sugestão?

Editar:

Depois de mais algumas descobertas, descobri que podia fazer ps -axl | grep $user@notty e enviar um kill -9 para o PID para desconectar o usuário de Sua sessão atual e fazer passwd -l username para impedir que o usuário faça login novamente ou como Martin sugeriu remover o symlink para o binário sftp-server.

Mas, no final, aceitei o conselho de Mike e apenas movi os arquivos para outro lugar, em vez de executar o processo no diretório chroot.

    
por Roberto Arosemena 29.05.2017 / 19:55

3 respostas

2

Você pode remover temporariamente as permissões de gravação para a pasta.

Se você quiser desabilitar completamente o SFTP, você pode criar um symlink para sftp-server binary. E configure o usuário para usar esse link simbólico como binário SFTP. Em seguida, você pode remover temporariamente o link simbólico, o que efetivamente desativará o SFTP.

Match User theuser
    ForceCommand /path/to/sftp/symlink
    
por 29.05.2017 / 20:17
1

Note que desabilitar o sftp em uma escala de todo o sistema é provavelmente sem valor, já que o sftp se torna completamente indisponível para todas as outras tarefas possíveis (usando o design atual e o design futuro). O melhor design (mantendo a flexibilidade de longo prazo) é provavelmente controlar as permissões de "gravação" de certos dados (conforme observado pela primeira solução de Melhor solução multi-solução de Martin Prikryl ).

Eu escolho não duplicar (ou tentar completar) a melhor resposta de solução múltipla de Martin Prikryl, que não envolve a mudança do arquivo sshd_config nem o recarregamento do serviço.

No entanto, por uma questão de educação / familiaridade, vou compartilhar outra opção.

without having to change the sshd_config file and reload the service?

Você pode alterar o arquivo sshd_config, mas não recarregar o serviço. (Então, conforme solicitado, você não está fazendo os dois.)

Em seguida, envie um SIGHUP para o serviço pai sshd. (Certifique-se que é o pai: SIGHUPping outro serviço sshd pode matar uma conexão.) A maneira fácil de identificar qual processo é o pai pode ser usar um arquivo PID.

por exemplo, se o sshd estiver criando este arquivo pid:
sudo kill -HUP $( sudo cat /var/run/sshd.pid )

(O nome / localização padrão do arquivo PID pode variar entre diferentes sistemas operacionais.)

SIGHUPping the parent fará com que o sshd recarregue o arquivo de configuração (porque é assim que o sshd foi projetado). Observe que isso pode não parar nenhuma sessão sftp em execução no momento (e modificar o arquivo binário no disco também pode não fazer isso), portanto, certifique-se de que ela seja manipulada antes de passar para o processo sensível que não pode ter o sftp.

    
por 29.05.2017 / 21:18
-1

Você pode reconfigurar serviços de firewall para bloquear as portas sftp em uso.

    
por 29.05.2017 / 20:26