ChatGPT解决这个技术问题 Extra ChatGPT

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

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关专业服务器或网络相关基础设施管理的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 3年前关闭。改进这个问题

我正在尝试在 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。

c
clone45

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

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

第 1 步:安装 vsftpd

SSH 到您的 EC2 服务器。类型:

> sudo yum install vsftpd

这应该安装 vsftpd。

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

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

https://i.stack.imgur.com/GVDMP.png

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

https://i.stack.imgur.com/QuXjr.jpg

步骤 #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 地址:

https://i.stack.imgur.com/MqGmg.jpg

要保存更改,请按 Escape,然后键入 :wq,然后按 Enter。

第四步:重启 vsftpd

通过键入以下命令重新启动 vsftpd:

> sudo /etc/init.d/vsftpd restart

您应该会看到如下所示的消息:

https://i.stack.imgur.com/oGWgL.jpg

如果这不起作用,请尝试:

> 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

这是它的样子:

https://i.stack.imgur.com/A7Dad.jpg

第 6 步:将用户限制在他们的主目录中

此时,您的 FTP 用户不再局限于他们的主目录。这不是很安全,但我们可以很容易地修复它。

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

> sudo vi /etc/vsftpd/vsftpd.conf

取消注释掉该行:

chroot_local_user=YES

完成后应该如下所示:

https://i.stack.imgur.com/5atwI.jpg

像这样重新启动 vsftpd 服务器:

> sudo /etc/init.d/vsftpd restart

全部完成!

附录 A:在重新启动后幸存

当您的服务器启动时,vsftpd 不会自动启动。如果您像我一样,这意味着在重新启动您的 EC2 实例后,当 FTP 似乎被破坏时,您会感到一阵恐惧——但实际上,它只是没有运行!。这是解决此问题的便捷方法:

> sudo chkconfig --level 345 vsftpd on

或者,如果您使用的是 redhat,另一种管理服务的方法是使用这个漂亮的图形用户界面来控制哪些服务应该自动启动:

>  sudo ntsysv

https://i.stack.imgur.com/DWa49.jpg

现在 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?
嗨苏米特。 Vi 是一个非常棘手的编辑器。要保存您的工作,请输入 escape,然后输入 ":wq"(不带引号),然后按 Enter。至于 FTP,这很难回答,因为它将基于您的 FTP 客户端。如果我有时间,我会尝试在我的答案中附加一些说明,以设置一些流行的 FTP 客户端。就个人而言,我使用 Aptana Studio。在 Aptana 中,您创建一个 SFTP 站点并向 Aptana 提供您在创建 EC2 实例时获得的公钥身份验证文件。如果您使用的是 filezilla,请尝试使用 pageant.exe。干杯!
这是极好的。非常清楚。非常感谢。
实际上,也许他可以信任我。他在 1 月 13 日提出了我的答复。
j
jaminto

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

我对linux不太熟悉,但是您发布的命令是安装ftp服务器的步骤,配置ec2防火墙规则(通过AWS API),然后配置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

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


我知道这些行是什么意思,但我不知道在哪里输入它们......这就是问题所在......
在要安装 ftp 服务器的服务器上的命令行中?
通过 SSH 连接到您的服务器:blog.taggesell.de/index.php?/archives/…
如果您仍然收到错误(500 OOPS:vsftpd:拒绝在 chroot () 中使用可写 root 运行),这解决了我的问题:benscobie.com/…
我很震惊匿名 FTP 默认是开启的!
I
Iman Sedighi

感谢@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 在 vim 中打开 /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 username

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

很棒的文章...在 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 {} \;

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

如果您启用了 ufw,请记住添加 ftp:

> sudo ufw allow ftp

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


或者 iptables,或者......是的,我也总是忘记!
D
Dijkgraaf

除非您通过以下命令将用户添加到组 www ,否则将无法正常工作:

sudo usermod -a -G www <USER>

这解决了权限问题。

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

local_root=/var/www/html

K
Kevin Meek

如果您有一个允许 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 重启


W
Willem Bressers

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

C
CodeBrew

我一直跟着clone45的回答到最后。一篇很棒的文章!由于我需要 FTP 访问权限才能将插件安装到我的 wordpress 站点之一,因此我将主目录更改为 /var/www/mysitename。然后我继续将我的 ftp 用户添加到 apache(或 www)组,如下所示:

sudo usermod -a -G apache myftpuser

在此之后,我仍然在 WP 的插件安装页面上看到此错误:“无法找到 WordPress 内容目录(wp-content)”。在 wp.org Q&A 会话中搜索并找到此解决方案: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 插件安装成功。


C
Community

除了clone45的回答之外,也许值得一提:

修复 vsftpd 中 Chrooted FTP 用户的写入权限 Ubuntu 12.04 Precise 附带的 vsftpd 版本默认不允许 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

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


V
Varun Bhatia

如果您收到 530 密码错误

还需要 1 个步骤

在文件 /etc/shells

添加以下行

/bin/假


P
Pratima

FileZila 是一个很好的 FTP 工具来设置亚马逊云。

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

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