Limite o acesso ao FTP apenas para o / var / www com vsftpd

41

Estou executando o vsftpd como servidor ftp no meu linux (rasbian), faço logon na máquina como um usuário root.

Eu gostaria de continuar usando apenas / var / www, como posso configurar o vsftpd conf para fazer isso?

Badr Hari
fonte
11
Marque as chroot opções vsftpd.confe crie um usuário separado para o qual o homedir esteja definido como /var/www.
jirib

Respostas:

65

Método 1: alterando o diretório inicial do usuário

Verifique se a seguinte linha existe

chroot_local_user=YES

Defina o diretório HOME do usuário como /var/www/, se você desejar alterar para o usuário existente, poderá usar:

usermod --home /var/www/ username

defina a permissão necessária em /var/www/

Método 2: Usar user_sub_token

Se você não deseja alterar o diretório inicial do usuário, pode usar:

chroot_local_user=YES
local_root=/ftphome/$USER
user_sub_token=$USER

Sobre user_sub_token:

Gere automaticamente um diretório inicial para cada usuário virtual, com base em um modelo. Por exemplo, se o diretório inicial do usuário real especificado via guest_username for / ftphome / $ USER e user_sub_token estiver definido como $ USER, quando o teste do usuário virtual fizer login, ele terminará (geralmente chroot () 'ed) em o diretório / ftphome / test. Esta opção também afeta se local_root contiver user_sub_token.

Crie um diretório e configure permissões:

mkdir -p /ftphome/{test,user1,user2}
chmod 770 -R /ftphome
chown -R ftp. /ftphome
usermod -G ftp test

Depois de reiniciar vsftpde testar sua configuração.

Exemplo de saída de sucesso:

[root@mail tmp]# ftp localhost
Connected to mail.linuxian.local.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mput vhosts
mput vhosts? 
227 Entering Passive Mode (127,0,0,1,146,41)
150 Ok to send data.
226 File receive OK.
24 bytes sent in 3.3e-05 seconds (7.1e+02 Kbytes/s)
ftp> ls -rlt
227 Entering Passive Mode (127,0,0,1,97,90)
150 Here comes the directory listing.
-rw-r--r--    1 787      787            24 Oct 11 19:57 vhosts
226 Directory send OK.
ftp> 221 Goodbye.
Rahul Patil
fonte
2
Observe que você pode ter um sufixo depois de $USERfor local_root, como /home/$USER/ftp(que fará o chroot dos usuários no ftpsubdiretório do diretório inicial).
Benoit Duffez 17/08/2015
Comentários Observação em Vsftp FAQ sobre chroot para pasta gravável pela exploração madeireira usuário. Este é altamente provável no caso de colocar local_rootem diretório home real do usuário.
Thomas Urban
Onde confirmar que "chroot_local_user = YES" existe?
A One
4

Você consegue fazer isso:

usermod --home /var/www/ username
Zeev Cohen
fonte
5
As respostas de uma a duas linhas geralmente são consideradas de baixa qualidade. Considere expandir sua postagem com algumas explicações sobre o que sua recomendação faz, além de links ou documentação que sugerem a capacidade de sua recomendação de realmente resolver o problema.
HalosGhost
2

Usei a sugestão de Rahul Patil acima:

chroot_local_user=YES
local_root=/home/$USER/www-data
user_sub_token=$USER

Mas não conseguia entender por que consegui fazer login apenas com um usuário. Então, descobri que não era possível executar o chroot em um diretório raiz (neste caso /home/$USER/www-data) que tivesse acesso de gravação. Então, removo o acesso de gravação com:

# chmod a-w /home/$USER/www-data

NOTA: mude $USERcom seu usuário.

Rizal Rahman
fonte
1

Marque as chrootopções vsftpd.confe crie um usuário separado para o qual o homedir esteja definido como /var/www.

jirib
fonte
Estou ciente disso, vou criar um usuário separado. Eu deveria talvez reformular a minha pergunta, então como posso limitar um utilizador a caminho separado única
Badr Hari
Use sftp do OpenSSH. Veja man sshd_config para internal-sftp, depois 'ForceCommand' e veja 'ChrootDirectory'. Mais recente OpenSSH também acrescentou opção para sftp-servidor para mudar para um caminho específico, para que em combinação com ChrootDirectory você pode fazer: chroot -> / path -> destino -> 'onlyhere' = / chroot / onlyhere
jirib