在Amazon Cloud Server上设置FTP [关闭]


257

我试图在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

但是我不知道在哪里写。


10
该问题应迁移到serverfault.com。
杰罗姆Verstrynge

Answers:


570

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文件应类似于以下内容-除了确保用面向公众的IP地址替换pasv_address之外:

在此处输入图片说明

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



步骤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

3
step 3文件中添加行后,如何保存?
Sumit Bijvani

2
好的,一切都完成了,现在如何连接到ftp?
Sumit Bijvani

7
嗨Sumit。Vi是一个非常棘手的编辑器。要保存您的工作,请输入scape,然后输入“:wq”(不带引号),然后按Enter。至于FTP,这很难回答,因为它将基于您的FTP客户端。如果有时间,我将尝试在答案中附加一些说明,以设置一些流行的FTP客户端。我个人使用的是Aptana Studio。在Aptana中,您将创建一个SFTP站点,并向Aptana提供您在创建EC2实例时获得的公钥身份验证文件。如果使用的是filezilla,请尝试使用pageant.exe。干杯!
2013年

6
太好了 非常清楚。非常感谢你。
AC Patrice

11
实际上,也许他可以赞扬我。他寄托我的1月13日答案
clone45

27

要在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安全组下的amazon控制台可以轻松完成其他两个步骤。在那里,您需要配置分配给服务器的安全组,以允许在端口20、21和1024-1048上进行连接


我知道这些行的含义,但我不知道在何处键入...这就是问题所在
SharkTheDark

1
在将ftp服务器安装到的服务器上的命令行上?
jaminto 2011年

2
通过SSH连接到您的服务器:blog.taggesell.de/index.php?
archives

万一您仍然遇到错误(500 OOPS:vsftpd:拒绝在chroot()中使用可写root运行),这为我解决了这个问题:benscobie.com/…– kaore
2014年

我很震惊,匿名FTP默认是打开的!
jeffkee

16

感谢@ 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访问的所有用户和var / www / html的sftp访问创建一个组。组成小组:

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 /通过添加以下几行,对root:sftponly的www / html所有权和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-阻止外壳程序访问 如果要限制访问权限以不访问外壳程序以使其更安全,则只需将默认外壳程序更改为bin / false即可,如下所示:

sudo usermod -s /bin/false username

关于您的sudo mount --bind /var/www /home/username/html通知,我没有www文件夹。我认为这是从根目录完成的(/ home文件夹在哪里)?
elliotrock

1
sudo chown root:www /var/www/html国家chown:无效的组:'root:
www'– elliotrock

2
第6部分最好是sudo usermod -s /sbin/nologin username因为vsftpd的pam模块的默认shell限制(在我的情况下,它看起来更好)。第4部分的mount每次重新启动都需要完成,因此将其放入rc.local是一个好主意。
phy25

11

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

11
chmods每个文件和文件夹到777,这对于网站来说并不安全
sergiogx 2014年

好。那么您对此有何建议?
拉维·尚克

3
您应该分配所需的权限,而不仅仅是对所有内容开放所有权限,否则您将遇到麻烦。例如,使用chmod -R ug + rw / var / www / html将向用户和组授予对所有文件的读取和写入权限,而无需向其他文件授予不必要的执行权限和权限。然后相应地设置用户和组,这样您就无需修改其他用户和组。也就是说,如果您的ftp用户可以读取和写入所有文件,并且您的Web服务器可以读取您的文件,则设置成功。将两个用户放在同一个组中,并将rw添加到该用户,并将r添加到该组。
AaronM 2014年

您应该将775应用于/ var / www / html。其余子文件夹和文件可以根据需要获得权限。777非常不安全。
Iman Sedighi '16

6

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

> sudo ufw allow ftp

我花了两天时间才意识到自己启用了ufw。


或iptables,或者...是的,我也总是忘记!
jsh 2015年

6

除非通过以下命令将用户添加到www组,否则这是不可能的:

sudo usermod -a -G www <USER>

这样解决了许可问题。

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

local_root=/var/www/html

4

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

从/ 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重新启动


4

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

2

我一直遵循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插件已成功安装。


0

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

修复vsftpd中Chroot的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中chftp的FTP用户的写入权限VSFTPd
更新后停止工作


0

万一您输入的530密码不正确

还需要1个步骤

在文件/ etc / shells中

添加以下行

/ bin / false


-2

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.