Jak skonfigurować wirtualnych użytkowników dla vsftpd z dostępem do określonego podkatalogu?

24

Muszę być w stanie dodać wirtualnych użytkowników do vsftpd, którzy mają dostęp tylko do podfolderu. Powodem, dla którego chcę korzystać z wirtualnych użytkowników jest to, że chcę mieć tylko 1 prawdziwego użytkownika na serwerze.

Struktura FTP to:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

Konto główne ma dostęp do folderu www i wszystkich podkatalogów i chcę dodać wirtualnego użytkownika, który może mieć dostęp do podkatalogu 1 i tylko podkatalogu 1

Również, aby uniknąć pewnych nieporozumień, wymagałbym również innego użytkownika, aby uzyskać dostęp do sub_folder3 i tylko sub_folder3 . Chodzi mi o to, że muszę być w stanie wybrać, który folder i podfoldery użytkownika według użytkowników.

Znalazłem sposoby dodawania użytkowników, aby zobaczyć całe foldery Strucutre lub konfigurować nazwy użytkowników, z których oba nie mają dla mnie żadnego zastosowania.

Znalazłem podobne pytanie zamieszczone tutaj:

Jak skonfigurować VSFTPD dla wielu użytkowników, w tym dodając określone katalogi

ale zaleca, proftpdco moim zdaniem było ogólnie mniej bezpieczne.
A może przegapiłem tutaj punkt?

Avenyet
źródło
Najdłużej miałem problem z uwierzytelnianiem, dopóki nie znalazłem tego serverfault.com/questions/450214/... Najwyraźniej PAM ma problemy z skrótem MD5. Ten przewodnik rozwiązuje ten problem.

Odpowiedzi:

31

Przy odrobinie zabawy udało mi się znaleźć pół-rozwiązanie (nie idealne, ale wystarczająco dobre)

używając 2707974 odpowiedzi i informacji, które zdobyłem, gdzie udało mi się zdobyć to, czego potrzebuję.

Najpierw musisz zainstalować vsftp i PAM

apt-get install vsftpd libpam-pwdfile

Edytuj /etc/vsftpd.conf

nano /etc/vsftpd.conf

następnie wklej następujące

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

Najważniejsze dla użytkowników wirtualnych jest edytowanie dokładnie tych potrzeb, które są najważniejsze po komentarzu ustawień użytkownika wirtualnego

Tworzenie użytkownika

Możesz albo skorzystać z bazy danych, albo htpasswdznalazłem htpasswdszybciej i łatwiej.

utwórz katalog do przechowywania użytkowników

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

dodając dodatkowych użytkowników po prostu pomiń -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

Udało mi się tylko uruchomić go za pomocą CRYPT, który ogranicza się do 8 znaków, aby użyć więcej niż 8 znaków, użyj openssl do wygenerowania zgodnego skrótu i ​​potoku bezpośrednio do htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

Po utworzeniu użytkowników możesz teraz zmienić plik konfiguracyjny PAM

nano /etc/pam.d/vsftpd

i usuń wszystko z tego pliku i zamień na następujące

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

Umożliwi to logowanie się do użytkowników wirtualnych zdefiniowanych w /etc/vsftpd/ftpd.passwdi wyłącza lokalnych użytkowników

Następnie musimy dodać użytkownika, z którego będą mogli korzystać użytkownicy wirtualni. Ci użytkownicy nie będą mieli dostępu do powłoki i będą wywoływanivsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

użytkownik musi pasować guest_username=vsftpddo pliku conf vsftpd

Definiowanie dostępu do katalogu

Ważna linia tutaj jest następująca

user_config_dir=/etc/vsftpd_user_conf

oznacza to, że po user1zalogowaniu będzie szukać następującego pliku

/etc/vsftpd_user_conf/user1

ten plik jest taki sam jak ten, vsftpd.confwięc możesz zdefiniować nowylocal_root

