Como posso configurar o scp unidirecional?

4

Eu tenho um servidor remoto my.server.com e gostaria de permitir que outro usuário ( stranger ) escaneie arquivos na caixa.

Objetivos:

  • dê o menor acesso possível ao usuário stranger
  • stranger não deve poder efetuar login em todos
  • se possível, organize uma cópia unidirecional - elas só devem conseguir copiar arquivos para o servidor, não desativar

Como posso conseguir isso?

Editar: removi todas as postagens cruzadas. Esta questão só existe aqui. Por favor ajude!

Editar 2: Acabei por aceitar uma transferência scp normal. Resposta de @ Lambert selecionada porque foi a mais completa. Obrigado por toda a ajuda!

    
por beane 25.06.2015 / 21:19

2 respostas

3

Se você quiser configurar todas as coisas limitantes mencionadas, sugiro usar o ProFTPd.

Usando o sftp_module , você só pode permitir uma sessão segura. Consulte o link para obter detalhes sobre a funcionalidade sftp . Perto da parte inferior da página, está listada uma configuração de exemplo.

Usando a diretiva DefaultRoot , você pode isolar o usuário concedido em seu próprio diretório

Usando a estrutura <LIMIT> , você pode limitar os comandos FTP que deseja permitir, ou seja, READ , para que o usuário não possa recuperar arquivos. Consulte o link para obter detalhes.

Quando você configurar a configuração sftp no ProFTPd, provavelmente desejará que ela escute em outra porta que não seja ssh , por exemplo 2222. Configure seu firewall e / ou roteador para permitir o tráfego vindo de stranger para o porta que você escolher para o ProFTPd. Outra possibilidade é executar o módulo sftp do ProFTPd na porta 22 e reconfigurar ssh para escutar em outra porta.

Uma configuração de amostra pode ser semelhante a:

<IfModule mod_sftp.c>
  <VirtualHost a.b.c.d>
    # The SFTP configuration
    Port 2222

    SFTPEngine on
    SFTPLog /var/log/proftpd_sftp.log

    # Configure the RSA, DSA, and ECDSA host keys, using the same host key
    # files that OpenSSH uses. 
    SFTPHostKey /etc/ssh_host_rsa_key
    SFTPHostKey /etc/ssh_host_dsa_key
    SFTPHostKey /etc/ssh_host_ecdsa_key

    <Limit READ>
      DenyAll
    </Limit>

    DefaultRoot ~ users,!staff

  </VirtualHost>
</IfModule>

Nota : Esta não é uma configuração completa do ProFTPd, você deve revisar e modificar a configuração padrão do ProFTPd para que ela atenda às suas necessidades.

Existe outra possibilidade de usar apenas o OpenSSH para isso:

Crie o usuário stranger e defina uma senha para o usuário:

useradd -m -d /home/stranger -s /bin/true stranger
passwd stranger

Edite o arquivo /etc/ssh/sshd_config e verifique se a linha a seguir existe, adicione-a se ela não existir:

Subsystem       sftp    internal-sftp

Em seguida, adicione um bloco de correspondência na parte inferior de /etc/ssh/sshd_config :

Match User stranger
    ChrootDirectory  %h
    ForceCommand  internal-sftp -P read,remove
    AllowTcpForwarding no

Observação : o usuário poderá sobrescrever um arquivo existente.

Reinicie o daemon sshd .

Defina o proprietário do diretório /home/stranger to root :

chown root:stranger /home/stranger

Observação : root deve ser o proprietário e pode ser o único a ter permissão de gravação se o ChrootDirectory for usado. Uma alternativa pode ser adicionar -d %u à linha ForceCommand internal-sftp e definir ChrootDirectory /home , mas um usuário poderá cd / e ver outros nomes de usuários com ls

Crie um diretório de upload para o usuário:

mkdir /home/stranger/upload; chown stranger:stranger /home/stranger/upload

Agora você pode fazer logon como usuário stranger usando:

sftp stranger@somehost

Quando você envia um arquivo, ele deve estar ok:

sftp> put myfile
Uploading myfile to /upload/myfile
myfile                               100%   17     0.0KB/s   00:00    
sftp> get myfile
Fetching /upload/myfile to myfile
/upload/myfile                         0%    0     0.0KB/s   --:-- ETA
Couldn't read from remote file "/upload/myfile" : Permission denied
    
por 25.06.2015 / 21:47
1

Pessoalmente, se o objetivo é apenas permitir a cópia de arquivos para o servidor, eu iria a rota do sftp ao invés do scp. scp presume acesso ssh e, se não houver necessidade de fornecer acesso ao shell, é melhor não tentar bloqueá-lo apenas por transferências de arquivos.

Então, sftp. Algumas recomendações Desabilite o FTP normal e, em vez disso, execute algo que permita controlar facilmente o acesso, que você também pode ter em execução em uma porta exclusiva usando o sftp. Acabei de terminar configurado proftpd em um servidor, por exemplo, e faz o trabalho muito bem. Você pode chroot o acesso de modo que os usuários entrem em seu diretório home e não possam navegar em toda a árvore. Você também pode definir quais comandos você permite, por exemplo, desabilitar 'cd' por completo, etc. Você também pode controlar usuários de FTP além de contas * nix, portanto você pode criar essa conta de usuário apenas no contexto de FTP e conta para o usuário.

Além disso (para uma abordagem de cinto e suspensórios) de um nível de sistema operacional, você pode alterar as permissões no diretório inicial dos usuários (onde a sessão SFTP se conectaria) para que eles tenham a capacidade de gravar e não ler (mas novamente , você pode limitar os comandos com um daemon de FTP como o proftpd para que eles também não consigam se conectar.

Eu usei outros servidores ftp no passado (embora os nomes me escapem no momento) e todos parecem oferecer mais controle do que os daemons ftp padrão, então tenho certeza que outros fornecem funcionalidade similar (eu apenas menciono o proftpd como Eu estava apenas trabalhando nisso, não devido a qualquer crença, é a melhor opção).

    
por 25.06.2015 / 21:47