在 ubuntu 上使用 nginx 配置 vsftpd

在 ubuntu 上使用 nginx 配置 vsftpd

我在 Ubuntu 12.04LTS 上安装了 vsftpd,并在 Amazon ec2 实例上安装了 nginx、php 和 sql。Web 服务器一切正常,但我无法连接到 FTP 服务器。我不太清楚如何设置权限或我可能缺少哪些配置选项。

默认情况下,Web 根目录位于/usr/share/nginx/www,其所有者为root:root。Web 服务器以www-data组中的用户身份运行www-data

我已经打开端口 21 并在 ec2 后端和 ufw 防火墙中设置了被动端口。

在 vsftpd.conf 中,我有:

...
anonymous_enable=NO
local_enable=YES
local_umask=0027
chroot_local_user=YES
pasv_enable=YES
pas_max_port=12100
pasv_min_port=12000
port_enable=YES
...

现在,我不确定如何创建 FTP 用户,以便在我登录时显示具有写权限的 Web 目录。我尝试了几种不同的方法,但总是遇到错误(无连接、无写权限或超时非常慢)。

答案1

首先,确保防火墙上打开端口 35000:36000 以允许 PASV FTP。

那么对于你的/etc/vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
hide_ids=YES
use_localtime=YES
nopriv_user=ftp
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftp
user_config_dir=/etc/vsftpd_user_conf
ftpd_banner=My FTP Server
virtual_use_local_privs=YES
anon_upload_enable=NO
async_abor_enable=YES
pasv_min_port=35000
pasv_max_port=36000
pasv_enable=YES
port_enable=YES
write_enable=NO

然后创建用户,运行,

/bin/htpasswd /etc/ftpd.passwd myusername

然后在中创建附带文件/etc/vsftpd_user_conf/myusername

guest_username=www-data
local_root=/usr/share/nginx/www
write_enable=yes

用户按照guest_username规定进行连接,因此它允许您拥有具有不同访问权限的多个 FTP 用户,但同时保留重要的文件级所有者权限。

这将为您提供一个简单、chrooted、安全、隔离且易于管理的 FTP 配置。

不客气。

答案2

您可以执行以下操作来实现您所描述的...

请更换阿比使用您喜欢的任何 FTP 用户名。

sudo useradd -d /usr/share/nginx/www -G www-data arby

sudo chown -R arby:www-data /usr/share/nginx/www

sudo chmod -R g+w /usr/share/nginx/www

如果您已经创建了名为阿比,那么请执行以下操作而不是第一个命令......

sudo usermod -d /usr/share/nginx/www -a -G www-data arby

答案3

请务必使用:

pasv_address=YOUR_PUBLIC_IP

在 vsftpd 配置中,YOUR_PUBLIC_IP 是您的 EC2 实例的公共 IP,否则您将无法登录 vsftpd。

其余部分可以从第一个答案中使用,或者您也可以选择使用 php-fpm 与您选择的用户一起工作。例如,假设您想使用用户 webuser,您需要执行以下步骤(所有步骤都应以 root 用户身份完成):1) 创建用户并更改权限:

useradd -d /usr/share/nginx/www webuser
chown webuser.webuser -R /usr/share/nginx/www

2)不要忘记输入以下命令为该用户添加密码:

passwd webuser

3)通过使 /etc/php-fpm.conf 具有以下内容来配置您的 php-fpm 安装:

include=/etc/php-fpm.d/*.conf
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes

并创建一个 /etc/php-fpm.d/webuser.conf,内容如下:

[webuser]

listen = /var/run/webuser.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0600
user = webuser
group = webuser
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
rlimit_files = 10240
env[HOSTNAME] = $HOSTNAME
env[PATH] = /bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f hostmaster@yourservername
php_flag[display_errors] = off
php_admin_value[error_log] = /usr/share/nginx/logs/php-errors.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M
php_admin_value[session.save_path] = /tmp/
php_admin_value[date.timezone] = "UTC"

4)将 vhost 配置添加到你的 nginx 配置中,例如:

server {
          listen *:80;
          server_name  yourservername.com www.yourservername.com;
          client_max_body_size 24M;
          root /usr/share/nginx/www;
          location / {
           index index.php index.html;
          }
          access_log     /usr/share/nginx/logs/access.log;
          error_log      /usr/share/nginx/logs/error.log;
          error_page 404 /;
          location ~ /\.ht
          {
           deny all;
          }
          location ~ \.php$ {
           index index.php index.html;
           fastcgi_pass    unix:/var/run/webuser.sock;
           fastcgi_index  index.php;
           fastcgi_pass_header 'Set-Cookie';
           fastcgi_param  SCRIPT_FILENAME /usr/share/nginx/www$fastcgi_script_name;
           fastcgi_intercept_errors on;
           fastcgi_param  QUERY_STRING     $uri;
           include        fastcgi_params;
           break;
          }
        }

5)重新启动 php-fpm 服务并重新启动 nginx 服务。

这应该可以让它工作。

注意:确保创建 /usr/share/nginx/logs 目录。

相关内容