在亚马逊云服务器上设置 FTP [关闭]

Posted

技术标签:

【中文标题】在亚马逊云服务器上设置 FTP [关闭]【英文标题】:Setting up FTP on Amazon Cloud Server [closed] 【发布时间】:2011-10-26 13:01:10 【问题描述】:

我正在尝试在 Amazon Cloud Server 上设置 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

但我不知道在哪里写。

【问题讨论】:

这个问题应该迁移到serverfault.com。 【参考方案1】:

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 设置为您自己的 IP 地址,请注意如果通过 DHCP 分配您的 IP 地址可能会发生变化。

第 3 步:更新 vsftpd.conf 文件

通过键入以下内容编辑您的 vsftpd conf 文件:

> 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。

第四步:重启 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

【讨论】:

step 3文件中添加行后,如何保存? 好了,现在如何连接到 ftp? 嗨,Sumit。 Vi 是一个非常棘手的编辑器。要保存您的工作,请输入 escape,然后输入 ":wq"(不带引号),然后按 Enter。至于 FTP,这很难回答,因为它将基于您的 FTP 客户端。如果我有时间,我会尝试在我的答案中附加一些说明,以设置一些流行的 FTP 客户端。就个人而言,我使用 Aptana Studio。在 Aptana 中,您创建一个 SFTP 站点并向 Aptana 提供您在创建 EC2 实例时获得的公钥身份验证文件。如果您使用的是 filezilla,请尝试使用 pageant.exe。干杯! 这太棒了。非常清楚。非常感谢。 其实,也许他可以把功劳归功于我。他在 1 月 13 日提出了我的答复。【参考方案2】:

要在 EC2 服务器上启用被动 ftp,您需要配置 ftp 服务器用于入站连接的端口,然后打开 ftp 客户端数据连接的可用端口列表。

我对 linux 不是很熟悉,但是您发布的命令是安装 ftp 服务器的步骤,配置 ec2 防火墙规则(通过 AWS API),然后配置 ftp 服务器以使用您允许的端口ec2 防火墙。

所以这一步安装ftp客户端(VSFTP)

&gt; 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

但其他两个步骤通过 EC2 安全组下的亚马逊控制台更容易完成。在那里,您需要配置分配给服务器的安全组,以允许端口 20、21 和 1024-1048 上的连接

【讨论】:

我知道这些行是什么意思,但我不知道在哪里输入它们......这就是问题...... 在您要安装 ftp 服务器的服务器上的命令行中? 通过 SSH 连接到您的服务器:blog.taggesell.de/index.php?/archives/… 如果你仍然得到一个错误(500 OOPS: vsftpd: refusing to run with writable root inside chroot ()),这解决了我的问题:benscobie.com/… 我很震惊匿名 FTP 默认是开启的!【参考方案3】:

感谢@clone45 提供了很好的解决方案。但是我对他的解决方案的附录 b 只有一个重要问题。在我将主目录更改为 var/www/html 之后,我立即无法通过 ssh 和 sftp 连接到服务器,因为它总是显示以下错误

permission denied (public key)

或者在 FileZilla 中我收到了这个错误:

No supported authentication methods available (server: public key)

但我可以通过正常的 FTP 连接访问服务器。

如果您遇到同样的错误,那么只需通过为用户设置默认主目录来撤消 @clone45 解决方案的附录 b:

sudo usermod -d /home/username/ username

但是当您设置用户的默认主目录时,用户可以访问 /var/www/http 之外的许多其他文件夹。因此,要保护您的服务器,请按照以下步骤操作:

1- 建立 sftponly 组 为您希望限制他们仅访问 ftp 和 sftp 访问 var/www/html 的所有用户创建一个组。组:

sudo groupadd sftponly

2- 监禁 chroot 要通过 sftp 限制该组对服务器的访问,您必须监禁 chroot 以不允许组的用户访问其主目录中除 html 文件夹之外的任何文件夹。为此,请使用 sudo 在 vi​​m 中打开 /etc/ssh/sshd.config。 请在文件末尾评论这一行:

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 用户名

4- 限制用户仅访问 var/www/html 为了限制用户只能访问 var/www/html 文件夹,我们需要在该用户的主目录(名称为“html”)中创建一个目录,然后将 /var/www 挂载到 /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- 阻止 shell 访问 如果您想限制对 shell 的访问以使其更安全,则只需将默认 shell 更改为 bin/false,如下所示:

