我在 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 目录。