Настройка FTP на Amazon Cloud Server [закрыто]

257

Я пытаюсь настроить FTP на Amazon Cloud Server, но безуспешно. Я ищу по сети, и нет конкретных шагов, как это сделать.

Я нашел эти команды для запуска:

$ 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

Но я не знаю, где их написать.

SharkTheDark
источник
10
Этот вопрос следует перенести на serverfault.com.
Жером Верстринг

Ответы:

570

Jaminto отлично справился с ответом на вопрос, но недавно я сам прошел через этот процесс и хотел бы расширить ответ Jaminto.

Я предполагаю, что вы уже создали экземпляр EC2 и связали с ним Elastic IP Address.


Шаг № 1: Установите vsftpd

SSH к вашему серверу EC2. Тип:

> sudo yum install vsftpd

Это должно установить vsftpd.

Шаг № 2: Откройте порты FTP на вашем экземпляре EC2

Затем вам нужно открыть порты FTP на вашем сервере EC2. Войдите в консоль управления AWS EC2 и выберите «Группы безопасности» в дереве навигации слева. Выберите группу безопасности, назначенную вашему экземпляру EC2. Затем выберите вкладку «Входящие» и нажмите «Изменить»:

введите описание изображения здесь

Добавьте два пользовательских правила TCP с диапазонами портов 20-21 и 1024-1048. В качестве источника вы можете выбрать «Где угодно». Если вы решите установить для Source свой собственный IP-адрес, имейте в виду, что ваш IP-адрес может измениться, если он назначается через DHCP.

введите описание изображения здесь



Шаг № 3: Обновите файл vsftpd.conf

Отредактируйте ваш файл конфигурации vsftpd, набрав:

> sudo vi /etc/vsftpd/vsftpd.conf

Отключите анонимный FTP, изменив эту строку:

anonymous_enable=YES

в

anonymous_enable=NO

Затем добавьте следующие строки в конец файла vsftpd.conf:

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

Ваш файл vsftpd.conf должен выглядеть примерно так, за исключением того, что обязательно замените pasv_address на ваш публичный IP-адрес:

введите описание изображения здесь

Чтобы сохранить изменения, нажмите Escape, затем введите :wq, затем нажмите Enter.



Шаг № 4: Перезапустите vsftpd

Перезапустите vsftpd, набрав:

> sudo /etc/init.d/vsftpd restart

Вы должны увидеть сообщение, которое выглядит так:

введите описание изображения здесь


Если это не работает, попробуйте:

> sudo /sbin/service vsftpd restart



Шаг № 5: Создайте пользователя FTP

Если вы загляните в / etc / vsftpd / user_list, вы увидите следующее:

# 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

Это в основном говорит: «Не позволяйте этим пользователям доступ по FTP». vsftpd разрешит FTP-доступ любому пользователю, которого нет в этом списке.

Поэтому для создания новой учетной записи FTP вам может потребоваться создать нового пользователя на вашем сервере. (Или, если у вас уже есть учетная запись пользователя, которой нет в / etc / vsftpd / user_list, вы можете перейти к следующему шагу.)

Создать нового пользователя на экземпляре EC2 довольно просто. Например, чтобы создать пользователя 'bret', введите:

> sudo adduser bret
> sudo passwd bret

Вот как это будет выглядеть:

введите описание изображения здесь



Шаг № 6: Ограничение пользователей их домашними каталогами

На этом этапе ваши пользователи FTP не ограничены своими домашними каталогами. Это не очень безопасно, но мы можем это легко исправить.

Отредактируйте файл conf vsftpd еще раз, набрав:

> sudo vi /etc/vsftpd/vsftpd.conf

Откомментируйте строку:

chroot_local_user=YES

Это должно выглядеть так, как только вы закончите:

введите описание изображения здесь

Перезапустите сервер vsftpd снова так:

> sudo /etc/init.d/vsftpd restart

Все сделано!


Приложение А. Выживание после перезагрузки

vsftpd не запускается автоматически при загрузке вашего сервера. Если вы похожи на меня, это означает, что после перезагрузки вашего экземпляра EC2 вы почувствуете ужас, когда кажется, что FTP сломан - но в действительности он просто не работает! Вот удобный способ это исправить:

> sudo chkconfig --level 345 vsftpd on

В качестве альтернативы, если вы используете redhat, другой способ управления вашими сервисами - использование этого изящного графического пользовательского интерфейса для управления тем, какие сервисы должны автоматически запускаться:

>  sudo ntsysv

введите описание изображения здесь

Теперь vsftpd будет автоматически запускаться при загрузке вашего сервера.


Приложение B: Изменение домашнего каталога FTP пользователя

* ПРИМЕЧАНИЕ. Iman Sedighi опубликовал более элегантное решение для ограничения доступа пользователей к определенному каталогу. Пожалуйста, обратитесь к его отличному решению, опубликованному в качестве ответа *

Возможно, вы захотите создать пользователя и ограничить его доступ по FTP к определенной папке, например / var / www. Для этого вам нужно изменить домашний каталог пользователя по умолчанию:

> sudo usermod -d /var/www/ username

В этом конкретном примере типично давать пользователю разрешения для группы «www», которая часто связана с папкой / var / www:

> sudo usermod -a -G www username
clone45
источник
3
В step 3после добавления строки в файле, как я могу сохранить его?
Sumit Bijvani
2
хорошо все сделано, теперь как я могу подключиться к FTP?
Sumit Bijvani
7
Привет Сумит. Ви - очень хитрый редактор. Чтобы сохранить свою работу, введите escape, затем «: wq» (без кавычек) и нажмите Enter. Что касается FTP, трудно ответить, потому что он будет основан на вашем FTP-клиенте. Если у меня будет время, я попытаюсь добавить некоторые инструкции к моему ответу для настройки некоторых популярных FTP-клиентов. Лично я пользуюсь Aptana Studio. В Aptana вы создаете сайт SFTP и предоставляете Aptana файл аутентификации с открытым ключом, который вы получили при создании своего экземпляра EC2. Если вы используете filezilla, попробуйте использовать pageant.exe. Ура!
clone45
6
Это отлично. Очень ясно. Большое спасибо.
AC Patrice
11
На самом деле, возможно, он мог бы отдать мне должное. Он отказался от моего ответа 13 января.
clone45
27

Чтобы включить пассивный ftp на сервере EC2, необходимо настроить порты, которые ваш ftp-сервер должен использовать для входящих подключений, а затем открыть список доступных портов для подключений данных клиента ftp.

Я не очень знаком с linux, но отправленные вами команды - это шаги по установке ftp-сервера, настройке правил брандмауэра ec2 (через API-интерфейс AWS), а затем настройке ftp-сервера для использования портов, разрешенных для брандмауэра ec2. ,

Таким образом, этот шаг устанавливает клиент FTP (VSFTP)

> yum install vsftpd

Эти шаги настраивают клиент 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

но два других шага легче выполнить через консоль amazon в группах безопасности EC2. Там вам нужно настроить группу безопасности, которая назначается вашему серверу, чтобы разрешить подключения через порты 20,21 и 1024-1048.

jaminto
источник
Я знаю, что означают эти строки, но я не знаю, где их напечатать ... Вот в чем проблема ...
SharkTheDark
1
в командной строке на сервере, на который вы устанавливаете FTP-сервер?
Jaminto
2
Подключитесь к вашему серверу через SSH: blog.taggesell.de/index.php?/archives/…
jaminto
Если вы по-прежнему получаете сообщение об ошибке (500 OOPS: vsftpd: отказ от запуска с правами записи в chroot ()), это исправило проблему для меня: benscobie.com/…
kaore
Я в шоке, что анонимный FTP включен по умолчанию!
Джеффки
16

Спасибо @ clone45 за хорошее решение. Но у меня была только одна важная проблема с Приложением b его решения. Сразу после того, как я изменил домашний каталог на var / www / html, я не смог подключиться к серверу через ssh и sftp, потому что он всегда показывает следующие ошибки

permission denied (public key)

или в FileZilla я получил эту ошибку:

No supported authentication methods available (server: public key)

Но я мог получить доступ к серверу через обычное FTP-соединение.

