Konfigurowanie FTP na serwerze Amazon Cloud [zamknięte]

257

Próbuję skonfigurować FTP na Amazon Cloud Server, ale bez powodzenia. Przeszukuję sieć i nie ma konkretnych kroków, jak to zrobić.

Znalazłem te polecenia do uruchomienia:

$ yum install vsftpd
$ ec2-authorize default -p 20-21
$ ec2-authorize default -p 1024-1048
$ vi /etc/vsftpd/vsftpd.conf
#<em>---Add following lines at the end of file---</em>
    pasv_enable=YES
    pasv_min_port=1024
    pasv_max_port=1048
    pasv_address=<Public IP of your instance>
$ /etc/init.d/vsftpd restart

Ale nie wiem, gdzie je napisać.

SharkTheDark
źródło
10
To pytanie należy przenieść na serverfault.com.
Jérôme Verstrynge

Odpowiedzi:

570

Jaminto wykonał świetną robotę, odpowiadając na pytanie, ale ostatnio sam to przeszedłem i chciałem rozwinąć odpowiedź Jaminto.

Zakładam, że masz już utworzoną instancję EC2 i przypisałeś do niej elastyczny adres IP.


Krok # 1: Zainstaluj vsftpd

SSH do twojego serwera EC2. Rodzaj:

> sudo yum install vsftpd

To powinno zainstalować vsftpd.

Krok # 2: Otwórz porty FTP w instancji EC2

Następnie musisz otworzyć porty FTP na serwerze EC2. Zaloguj się do konsoli zarządzania AWS EC2 i wybierz Grupy bezpieczeństwa z drzewa nawigacji po lewej stronie. Wybierz grupę zabezpieczeń przypisaną do instancji EC2. Następnie wybierz kartę Przychodzące, a następnie kliknij Edytuj:

wprowadź opis zdjęcia tutaj

Dodaj dwie niestandardowe reguły TCP z zakresami portów 20–21 i 1024–1048. W polu Źródło możesz wybrać opcję „Anywhere”. Jeśli zdecydujesz się ustawić Source na własny adres IP, pamiętaj, że twój adres IP może się zmienić, jeśli zostanie przypisany przez DHCP.

wprowadź opis zdjęcia tutaj



Krok # 3: Zaktualizuj plik vsftpd.conf

Edytuj plik conf vsftpd, wpisując:

> sudo vi /etc/vsftpd/vsftpd.conf

Wyłącz anonimowy FTP, zmieniając ten wiersz:

anonymous_enable=YES

do

anonymous_enable=NO

Następnie dodaj następujące wiersze na dole pliku vsftpd.conf:

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=<Public IP of your instance> 

Twój plik vsftpd.conf powinien wyglądać mniej więcej tak: pamiętaj, aby zastąpić adres pasv_adres swoim publicznym adresem IP:

wprowadź opis zdjęcia tutaj

Aby zapisać zmiany, naciśnij klawisz Escape, następnie wpisz :wq, a następnie naciśnij klawisz Enter.



Krok # 4: Uruchom ponownie vsftpd

Uruchom ponownie vsftpd, wpisując:

> sudo /etc/init.d/vsftpd restart

Powinieneś zobaczyć komunikat, który wygląda następująco:

wprowadź opis zdjęcia tutaj


Jeśli to nie zadziała, spróbuj:

> sudo /sbin/service vsftpd restart



Krok # 5: Utwórz użytkownika FTP

Jeśli spojrzysz na / etc / vsftpd / user_list, zobaczysz następujące informacje:

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

To w zasadzie mówi: „Nie zezwalaj tym użytkownikom na dostęp FTP”. vsftpd pozwoli na dostęp FTP każdemu użytkownikowi spoza tej listy.

Dlatego w celu utworzenia nowego konta FTP może być konieczne utworzenie nowego użytkownika na serwerze. (Lub, jeśli masz już konto użytkownika, którego nie ma na liście / etc / vsftpd / user_list, możesz przejść do następnego kroku.)

Utworzenie nowego użytkownika w instancji EC2 jest dość proste. Na przykład, aby utworzyć użytkownika „bret”, wpisz:

> sudo adduser bret
> sudo passwd bret

