OpenSSH qualquer coisa como 'internal-sftp' mas para SCP?

16

Estou executando o Debian estável e pretendo estabelecer o seguinte ambiente para usuários no meu grupo 'sftponly':

  • preso
  • pode transferir com o SFTP
  • pode transferir com o SCP
  • não pode efetuar login interativamente com o SSH

Da minha experimentação e pesquisa, parece que a seguinte estrofe em sshd_config me leva 90% lá:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Isso me dá um SFTP preso e nenhum SSH, o que é bom. Mas também desativa o SCP, o que é menos do que ideal porque muitos clientes são processos legados e com script que usam SCP em vez de SFTP (o servidor que estamos substituindo suportam ambos os protocolos) e porque esses clientes não estão sob nosso controle e facilmente modificado, provavelmente não é prático desabilitar completamente o SCP.

Faz sentido que essa configuração desabilitaria o SCP, já que as conexões SCP de entrada fazem com que o sshd crie um processo 'scp' por meio do shell de login do usuário, como esse usuário. Parece que o mesmo seria normalmente verdadeiro para o SFTP, se não fosse pelo manipulador especial 'internal-sftp'.

Então, suponho que a minha pergunta é: existe uma maneira de obter o mesmo efeito que 'internal-sftp', mas para SCP, sem recorrer ao uso de ferramentas de terceiros como scponly e rssh? A coisa realmente legal sobre o 'internal-sftp' é que ele não requer configurar uma cadeia com arquivos de suporte, ou lidar com binários setuid de terceiros potencialmente exploráveis (o rssh, em particular, tem um histórico de explorações).

    
por brianjcohen 23.08.2012 / 16:42

5 respostas

3

Dê uma olhada no rssh que é um shell alternativo que permite acesso limitado a um sistema.

rssh is a restricted shell for providing limited access to a host via ssh(1), allowing a user whose shell is configured to rssh to use one or more of the command(s) scp(1), sftp(1) cvs(1), rdist(1), and rsync(1), and only those commands.

Você pode configurar quais comandos podem ser usados por usuário ou por todo o sistema usando o rssh.conf arquivo

Alternativamente, você pode usar scponly para fazer o que quiser. Ele age como um wrapper para o pacote ssh e permite a transferência de arquivos, mas não o acesso ao shell.

    
por 26.08.2012 / 10:35
2

Você precisa fazer isso através do ssh?

SE você pode tentar configurar o shell deles para:

/usr/libexec/openssh/sftp-server

E certifique-se de adicionar o acima em / etc / shells

Se você quiser dissociar o uso de contas internas, você pode configurar o proftpd

Eu configuro um SFTP seguro usando o proftpd. compilado proftpd assim:

./ configure --prefix = /usr --sysconfdir = /etc --with-modules = mod_sftp

Pode usar este artigo abaixo, e mais algumas no google sobre como configurá-lo:

link

    
por 24.08.2012 / 05:44
2

Eu tenho medo de que não haja nada similarmente fácil ou confiável com o OpenSSH, já que, como você observou, existe um servidor SFTP embutido, mas nenhum servidor SCP embutido.

Um aviso: a sugestão de Vince Berk é ruim por vários motivos:

  1. O comportamento do shell em relação aos arquivos de inicialização pode ser influenciado por variáveis de ambiente, que o SSH pode definir remotamente dependendo da configuração do servidor.
  2. O usuário pode apenas executar ssh / bin / bash e obter um shell. Não terá um tty e assim será inconveniente de usar, mas e daí ... para não mencionar todos os outros programas que ele pode executar que você presumivelmente não quer que ele faça.
  3. Alterar as permissões de .bash_profile não é bom se o usuário puder apenas fazer "ssh host rm -f .bash_profile"; nada foi mencionado sobre as permissões do diretório inicial.

... e assim por diante. Esse tipo de abordagem é muito frágil.

    
por 26.08.2012 / 08:31
0

Esta é uma ferramenta de terceiros, que não está no escopo da questão, mas acho que merece uma menção de qualquer maneira.

Jailkit: link

Ele tem uma coleção de ferramentas para facilitar a configuração de cadeias de usuários - copiando binários e bibliotecas para a cadeia e configurando o registro de dentro da cadeia para o sistema operacional. Eu usei-o para criar chroots somente sftp / scp / rsync.

Ele também vem com jk_lsh (shell limitado do jailkit), que pode ser usado fora da cadeia para limitar os comandos que um usuário pode executar, se, e. você deseja permitir scp / sftp / rsync somente sem chroot.

    
por 03.12.2018 / 00:58
-1

Aqui está um truque sobre como executar este servidor. Defina o shell dos usuários para, digamos, bash:

usermod -S /bin/bash [username]

Agora crie em seu homedir um '.bash_profile' com a seguinte linha:

[ -n "$PS1" ] && exit

Isso faz com que sessões não interativas (como 'scp') continuem. No entanto, se eles tentarem um login 'ssh', a 'exit' é chamada e a conexão é fechada.

Certifique-se de que eles não possam 'sftp' um novo '.bash_profile' em seus diretórios home!

chown root:root .bash_profile

Espero que ajude!

    
por 23.08.2012 / 17:53