在Amazon Cloud Server上设置FTP

Sha*_*ark 253 linux ftp amazon-s3 amazon-ec2 amazon-web-services

我正在尝试在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
Run Code Online (Sandbox Code Playgroud)

但我不知道在哪里写.

clo*_*e45 566

Jaminto很好地回答了这个问题,但我最近自己完成了这个过程,并希望扩展Jaminto的答案.

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


第1步:安装vsftpd

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

> sudo yum install vsftpd
Run Code Online (Sandbox Code Playgroud)

这应该安装vsftpd.

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

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

在此输入图像描述

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

在此输入图像描述



步骤3:更新vsftpd.conf文件

键入以下内容编辑您的vsftpd conf文件:

> sudo vi /etc/vsftpd/vsftpd.conf
Run Code Online (Sandbox Code Playgroud)

通过更改此行禁用匿名FTP:

anonymous_enable=YES
Run Code Online (Sandbox Code Playgroud)

anonymous_enable=NO
Run Code Online (Sandbox Code Playgroud)

然后将以下行添加到vsftpd.conf文件的底部:

pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
pasv_address=<Public IP of your instance> 
Run Code Online (Sandbox Code Playgroud)

您的vsftpd.conf文件应如下所示 - 除了确保将pasv_address替换为面向公众的IP地址:

在此输入图像描述

要保存更改,请按"转义",然后键入:wq,然后按Enter键.



步骤#4:重启vsftpd

输入以下命令重启vsftpd:

> sudo /etc/init.d/vsftpd restart
Run Code Online (Sandbox Code Playgroud)

您应该看到如下消息:

在此输入图像描述


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

> sudo /sbin/service vsftpd restart
Run Code Online (Sandbox Code Playgroud)



步骤#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
Run Code Online (Sandbox Code Playgroud)

这基本上是说"不要让这些用户进行FTP访问".vsftpd将允许FTP访问不在此列表中的任何用户.

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

在EC2实例上创建新用户非常简单.例如,要创建用户'bret',请键入:

> sudo adduser bret
> sudo passwd bret
Run Code Online (Sandbox Code Playgroud)

这是它的样子:

在此输入图像描述



步骤#6:将用户限制在其主目录中

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

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

> sudo vi /etc/vsftpd/vsftpd.conf
Run Code Online (Sandbox Code Playgroud)

取消评论:

chroot_local_user=YES
Run Code Online (Sandbox Code Playgroud)

一旦你完成它应该看起来像这样:

在此输入图像描述

再次重启vsftpd服务器,如下所示:

> sudo /etc/init.d/vsftpd restart
Run Code Online (Sandbox Code Playgroud)

全部完成!


附录A:幸存重启

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

> sudo chkconfig --level 345 vsftpd on
Run Code Online (Sandbox Code Playgroud)

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

>  sudo ntsysv
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在vsftpd将在服务器启动时自动启动.


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

*注意:Iman Sedighi发布了一个更优雅的解决方案,用于限制用户访问特定目录.请参考他作为答案发布的优秀解决方案*

您可能希望创建用户并限制其对特定文件夹的FTP访问,例如/ var/www.为此,您需要更改用户的默认主目录:

> sudo usermod -d /var/www/ username
Run Code Online (Sandbox Code Playgroud)

在此特定示例中,通常向用户授予"www"组的权限,该组通常与/ var/www文件夹关联:

> sudo usermod -a -G www username
Run Code Online (Sandbox Code Playgroud)

  • 实际上,也许他可以归功于我.他在1月13日回答了我的答案. (11认同)
  • 嗨Sumit.Vi是一个非常棘手的编辑器.要保存您的工作,请键入escape,然后键入":wq"(不带引号),然后按Enter键.至于FTP,这很难回答,因为它将基于您的FTP客户端.如果我有时间,我会尝试在设置一些流行的FTP客户端的答案中添加一些说明.就个人而言,我使用的是Aptana Studio.在Aptana中,您创建一个SFTP站点并为Aptana提供您在创建EC2实例时获得的公钥认证文件.如果您使用的是filezilla,请尝试使用pageant.exe.干杯! (7认同)
  • 这很棒.非常清楚.非常感谢你. (6认同)
  • 在文件中添加行后的"步骤3"中,如何保存? (3认同)
  • 好的,一切都完成了,现在我如何连接到 ftp? (2认同)

