Redirecionar o lado do servidor do usuário SSH

2

Eu sei que posso criar atalhos para usuários / servidores específicos no lado do cliente via ~/.ssh/config ou /etc/ssh/ssh_config , mas gostaria de fazer algo semelhante, mas no lado do servidor.

Ou seja, quando eu emito no cliente:

 ssh [email protected]

Na verdade, sou chrooted para

/home/jon/pub

em name.server.top onde eu usarei o sftp.

Em /etc/ssh/sshd_config , vi exemplos como os seguintes:

Subsystem sftp internal-sftp
Match user pub
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Será também o seguinte trabalho?

    ChrootDirectory /home/jon/pub

É possível criar o pub como uma espécie de usuário virtual? Ou seja, o usuário remoto registra como pub e sua chave pública está em /home/jon/.ssh/authorized_keys , portanto sem o incômodo de criar um diretório /home/pub/.ssh/authorized_keys ou /home/pub separado.

    
por antonio 12.09.2014 / 13:20

3 respostas

2

Eu testei isso em um contexto de máquina virtual: o servidor SSH é o Cygwin (também host de VM); o cliente é o Arch Linux SSH (também convidado da VM).

Eu usei o script a seguir.
Eu não estou fazendo chrooting, então não preciso copiar nenhum binários na pasta compartilhada, apenas para copiar a chave pública. De qualquer forma, acho que, usando o internal-sftp (não SSH), os requisitos binários devem ser reduzidos.

#!/bin/sh      

## Setup SFTP access on server side
## using an alias user and to a subdir of the aliased user home
## ------------------------------------------------------------


## Customise
## Shared path inside the aliased user home
sharedpath="/home/jon/pub"
## Aliased user name
altuser="pub"
## Path to the public key of aliased user
pubkey=~/.ssh/pub_rsa.pub


## Add aliased user to /etc/passwd
user='grep ^$USER /etc/passwd'
txt="$altuser:'echo $user | cut -d: -f2-5'" 
txt="$txt:$sharedpath:'echo $user | cut -d: -f7'" 
echo  $txt>>/etc/passwd


## Set user rules in sshd_config
txt="Match User $altuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
"
echo "$txt" >>/etc/ssh/sshd_config

## Copy the public key in the shared folder 
mkdir -p "$sharedpath/.ssh"
cp  "$pubkey" "$sharedpath/.ssh/"


## Format sftp line
echo "You can now run on the client (adjust paths accordingly):" 
echo "sftp -i ${pubkey%.*} [email protected]"
    
por 12.09.2014 / 23:02
2

Se funcionasse, você provavelmente deveria ter:

  • ChrootDirectory /home/jon
  • o diretório inicial de pub in /etc/passwd definido apenas para /pub .

/home/jon deve pertencer a root e só pode ser escrito por root .

Você também precisa de um diretório raiz funcional com tudo que precisa em /home/jon , como bin (para o shell), lib (libs compartilhadas), etc (passwd para conversão de uid para nome ) e assim por diante.

O mais provável é que você não seja o ChrootDirectory.

Em vez disso, você pode tentar criar várias entradas em /etc/passwd com os nomes de usuário "com alias" desejados com diretórios iniciais diferentes em / home / jon. Você pode atribuir o mesmo UID numérico e GID para o usuário jon .

Não sei se a autenticação de chave pública funcionará satisfatoriamente. Experimente e comente.

    
por 12.09.2014 / 14:05
0

Você provavelmente poderia (ab) usar a opção AuthorizedKeysCommand para buscar chaves públicas de todos os diretórios home, embora isso pareça um pouco impraticável.

Quanto ao chrooting, leia atentamente o ChrootDirectory , há muitas coisas que você precisaria dentro do chroot para sessões interativas.

    
por 12.09.2014 / 16:17

Tags