
Tenho um servidor Linux (Ubuntu 16.04) onde executo algumas simulações. Gostaria de dar a um funcionário acesso a este servidor para que ele possa testar seu código (ele o acessaria remotamente, de seu computador pessoal), mas não permitir que ele baixe nenhum arquivo do servidor para seu sistema.
Os arquivos são muito grandes (vários GBs), então não estou preocupado com ele copiar e colar todo o conteúdo do arquivo manualmente em seu computador.
Então, como faço para permitir o acesso SSH a ele, mas proibir o acesso SCP/WinSCP a ele?
Responder1
Não tenho certeza se você pode fazer isso se eles realmente quiserem mover os dados. Você pode impedir a execução scp
de ou sftp
, mas isso ainda deixa muitas outras maneiras de transferir arquivos.
Primeiro, o protocolo de transferência de arquivos realmente simples é este:
ssh user@hostname 'cat /some/remote/file' > /some/local/path
E você pode substituir cat
por quase qualquer programa, caramba, até cp somefile /dev/stdout
parece funcionar.
Nos comentários houve sugestões sobre como desconectar sessões após um determinado horário ou após uma determinada quantidade de dados transferidos. Aparentemente, isso parece funcionar, se você também limitar o número de conexões que o usuário pode fazer. Permitir 10 conexões por dia, com limite de 1 MB/conexão, os limitaria a movimentar apenas 10 MB. Talvez algo assim pudesse funcionar se o uso normal pretendido exigir muito menos transferência de dados do que o cenário indesejado.
Mas e se eles simplesmente enviarem o arquivo para outro lugar? Deve ser fácil configurar um servidor SSH/FTP/qualquer outro lugar e enviar o arquivo através dele. Ou via HTTP(S), pelo menos curl
tem opções como --data @filename
e --upload-file
, e configurar o lado do servidor não deve ser difícil. Se você remover as ferramentas já existentes, e se o programa que elas executam no sistema enviar os dados enquanto/em vez de processá-los?
O que você precisaria fazer é limitar o que o programa que tem acesso aos dados pode fazer com algum tipo de sandbox.
Providencie para que o código seja executado em uma máquina virtual que não tenha acesso externo, exceto alguma interface para upload do código e download dos resultados, com controles apropriados para o que é aceito como upload válido e resultado válido. Ou use algo comoseccomp
para limitar o que o código pode fazer.
Responder2
você pode editar /etc/ssh/sshd_config para seguir
ForceCommand /bin/sh
PermitOpen 0.0.0.0
AllowTcpForwarding no
PermitTunnel no
# Subsystem sftp /usr/lib/openssh/sftp-server
PermitUserEnvironment no
e remova o scp do servidor e também remova o acesso sudo à sua conta. você pode adicionar scp novamente conforme necessário.
cortesia das respostas de Brad e Mike dehttps://serverfault.com/questions/28858/is-it-possible-to-prevent-scp-while-still-allowing-ssh-access