jam*_*nto 26

要在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
Run Code Online (Sandbox Code Playgroud)

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

  • 通过SSH连接到您的服务器:http://blog.taggesell.de/index.php?/archives/73-Managing-Amazon-EC2-SSH-login-and-protecting-your-instances.html (2认同)

Ima*_*ghi 16

谢谢@ clone45的好解决方案.但我的解决方案附录b中只有一个重要问题.在我将主目录更改为var/www/html之后,我无法通过ssh和sftp连接到服务器,因为它始终显示以下错误

permission denied (public key)
Run Code Online (Sandbox Code Playgroud)

或者在FileZilla中我收到此错误:

No supported authentication methods available (server: public key)
Run Code Online (Sandbox Code Playgroud)

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

如果您遇到同样的错误,那么只需通过为用户设置默认主目录来撤消@ clone45解决方案的附录b:

sudo usermod -d /home/username/ username
Run Code Online (Sandbox Code Playgroud)

但是当您设置用户的默认主目录时,用户可以访问/ var/www/http之外的许多其他文件夹.因此,要保护您的服务器,请按以下步骤操作

1-制作sftponly组 为所有想要限制访问var/www/html的ftp和sftp访问权限的用户创建一个组.组成小组:

sudo groupadd sftponly
Run Code Online (Sandbox Code Playgroud)

2-监禁chroot 要限制通过sftp访问该组到服务器,你必须将chroot监禁到不允许组的用户访问其主目录中除html文件夹之外的任何文件夹.用sudo在vim中打开/etc/ssh/sshd.config.在文件的末尾请注释这一行:

Subsystem sftp /usr/libexec/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)

然后在下面添加以下行:

Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)

所以我们用internal-sftp替换了子系统.然后在它下面添加以下行:

 Match Group sftponly
        ChrootDirectory /var/www
        ForceCommand internal-sftp
        AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

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

sudo service sshd restart
Run Code Online (Sandbox Code Playgroud)

3-将用户添加到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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

6-阻止shell访问 如果你想限制访问不能访问shell以使其更安全,那么只需将默认shell更改为bin/false,如下所示:

sudo usermod -s /bin/false username
Run Code Online (Sandbox Code Playgroud)

  • 第6部分最好是'sudo usermod -s/sbin/nologin username`,因为vsftpd的pam模块的默认shell限制(在我的情况下似乎更好).并且第4部分的"mount"需要在每次重启时完成,因此将它放入rc.local是个好主意. (2认同)

小智 11

伟大的文章......在亚马逊Linux AMI上轻而易举地工作.

另外两个有用的命令:

更改默认FTP上载文件夹

步骤1:

edit /etc/vsftpd/vsftpd.conf
Run Code Online (Sandbox Code Playgroud)

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

local_root=/var/www/html
Run Code Online (Sandbox Code Playgroud)

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

find /var/www/html -type d -exec chmod 777 {} \;
Run Code Online (Sandbox Code Playgroud)

  • 将每个文件和文件夹chmod到777,这对于网站来说是不安全的 (11认同)
  • 您应该分配所需的权限,不要只是对所有内容打开所有权限,或者您要求麻烦.例如,使用chmod -R ug + rw/var/www/html将授予用户和组对所有文件的读写权限,而不向其他文件授予不必要的执行权限和权限.然后相应地设置用户和组,以便您不需要修改其他用户和组.也就是说,如果您的ftp用户可以读取和写入所有文件,并且您的Web服务器可以读取您已设置.将两个用户放在同一个组中,并将rw添加到用户并将r添加到该组. (3认同)

小智 6

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

> sudo ufw allow ftp
Run Code Online (Sandbox Code Playgroud)

我花了两天才意识到我启用了ufw.


小智 6

在通过以下命令将用户添加到组www之前,这将是不可能的:

sudo usermod -a -G www <USER>
Run Code Online (Sandbox Code Playgroud)

这解决了权限问题.

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

local_root=/var/www/html
Run Code Online (Sandbox Code Playgroud)