wracając do pytania, do którego chcemy user1mieć dostęp var/www/website_name1/sub_folder1, więc musimy utworzyć vsftpd_user_conffolder:

mkdir /etc/vsftpd_user_conf

Teraz utwórz plik użytkownika:

nano /etc/vsftpd_user_conf/user1

i wprowadź następujący wiersz

local_root=/var/www/website_name1/sub_folder1

Teraz uruchom ponownie vsftp

service vsftpd restart

powinieneś być teraz w stanie zalogować się jako użytkownik1, który będzie mógł widzieć tylko var/www/website_name1/sub_folder1każdy folder i plik w nim umieszczony.

Możesz teraz dodać dowolną liczbę użytkowników i ograniczyć ich dostęp do dowolnego folderu.

ważne, aby pamiętać, że jeśli nie utworzysz pliku conf użytkownika, domyślnie będzie to folder var / www jako root (w powyższym przykładzie)

Jeśli podfolder ma być modyfikowany przez użytkownika, konieczna może być zmiana właściciela udostępnionego podfolderu:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1
Avenyet
źródło
Działa to z pewnymi modyfikacjami: 1) Użyj ścieżek bezwzględnych (zamień ścieżki zaczynające się na „var /” na „/ var”. 2) vsftpd 2.3.5, który jest w Ubuntu 12.04 nie obsługuje opcji allow_writeable_chroot, możesz to rozwiązać, instalując łatkę vsftpd .
gadelat
Witaj, z hasłem ssl ponownie pomijamy -c z -d czy po prostu -c? Również w drugiej uwadze, czy po prostu ponownie uruchamiamy zapytanie, aby zmienić hasło? czy jest inna metoda. Dzięki
mdixon18,
Dlaczego musisz utworzyć katalog domowy z useradd --home? jest to konieczne?
e-info128
1
Dodatkowo: włącz bezpieczne połączenia TLS. digitalocean.com/community/tutorials/…
e-info128
1
apache2-utils może być wymagany w przypadku niektórych instalacji, których nie uwzględniłem w odpowiedziach, ponieważ nie dotyczy on wszystkich.
Avenyet
12

Wypróbuj ten podręcznik. Może zadziała dla Ciebie.

Jak to zrobić

Zainstaluj vsftpd i bibliotekę PAM

Edytuj /etc/vsftpd.confi/etc/pam.d/vsftpd

Twórz konta użytkowników za pomocą niestandardowych katalogów (na przykład w / var / www /)

Ustaw katalogi z poprawnymi chmodichown

Utwórz użytkownika administratora z pełnym dostępem do serwera

  1. Zainstaluj vsftpd(Very Secure FTP Deamon) i libpam-pwdfileutwórz wirtualnych użytkowników

Chciałem stworzyć użytkowników FTP, ale nie chciałem dodawać lokalnych użytkowników unixa (brak dostępu do powłoki, brak katalogu domowego i tak dalej). PAM (Pluggable Authentication Modules) pomoże Ci stworzyć wirtualnych użytkowników.

sudo apt-get install vsftpd libpam-pwdfile

  1. Edytować vsftpd.conf

Najpierw musisz wykonać kopię zapasową oryginalnego pliku

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

Następnie utwórz nowy

sudo vim /etc/vsftpd.conf

Skopiuj i wklej następujące linie. Plik powinien zawierać TYLKO następujące wiersze:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. Zarejestruj wirtualnych użytkowników

Aby zarejestrować użytkownika, którego używasz htpasswd, zakładam, że apache2pracujesz na swoim serwerze. Utwórz vsftpdfolder, a następnie umieść w nim pliki konfiguracyjne.

sudo mkdir /etc/vsftpd

następnie

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c oznacza, że ​​utworzymy plik, jeśli jeszcze nie istnieje -d wymusza MD5, potrzebujesz go na Ubuntu 12.04, po prostu używaj go zawsze

Polecenie wyświetli monit o podanie hasła.

