关闭。此问题不符合 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
但我不知道在哪里写它们。
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
要在 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 上的连接
感谢@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'
sudo usermod -s /sbin/nologin username
,因为 vsftpd 的 pam 模块的默认 shell 限制(在我的情况下它似乎工作得更好)。并且第 4 部分的 mount
需要在每次重新启动时完成,因此最好将其放入 rc.local。
很棒的文章...在 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 {} \;
如果您启用了 ufw,请记住添加 ftp:
> sudo ufw allow ftp
我花了 2 天时间才意识到我启用了 ufw。
除非您通过以下命令将用户添加到组 www ,否则将无法正常工作:
sudo usermod -a -G www <USER>
这解决了权限问题。
通过添加以下内容设置默认路径:
local_root=/var/www/html
如果您有一个允许 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 重启
我已经简化了 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
我一直跟着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 插件安装成功。
除了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
如果您收到 530 密码错误
还需要 1 个步骤
在文件 /etc/shells
添加以下行
/bin/假
FileZila 是一个很好的 FTP 工具来设置亚马逊云。
从 https://filezilla-project.org/ 下载 FileZila 客户端 单击文件 -> 站点管理器 -> 新站点 提供您的亚马逊云位置的主机名 IP 地址(端口,如果有) 协议 - SFTP(可能会根据您的要求而更改) ) 登录类型 - 正常(因此系统不会每次都要求输入密码)提供用户名和密码。连接。
您只需执行 1 次这些步骤,稍后它会将内容上传到相同的 IP 地址和相同的站点。
不定期副业成功案例分享
step 3
中,如何保存?