我试图在亚马逊云服务器上设置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

但我不知道在哪里写。


当前回答

我一直跟着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插件安装成功。

其他回答

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

从/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服务iptables重启

伟大的文章…在亚马逊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

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

谢谢@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文件夹在其主目录内的任何文件夹。要做到这一点,打开/etc/ssh/sshd.在vim中使用sudo进行配置。 在文件的末尾,请注释这一行:

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

除了clone45的回答之外,也许值得一提的是:

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