OpenSSH algo como 'internal-sftp', mas para SCP?

16

Estou executando o Debian stable e estou procurando estabelecer o seguinte ambiente para usuários no meu grupo 'sftponly':

  • preso
  • pode transferir com SFTP
  • pode transferir com SCP
  • Não é possível fazer login interativamente com o SSH

De minhas experiências e pesquisas, parece que a seguinte estrofe no sshd_config me leva a 90%:

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

Isso me dá SFTP preso e nenhum SSH, o que é bom. Mas também desabilita o SCP, que é menos do que o ideal, porque alguns clientes são processos herdados e com script que usam o SCP em vez do SFTP (o servidor que estamos substituindo suporta os dois protocolos) e, como esses clientes não estão sob nosso controle e são fáceis modificado, provavelmente não é prático desativar completamente o SCP.

Faz sentido que essa configuração desative o SCP, pois as conexões SCP recebidas fazem com que o sshd gere um processo `scp 'através do shell de login do usuário, como esse usuário. Parece que o mesmo normalmente seria verdade para o SFTP, não fosse o manipulador especial 'internal-sftp'.

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

brianjcohen
fonte
11
Os clientes estão se conectando usando um arquivo de chave ssh ou estão usando senhas? Se for um arquivo-chave, é possível restringir o que eles podem fazer.
Jenny D
Eles estão se conectando com senhas.
Brianjcohen 23/08/12

Respostas:

3

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

rssh é um shell restrito para fornecer acesso limitado a um host via ssh (1), permitindo que um usuário cujo shell esteja configurado para rssh use um ou mais dos comandos scp (1), sftp (1) cvs (1) ), rdist (1) e rsync (1), e apenas esses comandos.

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

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

user9517
fonte
2

Você precisa fazer isso através do ssh?

SE, para que você possa tentar configurar o shell deles para:

/usr/libexec/openssh/sftp-server

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

Se você deseja desacoplar o uso de contas internas, pode configurar o proftpd

Eu configurei um SFTP seguro usando o proftpd. proftpd compilado da seguinte forma:

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

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

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html

coderwhiz
fonte
2

Receio que não haja nada igualmente fácil ou confiável com o OpenSSH, pois como você observou, existe um servidor SFTP interno, mas nenhum servidor SCP interno.

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 simplesmente executar o ssh / bin / bash e obter um shell. Não terá um tty e, portanto, será inconveniente de usar, mas e daí ... para não mencionar todos os outros programas que ele pode executar e que você provavelmente não quer que ele faça.
  3. Alterar as permissões de .bash_profile é pouco útil se o usuário puder 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.

Richard E. Silverman
fonte
0

Esta é uma ferramenta de terceiros, que não está no escopo da pergunta, mas achei que merecia uma menção.

Jailkit: https://olivier.sessink.nl/jailkit/

Possui uma coleção de ferramentas para facilitar a configuração de cadeias de usuários - copiar binários e bibliotecas para a prisão e configurar o registro de dentro da prisão para o sistema operacional. Eu usei-o para criar chroots sftp / scp / rsync-only.

Ele também vem com jk_lsh(shellkit limitado do jailkit), que pode ser usado fora da prisão para limitar os comandos que um usuário pode executar, se, por exemplo, você deseja permitir o scp / sftp / rsync apenas sem chroot.

chutz
fonte
-1

Aqui está um truque sobre como executar esse 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 logon 'ssh', a 'saída' será chamada e a conexão será fechada.

Verifique se eles não podem 'sftp' um novo '.bash_profile' em seus diretórios pessoais!

chown root:root .bash_profile

Espero que ajude!

Vince Berk
fonte
Essa abordagem não parece levar em consideração o requisito da prisão.
Brianjcohen 23/08/12
Sim, infelizmente, você teria que criar um ambiente chroot manual para o lado 'scp', sobrepondo-se ao diretório chroot fornecido em sshd_config, e executar o truque acima para cada usuário que você deseja restringir. O 'scp' não funciona com o servidor sftp interno.
Vince Berk