Oto jak to będzie wyglądać:

wprowadź opis zdjęcia tutaj



Krok # 6: Ograniczanie użytkowników do ich katalogów domowych

W tym momencie użytkownicy FTP nie są ograniczeni do swoich katalogów domowych. To nie jest bardzo bezpieczne, ale możemy to łatwo naprawić.

Zmodyfikuj ponownie plik conf vsftpd, wpisując:

> sudo vi /etc/vsftpd/vsftpd.conf

Cofnij komentarz:

chroot_local_user=YES

Po zakończeniu powinno wyglądać tak:

wprowadź opis zdjęcia tutaj

Uruchom ponownie serwer vsftpd w następujący sposób:

> sudo /etc/init.d/vsftpd restart

Wszystko gotowe!


Dodatek A: Przeżycie ponownego uruchomienia

vsftpd nie uruchamia się automatycznie po uruchomieniu serwera. Jeśli jesteś podobny do mnie, oznacza to, że po ponownym uruchomieniu instancji EC2 poczujesz chwilę przerażenia, gdy FTP wydaje się być zepsuty - ale w rzeczywistości po prostu nie działa !. Oto przydatny sposób, aby to naprawić:

> sudo chkconfig --level 345 vsftpd on

Alternatywnie, jeśli używasz redhat, innym sposobem zarządzania swoimi usługami jest użycie tego sprytnego graficznego interfejsu użytkownika do kontrolowania, które usługi powinny się automatycznie uruchamiać:

>  sudo ntsysv

wprowadź opis zdjęcia tutaj

Teraz vsftpd uruchomi się automatycznie po uruchomieniu serwera.


Dodatek B: Zmiana katalogu domowego FTP użytkownika

* UWAGA: Iman Sedighi opublikował bardziej eleganckie rozwiązanie ograniczające dostęp użytkowników do określonego katalogu. Proszę odnieść się do jego doskonałego rozwiązania opublikowanego jako odpowiedź *

Możesz utworzyć użytkownika i ograniczyć jego dostęp FTP do określonego folderu, takiego jak / var / www. Aby to zrobić, musisz zmienić domyślny katalog domowy użytkownika:

> sudo usermod -d /var/www/ username

W tym konkretnym przykładzie typowe jest udzielanie użytkownikom uprawnień do grupy „www”, która często jest powiązana z folderem / var / www:

> sudo usermod -a -G www username
klon45
źródło
3
W step 3jaki sposób mogę zapisać po dodaniu wierszy do pliku?
Sumit Bijvani
2
ok wszystko gotowe, teraz jak mogę połączyć się z ftp?
Sumit Bijvani
7
Cześć Sumit. Vi to podstępny edytor. Aby zapisać swoją pracę, wpisz Escape, następnie „: wq” (bez cudzysłowów), a następnie naciśnij Enter. Jeśli chodzi o FTP, trudno jest odpowiedzieć, ponieważ będzie on oparty na kliencie FTP. Jeśli będę miał czas, postaram się dołączyć do mojej instrukcji kilka instrukcji konfigurowania popularnych klientów FTP. Osobiście korzystam z Aptana Studio. W Aptana tworzysz witrynę SFTP i dostarczasz Aptana plik uwierzytelniania klucza publicznego, który otrzymałeś po utworzeniu instancji EC2. Jeśli używasz filezilla, spróbuj użyć pageant.exe. Twoje zdrowie!
klon 45
6
To jest wspaniałe. Bardzo czyste. Dziękuję Ci bardzo.
AC Patrice
11
Właściwie może mógłby mi to przypisać. Odparł moją odpowiedź 13 stycznia.
klon45
27

Aby włączyć pasywne ftp na serwerze EC2, musisz skonfigurować porty, których serwer ftp powinien używać do połączeń przychodzących, a następnie otworzyć listę dostępnych portów dla połączeń danych klienta ftp.

Nie jestem zaznajomiony z Linuksem, ale opublikowane polecenia to kroki, aby zainstalować serwer ftp, skonfigurować reguły zapory ec2 (za pośrednictwem interfejsu API AWS), a następnie skonfigurować serwer ftp, aby korzystał z portów dozwolonych w zaporze ec2 .

