我试图在亚马逊云服务器上设置FTP,但没有运气。 我在网上搜索,没有具体的步骤如何做到这一点。

我找到了这些命令:

$ 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

但我不知道在哪里写。


当前回答

Jaminto在回答这个问题上做得很好,但我最近自己也经历了这个过程,并想扩展Jaminto的答案。

我假设您已经创建了一个EC2实例,并将弹性IP地址关联到它。

步骤1:安装vsftpd

SSH到EC2服务器。类型:

> sudo yum install vsftpd

这应该会安装vsftpd。

步骤#2:打开EC2实例上的FTP端口

接下来,您需要打开EC2服务器上的FTP端口。登录AWS EC2管理控制台,在左侧导航树中选择“安全组”。选择分配给EC2实例的安全组。然后选择Inbound选项卡,然后单击Edit:

添加两个自定义TCP规则,端口范围为20-21和1024-1048。对于Source,您可以选择“Anywhere”。如果您决定将“源”设置为您自己的IP地址,请注意,如果您的IP地址是通过DHCP分配的,则可能会更改。

步骤#3:更新vsftpd.conf文件

编辑你的vsftpd conf文件,输入:

> sudo vi /etc/vsftpd/vsftpd.conf

通过修改这一行来禁用匿名FTP:

anonymous_enable=YES

to

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文件应该看起来像下面这样-除了确保用你的公共IP地址替换pasv_address:

要保存更改,请按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用户不再局限于他们的主目录。这不是很安全,但我们可以很容易地修复它。

再次编辑vsftpd conf文件,输入:

> sudo vi /etc/vsftpd/vsftpd.conf

取消注释行:

chroot_local_user=YES

当你完成后,它应该是这样的:

重新启动vsftpd服务器,如下所示:

> sudo /etc/init.d/vsftpd restart

全部完成!

附录A:重启后存活

当服务器启动时,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

其他回答

以防你得到530密码不正确

还需要一步

在/etc/shell文件中

添加以下行

/bin/false

Jaminto在回答这个问题上做得很好,但我最近自己也经历了这个过程,并想扩展Jaminto的答案。

我假设您已经创建了一个EC2实例,并将弹性IP地址关联到它。

步骤1:安装vsftpd

SSH到EC2服务器。类型:

> sudo yum install vsftpd

这应该会安装vsftpd。

步骤#2:打开EC2实例上的FTP端口

接下来,您需要打开EC2服务器上的FTP端口。登录AWS EC2管理控制台,在左侧导航树中选择“安全组”。选择分配给EC2实例的安全组。然后选择Inbound选项卡,然后单击Edit:

添加两个自定义TCP规则,端口范围为20-21和1024-1048。对于Source,您可以选择“Anywhere”。如果您决定将“源”设置为您自己的IP地址,请注意,如果您的IP地址是通过DHCP分配的,则可能会更改。

步骤#3:更新vsftpd.conf文件

编辑你的vsftpd conf文件,输入:

> sudo vi /etc/vsftpd/vsftpd.conf

通过修改这一行来禁用匿名FTP:

anonymous_enable=YES

to

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文件应该看起来像下面这样-除了确保用你的公共IP地址替换pasv_address:

要保存更改,请按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用户不再局限于他们的主目录。这不是很安全,但我们可以很容易地修复它。

再次编辑vsftpd conf文件,输入:

> sudo vi /etc/vsftpd/vsftpd.conf

取消注释行:

chroot_local_user=YES

当你完成后,它应该是这样的:

重新启动vsftpd服务器,如下所示:

> sudo /etc/init.d/vsftpd restart

全部完成!

附录A:重启后存活

当服务器启动时,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的回答之外,也许值得一提的是:

修复vsftpd中root FTP用户的写权限 Ubuntu 12.04 Precise附带的vsftpd版本没有 默认允许chroot本地用户写入。默认情况下是这样的 在/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

引用: 修复vsftpd中root FTP用户的写权限 VSFTPd更新后停止工作

如果你已经启用了ufw,记得添加ftp:

> sudo ufw allow ftp

我花了两天时间才意识到我启用了ufw。

我简化了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