Ogranicz dostęp FTP tylko do / var / www za pomocą vsftpd

41

Używam vsftpd jako serwer ftp na moim systemie Linux (rasbian), loguję się na maszynie jako użytkownik root.

Chciałbym być nadal zablokowany używaniem tylko / var / www, jak mogę skonfigurować vsftpd conf, aby to osiągnąć?

Badr Hari
źródło
1
Sprawdź chroot opcje vsftpd.confi utwórz dla niego osobnego użytkownika, dla którego katalog domowy jest ustawiony na /var/www.
jirib

Odpowiedzi:

65

Metoda 1: Zmiana katalogu domowego użytkownika

Upewnij się, że istnieje następujący wiersz

chroot_local_user=YES

Ustaw katalog HOME użytkownika na /var/www/, jeśli chcesz zmienić istniejącego użytkownika, możesz użyć:

usermod --home /var/www/ username

następnie ustaw wymagane uprawnienia na /var/www/

Metoda 2: Użyj user_sub_token

Jeśli nie chcesz zmieniać katalogu domowego użytkownika, możesz użyć:

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

O user_sub_token:

Automatycznie generuj katalog domowy dla każdego wirtualnego użytkownika na podstawie szablonu. Na przykład, jeśli katalog osobisty rzeczywistego użytkownika podany przez guest_username to / ftphome / $ USER, a user_sub_token jest ustawiony na $ USER, to kiedy zaloguje się test użytkownika wirtualnego, skończy (zwykle chroot () 'ed) w katalog / ftphome / test. Ta opcja ma również wpływ, jeśli lokalny katalog_główny zawiera identyfikator_użytkownika.

Utwórz katalog i skonfiguruj uprawnienia:

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

Po ponownym uruchomieniu vsftpdi przetestuj konfigurację.

Przykładowy wynik sukcesu:

[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
źródło
2
Należy pamiętać, że można mieć przyrostek po $USERza local_root, takie jak /home/$USER/ftp(co chroot użytkowników do ftppodkatalogu swojego domu dir).
Benoit Duffez,
Zwróć uwagę na uwagi w vsftp FAQ dotyczące chrootowania do folderu, w którym użytkownik może się zalogować. Jest to wysoce prawdopodobne w przypadku wprowadzenia local_rootdo rzeczywistego katalogu domowego użytkownika.
Thomas Urban
Gdzie potwierdzić, że istnieje „chroot_local_user = YES”?
The One
4

Możesz to zrobić:

usermod --home /var/www/ username
Zeev Cohen
źródło
5
Odpowiedzi od jednej do dwóch linii są często uważane za niskiej jakości. Zastanów się nad rozszerzeniem swojego wpisu z wyjaśnieniem tego, co robi Twoja rekomendacja, wraz z linkami lub dokumentacją sugerującą zdolność Twojej rekomendacji do rozwiązania problemu.
HalosGhost
2

Użyłem powyższej sugestii Rahula Patila:

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

Ale nie mogłem zrozumieć, dlaczego mogłem zalogować się tylko z jednym użytkownikiem. Potem odkryłem, że nie możemy chrootować do katalogu głównego (w tym przypadku /home/$USER/www-data), który ma dostęp do zapisu. Więc usuwam dostęp do zapisu za pomocą:

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

UWAGA: zmień $USERz użytkownikiem.

Rizal Rahman
źródło
1

Sprawdź chrootopcje vsftpd.confi utwórz dla niego osobnego użytkownika, dla którego katalog domowy jest ustawiony na /var/www.

jirib
źródło
Mam tego świadomość, utworzę osobnego użytkownika. Powinienem może przeprojektować moje pytanie to w jaki sposób mogę ograniczyć użytkownikowi na oddzielnej ścieżce tylko
Badr Hari
Użyj sftp z OpenSSH. Zobacz man sshd_config dla wewnętrznego-sftp, następnie „ForceCommand” i zobacz „ChrootDirectory”. Nowszy OpenSSH dodał także opcję przełączania się serwera na sftp na określoną ścieżkę, więc w połączeniu z ChrootDirectory możesz: chroot -> / path -> destination -> 'onlyhere' = / chroot / onlyhere
jirib