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