Если вы столкнулись с той же ошибкой, просто отмените приложение b решения @ clone45, установив домашний каталог по умолчанию для пользователя:

sudo usermod -d /home/username/ username

Но когда вы устанавливаете домашний каталог пользователя по умолчанию, пользователь получает доступ ко многим другим папкам вне / var / www / http. Итак, чтобы обезопасить свой сервер, выполните следующие действия:

1- Создайте группу sftponly. Создайте группу для всех пользователей, для которых вы хотите ограничить их доступ только для доступа по ftp и sftp к var / www / html. составить группу:

sudo groupadd sftponly

2- Заключить в тюрьму chroot Чтобы ограничить доступ этой группы к серверу через sftp, вы должны заключить в тюрьму chroot, чтобы пользователи группы не могли получить доступ ни к какой папке, кроме html-папки в ее домашнем каталоге. Для этого откройте /etc/ssh/sshd.config в vim с помощью sudo. В конце файла, пожалуйста, прокомментируйте эту строку:

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

А затем добавьте эту строку ниже:

Subsystem sftp internal-sftp

Таким образом, мы заменили подсистему на internal-sftp. Затем добавьте следующие строки под ним:

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

После добавления этой строки я сохранил свои изменения и затем перезапустил службу ssh:

sudo service sshd restart

3. Добавьте пользователя в группу sftponly. Любой пользователь, которому вы хотите ограничить доступ, должен быть членом группы sftponly. Поэтому мы присоединяемся к sftponly: sudo usermod -G sftponly username

4- Ограничить доступ пользователя только к var / www / html Чтобы ограничить доступ пользователя только к папке var / www / html, нам нужно создать каталог в домашнем каталоге (с именем «html») этого пользователя и затем смонтировать / var / www to / home / username / html следующим образом:

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

5- Установите права на запись. Если пользователю нужен доступ на запись к / var / www / html, вы должны заключить пользователя в тюрьму по адресу / var / www, который должен иметь root: право root и права доступа 755. Затем вам нужно указать / var / www / html владение root: sftponly и права доступа 775, добавив следующие строки:

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- Блокировать доступ к оболочке Если вы хотите ограничить доступ, чтобы не иметь доступа к оболочке, чтобы сделать ее более безопасной, просто измените оболочку по умолчанию на bin / false следующим образом:

sudo usermod -s /bin/false username
Иман Седиги
источник
на вашем sudo mount --bind /var/www /home/username/htmlмне говорят, что нет папки www. Я предполагаю, что это сделано из корня (где находится папка / home)?
elliotrock
1
sudo chown root:www /var/www/htmlсостояния chown: недопустимая группа: 'root: www'
elliotrock
2
Часть 6 должна быть sudo usermod -s /sbin/nologin usernameлучше из-за ограничений оболочки модуля pam vsftpd по умолчанию (и в моем случае это работает лучше). И часть 4 mountдолжна выполняться при каждой перезагрузке, поэтому рекомендуется поместить ее в rc.local.
phy25
11

Отличная статья ... работала как ветер на Amazon Linux AMI.

Еще две полезные команды:

Чтобы изменить папку для загрузки по умолчанию на FTP

Шаг 1:

edit /etc/vsftpd/vsftpd.conf

Шаг 2. Создайте новую запись внизу страницы:

local_root=/var/www/html

Чтобы применить права на чтение, запись и удаление файлов в папке, чтобы вы могли управлять ими с помощью устройства FTP

find /var/www/html -type d -exec chmod 777 {} \;
Рави Шанкер
источник
11
который chmods каждый файл и папку в 777, который не является безопасным для веб-сайта
sergiogx
ХОРОШО. Итак, какие изменения вы предлагаете по этому поводу?
Рави Шанкер
3
Вы должны назначить необходимые разрешения, а не просто открывать все разрешения для всего, или вы напрашиваетесь на неприятности. Например, использование chmod -R ug + rw / var / www / html предоставит разрешения на чтение и запись для пользователя и группы для всех файлов без предоставления ненужных разрешений на выполнение и разрешений другим. Затем настройте пользователей и группы соответствующим образом, чтобы вам не нужно было изменять других. То есть, если ваш пользователь ftp может читать и записывать все файлы, а ваш веб-сервер может прочитать, что вы настроены. Поместите обоих пользователей в одну группу и добавьте rw для пользователя и r в группу.
AaronM
Вы должны применить 775 к / var / www / html. остальные подпапки и файлы могут получать разрешения в соответствии с необходимостью. 777 очень небезопасно.
Иман Седиги
6