Więc ten krok instaluje klienta ftp (VSFTP)

> yum install vsftpd

Te kroki konfigurują klienta ftp

> vi /etc/vsftpd/vsftpd.conf
--    Add following lines at the end of file --
     pasv_enable=YES
     pasv_min_port=1024
     pasv_max_port=1048
     pasv_address=<Public IP of your instance> 
> /etc/init.d/vsftpd restart

ale pozostałe dwa kroki są łatwiejsze do wykonania za pośrednictwem konsoli Amazon w ramach grup zabezpieczeń EC2. Tam należy skonfigurować grupę zabezpieczeń przypisaną do serwera, aby zezwalać na połączenia na portach 20, 21 i 1024-1048

jaminto
źródło
Wiem, co oznaczają te wiersze, ale nie wiem, gdzie je wpisać ... To jest problem ...
SharkTheDark
1
w wierszu poleceń na serwerze, na którym instalujesz serwer ftp?
jaminto
2
Połącz się ze swoim serwerem za pośrednictwem SSH: blog.taggesell.de/index.php?/archives/…
jaminto
W przypadku, gdy nadal pojawia się błąd (500 OOPS: vsftpd: odmowa uruchomienia z zapisywalnym rootem w chroot ()), to naprawiło problem: benscobie.com/...
kaore
Jestem zszokowany, że anonimowy FTP jest domyślnie WŁĄCZONY!
jeffkee
16

Dzięki @ clone45 za fajne rozwiązanie. Ale miałem tylko jeden ważny problem z Załącznikiem b jego rozwiązania. Natychmiast po zmianie katalogu domowego na var / www / html nie mogłem połączyć się z serwerem przez ssh i sftp, ponieważ zawsze pokazuje następujące błędy

permission denied (public key)

lub w FileZilla otrzymałem ten błąd:

No supported authentication methods available (server: public key)

Ale mogłem uzyskać dostęp do serwera przez normalne połączenie FTP.

Jeśli napotkałeś ten sam błąd, po prostu cofnij dodatek b rozwiązania @ clone45, ustawiając domyślny katalog domowy użytkownika:

sudo usermod -d /home/username/ username

Ale po ustawieniu domyślnego katalogu domowego użytkownika użytkownik ma dostęp do wielu innych folderów poza / var / www / http. Aby zabezpieczyć serwer, wykonaj następujące kroki:

1- Stwórz grupę sftponly Stwórz grupę dla wszystkich użytkowników, których chcesz ograniczyć dostęp tylko do ftp i sftp do var / www / html. aby utworzyć grupę:

sudo groupadd sftponly

2- Więzienie chroota Aby ograniczyć dostęp tej grupy do serwera za pośrednictwem sftp, musisz uwięzić chroota, aby nie pozwolić użytkownikom grupy na dostęp do żadnego folderu z wyjątkiem folderu HTML w jego katalogu domowym. aby to zrobić otwórz /etc/ssh/sshd.config w vimie z sudo. Na końcu pliku skomentuj ten wiersz:

Subsystem sftp /usr/libexec/openssh/sftp-server

A następnie dodaj ten wiersz poniżej:

Subsystem sftp internal-sftp

Więc zastąpiliśmy podsystem wewnętrznym sftp. Następnie dodaj następujące wiersze poniżej:

 Match Group sftponly
        ChrootDirectory /var/www
        ForceCommand internal-sftp
        AllowTcpForwarding no

Po dodaniu tego wiersza zapisałem moje zmiany, a następnie ponownie uruchomiłem usługę ssh poprzez:

sudo service sshd restart

3- Dodaj użytkownika do grupy sftponly Każdy użytkownik, którego chcesz ograniczyć dostęp, musi być członkiem grupy sftponly. Dlatego dołączamy do sftponly przez: sudo usermod -G sftponly nazwa użytkownika

4- Ogranicz dostęp użytkownika do tylko var / www / html Aby ograniczyć dostęp użytkownika do folderu var / www / html, musimy utworzyć katalog w katalogu domowym (o nazwie „html”) tego użytkownika, a następnie zamontować / var / www do / home / nazwa użytkownika / html w następujący sposób:

sudo mkdir /home/username/html
sudo mount --bind /var/www /home/username/html

5- Ustaw dostęp do zapisu Jeśli użytkownik potrzebuje dostępu do zapisu do / var / www / html, musisz uwięzić użytkownika w / var / www, który musi mieć uprawnienia root: root i uprawnienia 755. Następnie musisz dać / var / www / html własność root: sftponly i uprawnienia 775 przez dodanie następujących wierszy:

sudo chmod 755 /var/www
sudo chown root:root /var/www
sudo chmod 775 /var/www/html
sudo chown root:www /var/www/html

6- Zablokuj dostęp do powłoki Jeśli chcesz ograniczyć dostęp, aby nie mieć dostępu do powłoki, aby była bardziej bezpieczna, po prostu zmień domyślną powłokę na bin / false w następujący sposób:

sudo usermod -s /bin/false username
Iman Sedighi
źródło
na twój sudo mount --bind /var/www /home/username/htmlotrzymuję informację, że nie ma folderu www. Zakładam, że odbywa się to z poziomu katalogu głównego (gdzie znajduje się folder / home)?
elliotrock
1
sudo chown root:www /var/www/htmlstwierdza chown: niepoprawna grupa: 'root: www'
elliotrock
2
Część 6 powinna być lepsza sudo usermod -s /sbin/nologin usernamez powodu domyślnych ograniczeń powłoki pam modułu vsftpd (i w moim przypadku wydaje się, że działa to lepiej). I część 4 mountmusi być wykonywana przy każdym ponownym uruchomieniu, więc dobrym pomysłem jest umieszczenie go w rc.local.
phy25,
11

Świetny artykuł ... działał jak wiatr na Amazon Linux AMI.

Dwa kolejne przydatne polecenia:

Aby zmienić domyślny folder przesyłania FTP

Krok 1:

edit /etc/vsftpd/vsftpd.conf

Krok 2: Utwórz nowy wpis na dole strony:

local_root=/var/www/html

Aby zastosować odczyt, zapis, usuń uprawnienia do plików w folderze, aby móc zarządzać za pomocą urządzenia FTP

find /var/www/html -type d -exec chmod 777 {} \;
Ravi Shanker
źródło
11
który przeskakuje do każdego pliku i folderu na 777, co nie jest bezpieczne dla strony internetowej
sergiogx
DOBRZE. Jakie zmiany sugerujesz w tej sprawie?
Ravi Shanker
3
Powinieneś przypisać potrzebne uprawnienia, nie tylko otwieraj wszystkie uprawnienia do wszystkiego, albo prosisz o kłopoty. Na przykład użycie chmod -R ug + rw / var / www / html przyznaje uprawnienia do odczytu i zapisu dla użytkownika i grupy do wszystkich plików bez przyznawania niepotrzebnych uprawnień do wykonywania i uprawnień innym. Następnie odpowiednio skonfiguruj użytkowników i grupy, aby nie trzeba było modyfikować innych. To znaczy, jeśli użytkownik ftp może czytać i zapisywać wszystkie pliki, a serwer WWW może odczytać, że jesteś ustawiony. Umieść obu użytkowników w tej samej grupie i dodaj rw do użytkownika oraz r do grupy.
AaronM
Powinieneś zastosować 775 do / var / www / html. pozostałe podfoldery i pliki mogą uzyskać uprawnienia zgodnie z potrzebą. 777 jest bardzo niebezpieczny.
Iman Sedighi
6

Jeśli masz włączone ufw, pamiętaj o dodaniu ftp:

> sudo ufw allow ftp

Zrozumienie, że włączyłem ufw, zajęło mi 2 dni.

chbong
źródło
lub iptables, lub ... tak, ja też zawsze zapominam!
jsh
6

Nie będzie dobrze, dopóki nie dodasz użytkownika do grupy www za pomocą następujących poleceń:

sudo usermod -a -G www <USER>

To rozwiązuje problem z uprawnieniami.

Ustaw domyślną ścieżkę, dodając to:

local_root=/var/www/html
użytkownik1802434
źródło
4

