在亚马逊云服务器上设置 FTP [关闭]
- 2024-10-17 08:47:00
- admin 原创
- 72
问题描述:
我正在尝试在 Amazon 云服务器上设置 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
但我不知道把它们写在哪里。
解决方案 1:
Jaminto 很好地回答了这个问题,但是我最近自己经历了这个过程,并想扩展 Jaminto 的回答。
我假设您已经创建了一个 EC2 实例并已将弹性 IP 地址与其关联。
步骤#1:安装 vsftpd
通过 SSH 连接到您的 EC2 服务器。输入:
> sudo yum install vsftpd
这应该安装 vsftpd。
步骤2:打开EC2实例上的FTP端口
接下来,您需要打开 EC2 服务器上的 FTP 端口。登录 AWS EC2 管理控制台并从左侧导航树中选择“安全组”。选择分配给您的 EC2 实例的安全组。然后选择“入站”选项卡,然后单击“编辑”:
添加两个自定义 TCP 规则,端口范围为 20-21 和 1024-1048。对于来源,您可以选择“任意位置”。如果您决定将来源设置为您自己的 IP 地址,请注意,如果通过 DHCP 分配 IP 地址,您的 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 地址:
要保存更改,请按 Esc 键,然后输入:wq
,再按回车键。
步骤#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
解决方案 2:
要在 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
但其他两个步骤更容易通过 Amazon 控制台的 EC2 安全组完成。您需要在那里配置分配给服务器的安全组,以允许在端口 20、21 和 1024-1048 上进行连接
解决方案 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 在 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 用户名
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
解决方案 4:
很棒的文章...在 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 {} ;
解决方案 5:
如果你启用了 ufw,请记住添加 ftp:
> sudo ufw allow ftp
我花了两天时间才意识到我启用了 ufw。
解决方案 6:
直到您使用以下命令将您的用户添加到组 www 后,一切才正常:
sudo usermod -a -G www <USER>
这解决了权限问题。
通过添加以下内容设置默认路径:
local_root=/var/www/html
解决方案 7:
如果您有 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 服务 iptables 重启
解决方案 8:
我简化了 clone45 步骤:
按照他提到的打开端口
sudo su
sudo yum install vsftpd
echo -n "Public IP of your instance: " && read publicip
echo -e "anonymous_enable=NO
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=$publicip
chroot_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 版本默认不允许 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
参考:
修复 vsftpd 中 Chrooted FTP 用户的写入权限
VSFTPd 在更新后停止工作
解决方案 11:
如果你收到 530 密码错误
还需 1 步
在文件 /etc/shells 中
添加以下行
/bin/false
解决方案 12:
FileZila 是与 Amazon Cloud 配合设置的优秀 FTP 工具。
从https://filezilla-project.org/下载 FileZila 客户端
点击文件 -> 站点管理器 ->
新网站
提供您的亚马逊云位置的主机名 IP 地址(如果有端口)
协议 - SFTP(可能会根据您的要求而改变)
登录类型 - 正常(因此系统不会每次都要求输入密码)
提供用户名和密码。
连接。
您只需执行这些步骤一次,稍后它就会将内容上传到相同的 IP 地址和相同的站点。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件