在Amazon Cloud Server上设置FTP

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

由于网上没有任何步骤,有人可以帮我find它或写在这里?

我通常使用专用的服务器或共享主机,但是我对这些云服务器不太好…

我发现这些命令运行:

$ 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的答案。

我假设您已经创build了一个EC2实例,并且已经为其添加了一个弹性IP地址。

步骤#1:安装vsftpd

SSH到您的EC2服务器。 types:

 > sudo yum install vsftpd 

这应该安装vsftpd。

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

接下来,您需要打开EC2服务器上的FTP端口。 login到AWS EC2pipe理控制台,然后从左侧的导航树中select安全组。 select分配给您的EC2实例的安全组。 然后select入站选项卡,然后单击编辑:

在这里输入图像描述

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

在这里输入图像描述

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

input以下命令编辑您的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文件应该如下所示 – 除了确保将您的公共IP地址replace为pasv_address:

在这里输入图像描述

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

第四步:重启vsftpd

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

 > sudo /etc/init.d/vsftpd restart 

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

在这里输入图像描述

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

 > sudo /sbin/service vsftpd restart 

步骤#5:创build一个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访问不在此列表中的任何用户。

所以,为了创build一个新的FTP帐户,您可能需要在您的服务器上创build一个新用户。 (或者,如果您已经拥有了/ etc / vsftpd / user_list中未列出的用户帐户,则可以跳到下一步。)

在EC2实例上创build一个新用户非常简单。 例如,要创build用户“bret”,请键入:

 > sudo adduser bret > sudo passwd bret 

以下是它的样子:

在这里输入图像描述

步骤#6:限制用户到他们的主目录

在这一点上,你的FTP用户不限于他们的主目录。 这不是很安全,但我们可以很容易地修复它。

通过input以下内容再次编辑您的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,另一种pipe理服务的方式是使用这个漂亮的graphics用户界面来控制哪些服务应该自动启动:

 > sudo ntsysv 

在这里输入图像描述

现在vsftpd会在您的服务器启动时自动启动。

附录B:更改用户的FTP主目录

*注意:Iman Sedighi已经发布了一个更优雅的解决scheme来限制用户访问特定的目录。 请参考他的优秀解决scheme张贴为答案*

您可能需要创build一个用户,并将他们的FTP访问权限限制在特定的文件夹中,例如/ var / www。 为了做到这一点,你需要改变用户的默认主目录:

 > sudo usermod -d /var/www/ username 

在这个特定的例子中,通常将用户的权限授予“www”组,该组通常与/ var / www文件夹相关联:

 > sudo usermod -a -G www username 

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

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

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

> yum install vsftpd

这些步骤configuration了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安全组下的亚马逊控制台轻松完成。 在那里,您需要configuration分配给您的服务器的安全组,以允许连接端口20,21和1024-1048

大文章…在亚马逊Linux AMI上轻而易举。

两个更有用的命令:

要更改默认的FTP上传文件夹

步骤1:

 edit /etc/vsftpd/vsftpd.conf 

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

 local_root=/var/www/html 

要对文件夹下的文件应用读取,写入和删除权限,以便您可以使用FTP设备进行pipe理

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

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

 permission denied (public key) 

或在FileZilla中收到此错误:

 No supported authentication methods available (server: public key) 

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

如果遇到同样的错误,只需通过设置用户的默认主目录即可撤销@ clone45解决scheme的附录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中打开/etc/ssh/sshd.config在vim中。 在文件末尾请注释以下行:

 Subsystem sftp /usr/libexec/openssh/sftp-server 

然后在下面添加这一行:

 Subsystem sftp internal-sftp 

所以我们用internal-sftpreplace了子系统。 然后在下面添加以下几行:

  Match Group sftponly ChrootDirectory /var/www ForceCommand internal-sftp AllowTcpForwarding no 

添加此行后,我保存了我的更改,然后通过以下方式重新启动ssh服务:

 sudo service sshd restart 

3-将用户添加到sftponly组您想要限制其访问权限的任何用户必须是sftponly组的成员。 因此,我们通过以下方式join:sudo usermod -G sftponly username

4限制用户对var / www / html的访问为了限制用户对var / www / html文件夹的访问,我们需要在用户的主目录(名字为“html”)中创build一个目录,然后mount / 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权限和755的权限。然后你需要给/ var / www / html所有权的根:sftponly和权限775join以下几行:

 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 

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

 > sudo ufw allow ftp 

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

直到您通过以下命令将您的用户添加到组www:它将不会好。

 sudo usermod -a -G www <USER> 

这解决了权限问题。

通过添加这个设置默认path:

 local_root=/var/www/html 

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

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

像这样添加行:

-Ainput-m状态 – 状态新-m tcp -p tcp –dport 20:21 -j ACCEPT

-A INPUT -m状态 – 状态新-m tcp -p tcp –dport 1024:1048 -j ACCEPT

并使用以下命令重新启动iptables:

sudo服务iptables重新启动

我简化了克隆步骤:

打开他提到的端口

 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 

这是一个伟大的写作。 请注意,您可能需要将您创build的用户添加到“FTP”用户组:

> gpasswd -a <usr> ftp

我一直跟着clone45的回答结束。 一个伟大的文章! 由于我需要FTP访问来将插件安装到我的一个WordPress站点,我将主目录更改为/ var / www / mysitename。 然后我继续添加我的FTP用户到Apache(或WWW)组,如下所示:

 sudo usermod -a -G apache myftpuser 

在此之后,我仍然在WP的插件安装页面上看到这个错误:“找不到WordPress内容目录(wp-content)”。 在wp.org Q&A会议上search并find了这个解决scheme: 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版本不允许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中Chrooted FTP用户的写入权限
更新后VSFTPd停止工作

FileZila是使用Amazon Cloud进行安装的好工具。

  1. https://filezilla-project.org/下载FileZila客户端;
  2. 点击文件 – >站点pipe理器 – >
  3. 新网站
  4. 提供您的亚马逊云位置的主机名IP地址(如果有的话)
  5. 协议 – SFTP(可根据您的要求更改)
  6. logintypes – 正常(所以系统不会每次都要求input密码)
  7. 提供用户名和密码。
  8. 连接。

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