Nie zapomnij zaktualizować zapory iptables, jeśli masz taką, która pozwala na zakresy 20–21 i 1024–1048.

Zrób to z / etc / sysconfig / iptables

Dodanie takich wierszy:

-A WEJŚCIE -m stan - stan NOWY -m tcp -p tcp - port 20:21 -j AKCEPTUJ

-A WEJŚCIE -m stan - stan NOWY -m tcp -p tcp --port 1024: 1048 -j AKCEPTUJ

Uruchom ponownie iptables za pomocą polecenia:

usługa sudo iptables uruchomi się ponownie

Kevin Meek
źródło
4

Uprościłem klon 45 kroków:

Otwórz porty, jak wspomniał

sudo su
sudo yum install vsftpd
echo -n "Public IP of your instance: " && read publicip
echo -e "anonymous_enable=NO\npasv_enable=YES\npasv_min_port=1024\npasv_max_port=1048\npasv_address=$publicip\nchroot_local_user=YES" >> /etc/vsftpd/vsftpd.conf
sudo /etc/init.d/vsftpd restart
Willem Bressers
źródło
2

Postępowałem zgodnie z odpowiedzią clone45 aż do końca. Świetny artykuł! Ponieważ potrzebowałem dostępu FTP, aby zainstalować wtyczki na jednej z moich stron Wordpress, zmieniłem katalog domowy na / var / www / mysitename. Następnie kontynuowałem dodawanie mojego użytkownika ftp do grupy apache (lub www) w następujący sposób:

sudo usermod -a -G apache myftpuser

Po tym nadal widziałem ten błąd na stronie instalacyjnej wtyczki WP: „Nie można znaleźć katalogu zawartości WordPress (wp-content)”. Przeszukałem i znalazłem to rozwiązanie podczas sesji pytań i odpowiedzi wp.org: https://wordpress.org/support/topic/unable-to-locate-wordpress-content-directory-wp-content i dodałem następujące informacje na końcu wp- config.php:

if(is_admin()) {
    add_filter('filesystem_method', create_function('$a', 'return "direct";' ));
    define( 'FS_CHMOD_DIR', 0751 );
}

Następnie moja wtyczka WP została pomyślnie zainstalowana.

CodeBrew
źródło
0

może warto wspomnieć oprócz odpowiedzi clone45 :

Naprawianie uprawnień do zapisu dla chrootowanych użytkowników FTP w vsftpd

Wersja vsftpd dostarczana z Ubuntu 12.04 Precise nie pozwala domyślnie chrootowanym użytkownikom na pisanie. Domyślnie będziesz mieć to w /etc/vsftpd.conf :

chroot_local_user=YES
write_enable=YES

Aby umożliwić lokalnym użytkownikom pisanie, musisz dodać następujący parametr:

allow_writeable_chroot=YES

Uwaga: problemy z uprawnieniami do zapisu mogą być wyświetlane jako następujące błędy FileZilla :

Error: GnuTLS error -15: An unexpected TLS packet was received.
Error: Could not connect to server

Odnośniki:
Naprawianie uprawnień do zapisu dla chrootowanych użytkowników FTP w vsftpd
VSFTPd przestało działać po aktualizacji

Hartmut
źródło
0

W przypadku otrzymania nieprawidłowego hasła 530

Potrzebny jest jeszcze 1 krok

w pliku / etc / shells

Dodaj następujący wiersz

/ bin / false

Varun Bhatia
źródło
-2

FileZila jest dobrym narzędziem FTP do konfiguracji z Amazon Cloud.

  1. Pobierz klienta FileZila z https://filezilla-project.org/
  2. Kliknij Plik -> Menedżer witryny ->
  3. Nowa strona
  4. Podaj nazwę hosta Adres IP swojej lokalizacji w chmurze amazonu (Port, jeśli istnieje)
  5. Protokół - SFTP (może ulec zmianie w zależności od wymagań)
  6. Typ logowania - normalny (system nie będzie pytał o hasło za każdym razem)
  7. Podaj nazwę użytkownika i hasło.
  8. Połączyć.

Musisz wykonać te kroki tylko 1 raz, później prześle zawartość na ten sam adres IP i tę samą stronę.

Pratima
źródło