sudo usermod -s /bin/false username

【讨论】:

在您的sudo mount --bind /var/www /home/username/html 上,有人告诉我没有 www 文件夹。我假设这是从根目录(/home 文件夹所在的位置)完成的? sudo chown root:www /var/www/html 状态 chown:无效组:'root:www' 第 6 部分最好是 sudo usermod -s /sbin/nologin username 因为 vsftpd 的 pam 模块的默认 shell 限制(在我的情况下它似乎工作得更好)。并且第 4 部分的mount 需要在每次重新启动时完成,因此最好将其放入 rc.local。【参考方案4】:

很棒的文章...在 Amazon Linux AMI 上运行起来轻而易举。

另外两个有用的命令:

更改默认 FTP 上传文件夹

第一步:

edit /etc/vsftpd/vsftpd.conf

第 2 步:在页面底部创建一个新条目:

local_root=/var/www/html

对文件夹下的文件应用读、写、删除权限,以便您可以使用 FTP 设备进行管理

find /var/www/html -type d -exec chmod 777  \;

【讨论】:

将每个文件和文件夹 chmod 为 777,这对于网站来说是不安全的 好的。那么您对此有何建议? 您应该分配所需的权限,不要只是全面开放所有权限,否则您就是在自找麻烦。例如,使用 chmod -R ug+rw /var/www/html 将授予用户和组对所有文件的读取和写入权限,而不会授予其他文件不需要的执行权限和权限。然后相应地设置用户和组,以便您不需要修改其他。也就是说,如果您的 ftp 用户可以读取和写入所有文件,并且您的网络服务器可以读取您的设置。将两个用户放在同一个组中,并将 rw 添加到用户,将 r 添加到组。 您应该将 775 应用于 /var/www/html。其余子文件夹和文件可以根据需要获取权限。 777 非常不安全。【参考方案5】:

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

> sudo ufw allow ftp

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

【讨论】:

或 iptables,或者……是的,我也总是忘记!【参考方案6】:

在您通过以下命令将您的用户添加到组 www 之前,这是不行的:

sudo usermod -a -G www <USER>

这样就解决了权限问题。

通过添加以下内容设置默认路径:

local_root=/var/www/html

【讨论】:

【参考方案7】:

如果您有一个允许 20-21 和 1024-1048 范围进入的防火墙,请不要忘记更新您的 iptables 防火墙。

从 /etc/sysconfig/iptables 执行此操作

像这样添加行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20:21 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1024:1048 -j ACCEPT

然后用命令重启iptables:

sudo service iptables 重启

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我一直跟着 clone45 的回答到最后。一篇很棒的文章!由于我需要 FTP 访问权限才能将插件安装到我的 wordpress 站点之一,因此我将主目录更改为 /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 插件安装成功。

【讨论】:

【参考方案10】:

除了clone45的回答,或许还值得一提:

在 vsftpd 中修复 Chrooted 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

参考资料:Fixing Write Permissions for Chrooted FTP Users in vsftpdVSFTPd stopped working after update

【讨论】:

【参考方案11】:

如果您收到 530 密码错误

还需要 1 步

在文件/etc/shells中

添加下面一行

/bin/假

【讨论】:

【参考方案12】:

FileZila 是一个很好的 FTP 工具,用于设置 Amazon Cloud。

    从https://filezilla-project.org/下载FileZila客户端 点击文件->站点管理器-> 新网站 提供您的亚马逊云位置的主机名 IP 地址(端口,如果有) 协议 - SFTP(可根据您的要求更改) 登录类型 - 普通(系统不会每次都要求输入密码) 提供用户名和密码。 连接。

您只需要执行此步骤 1 次,稍后它会将内容上传到相同的 IP 地址和相同的站点。

【讨论】:

以上是关于在亚马逊云服务器上设置 FTP [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在多个主机上运行并行 R [关闭]

阿里云服务器和亚马逊服务器哪个好用?

从亚马逊(AWS)迁移到阿里云

使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版——云服务器申请及配置

使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版——部署配置及相关知识

使用亚马逊云科技的SQS服务有啥优势?