Jeśli chcesz później dodać nowych użytkowników:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. Skonfiguruj PAM w /etc/pam.d/vsftpd

Ponownie musisz wykonać kopię zapasową pliku orignal

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

i stwórz nowy

sudo vim /etc/pam.d/vsftpd

Skopiuj i wklej te 2 wiersze (powinna to być jedyna treść). Nalegam tylko na te 2 wiersze, traciłem dużo czasu na przechowywanie oryginałów i właśnie je dodałem.

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. Utwórz lokalnego użytkownika bez dostępu do powłoki

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Możesz sprawdzić, czy został utworzony za pomocą komendy id: id vsftpd. Definiujemy użytkownika za pomocą powłoki / bin / false ze względu na parametr check_shell (nawet jeśli go nie używasz). Gdy użytkownik końcowy połączy się z serwerem FTP, zostaną wykorzystane do uzyskania praw i własności:

chmoda chown.

  1. Uruchom ponownie vsftpd

Popularnym sposobem jest używanie init.d jak wszystkich deamon

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. Twórz katalogi

Zgodnie z konfiguracją wszyscy użytkownicy zostaną umieszczeni w tym folderze: / var / www / user1.

Musisz je utworzyć z określonymi uprawnieniami: folder główny nie może być zapisywalny!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

Uwaga: użytkownik nie może tworzyć plików ani folderów w katalogu głównym.

W vsftpd.confmamy chroot_local_user=YESwięc użytkownik nie widzi nic poza swoim folderze. Dla niego serwer wygląda tak:

Więc po prostu uruchom następujące polecenia:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1Folder musi istnieć lub połączenie nie powiedzie się.

W tej chwili możesz spróbować połączyć się z FTP

  1. Utwórz użytkownika administracyjnego, aby uzyskać dostęp do całego serwera

Aby utworzyć administratora, musimy zarejestrować nowego użytkownika htpasswd.

Zanim to zrobimy, radzę sprawdzić w /etc/ftpuserspliku, który definiuje niektórych użytkowników, którzy nie mogą łączyć się z ftp. Myślę, że jest to tylko dla użytkowników lokalnych, a nie użytkowników wirtualnych, ale na wszelki wypadek nie wybieraj nazwy zawartej w tym pliku.

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

Teraz musimy dodać nową linię do /etc/vsftpd.conf

chroot_list_enable=YES

Oznacza to, że użytkownik zostanie umieszczony w swoim folderze (jako więzienie) Z WYJĄTKIEM użytkowników w / etc /

vsftpd.chroot_list

Utwórzmy ten plik i dodajmy naszego użytkownika, plik jest prostą linią zawierającą „theadmin”. Dodaj jednego użytkownika w wierszu. Oznacza to, że NIE musisz tworzyć /var/www/theadminfolderu, użytkownik zaloguje się i rozpocznie pracę /home/vsftpd.

Uruchom ponownie serwer i gotowe!

2707974
źródło
Próbowałem tego już bardzo nieelastyczny, ponieważ wymusza local_root = / var / www / $ USER. Nie pozwala mi określić jednego katalogu dla użytkownika lub użytkowników. ten katalog zwykle ma inny cel i lokalizację w zależności od klienta. Dzięki za odpowiedź.
Avenyet,
0

tak, możesz i dla elastyczności utwórz katalog i plik userconfig mkdir /var/www/userconfslub cokolwiek, na co chcesz zmienić nazwę userconfs, a następnie utwórz określony plik

vi /var/www/userconfigs/ftpuseraccount

type inside, local_root=/var/www(lub cokolwiek, do czego chcesz uzyskać dostęp przez dir) guest_username=www-data(właściciel ubuntu edycji pliku u góry

po aktualizacji dodajesz plik vsftpd.conf user_config_dir=/var/www/userconfigs(lub cokolwiek, co zastąpiłeś, ponieważ to konto uzyska dostęp do podanego sdir yo)

Agunbiade Bolaji
źródło