No Ubuntu / Debian, você pode instalar o shell scponly
para restringi-los somente ao scp / sftp. Basta instalar o pacote e alterar seu shell para /usr/bin/scponly
:
sudo aptitude install scponly sudo usermod -s /usr/bin/scponly USERNAME
O problema de espaço em disco provavelmente é melhor resolvido com cotas de sistema de arquivos. Infelizmente, tenho pouca experiência com eles.
Se você quiser se tornar mais chique (restringindo tipos de arquivos e tal), você provavelmente precisará escrever seu próprio script para validar os comandos que estão sendo passados do cliente. O script mais simples seria um script de shell que realiza um teste semelhante a este:
if [[ $SSH_ORIGINAL_COMMAND = "scp -f *txt" ]] then exec $SSH_ORIGINAL_COMMAND fi
Isso permitiria o download de arquivos .txt. Testes rápidos indicam que o nome do arquivo não é passado como parte do comando scp durante o envio. Por isso, pode não ser possível nesse caso.
O script seria definido como o comando forçado para a chave do usuário. (O campo '' command="blah" '' em authorized_keys.) Ele também pode ser configurado como a opção "ForceCommand" para um grupo Match em sshd_config, assim:
Corresponder grupo scponly ForceCommand / usr / local / sbin / scpwrapper
Em seguida, adicione os usuários para ficarem restritos ao grupo "scponly".
EDITAR: Por solicitação, aqui está o script que eu uso para impor o acesso apenas ao rsync:
#!/bin/bash # # Verify that rsync command appears to be a legitimate rsnapshot command. # Requires >= bash 3.x # # Ben Beuchler # 6/4/07 # rsync needs to be operating in "server" mode. re_server='rsync --server' # Match both -x and --word options re_options=' +-{1,2}[[:alpha:]-]+' # Match legal paths re_paths=' +[-[:alnum:]_./]+' # Build the full regex r="^${re_server}(${re_options})+(${re_paths}){2}$" echo $SSH_ORIGINAL_COMMAND >> ssh_log if [[ $SSH_ORIGINAL_COMMAND =~ $r ]] then exec $SSH_ORIGINAL_COMMAND else echo "Invalid rsync command." fi
Use esse script como um comando forçado (por "command=" em ~ / .ssh / authorized_keys ou usando um bloco "Match" em sshd_config como mencionado acima) e ele rejeitará tudo, exceto os comandos rsync. Com um pequeno ajuste, pode ser feito apenas aceitar comandos rsync específicos.