Если у вас включен UFW, не забудьте добавить ftp:

> sudo ufw allow ftp

Мне потребовалось 2 дня, чтобы понять, что я включил UFW.

chbong
источник
или iptables, или ... да, я тоже всегда забываю!
Jsh
6

Это не будет хорошо, пока вы не добавите своего пользователя в группу www с помощью следующих команд:

sudo usermod -a -G www <USER>

Это решает проблему с разрешениями.

Установите путь по умолчанию, добавив это:

local_root=/var/www/html
user1802434
источник
4

Не забудьте обновить брандмауэр iptables, если он есть, чтобы разрешить диапазоны 20-21 и 1024-1048.

Сделайте это из / etc / sysconfig / iptables

Добавляем такие строки:

-A ВХОД -m состояние - состояние НОВОЕ -m tcp -p tcp --dport 20:21 -j ПРИНЯТЬ

-A ВХОД -m состояние - состояние НОВОЕ -m tcp -p tcp --dport 1024: 1048 -j ПРИНЯТЬ

И перезапустите iptables с помощью команды:

sudo service iptables restart

Кевин Мик
источник
4

Я упростил шаги clone45:

Откройте порты, как он упоминал

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
Виллем Брессерс
источник
2

Я следовал за ответом clone45 до самого конца. Отличная статья! Поскольку для установки плагинов на одном из моих сайтов WordPress мне был необходим доступ по FTP, я изменил домашний каталог на / var / www / mysitename. Затем я продолжил добавлять своего пользователя ftp в группу apache (или www) следующим образом:

sudo usermod -a -G apache myftpuser

После этого я все еще видел эту ошибку на странице установки плагина WP: «Невозможно найти каталог содержимого WordPress (wp-content)». Обыскали и нашли это решение на сеансе вопросов и ответов wp.org: https://wordpress.org/support/topic/unable-to-locate-wordpress-content-directory-wp-content и добавили следующее в конец wp- config.php:

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

После этого мой плагин WP был успешно установлен.

CodeBrew
источник
0

возможно стоит упомянуть в дополнение к ответу clone45 :

Исправление разрешений на запись для пользователей Chrooted FTP в vsftpd

Версия vsftpd, поставляемая с Ubuntu 12.04 Precise, не позволяет локальным пользователям chrooted писать по умолчанию. По умолчанию вы будете иметь это в /etc/vsftpd.conf :

chroot_local_user=YES
write_enable=YES

Чтобы разрешить локальным пользователям писать, необходимо добавить следующий параметр:

allow_writeable_chroot=YES

Примечание. Проблемы с разрешениями на запись могут отображаться как следующие ошибки FileZilla :

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

Ссылки:
Исправление прав записи для пользователей Chrooted FTP в vsftpd
VSFTPd перестал работать после обновления

Хартмут
источник
0

В случае, если вы получаете 530 неверный пароль

Нужен еще 1 шаг

в файле / etc / shells

Добавьте следующую строку

/ Бен / ложь

Варун Бхатия
источник
-2

FileZila - хороший FTP-инструмент для установки с Amazon Cloud.

  1. Скачать клиент FileZila с https://filezilla-project.org/
  2. Нажмите Файл -> Менеджер сайта ->
  3. Новый сайт
  4. Укажите IP-адрес вашего хоста в облаке Amazon (порт, если есть)
  5. Протокол - SFTP (может меняться в зависимости от ваших требований)
  6. Тип входа - обычный (поэтому система не будет запрашивать пароль каждый раз)
  7. Укажите имя пользователя и пароль.
  8. Connect.

Вам нужно выполнить этот шаг только 1 раз, позже он будет загружать контент на тот же IP-адрес и тот же сайт.

Пратима
источник