我在Ubuntu 12.04LTS上安装了vsftpd,以及Amazon EC2实例上的nginx,php和sql。 networking服务器是很好的去,但我无法连接到FTP服务器。 我不太清楚如何设置权限或我可能会丢失什么configuration选项。
默认情况下,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 ...
现在,我不确定如何创buildFTP用户,当我login时,显示我的Web目录与写权限。 我已经尝试了几种不同的方式,但是我一直在遇到错误(无论是否连接,没有写入权限,或超时时间很慢)。
首先,请确保在防火墙上打开端口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
然后创build一个用户,运行,
/bin/htpasswd /etc/ftpd.passwd myusername
然后在/etc/vsftpd_user_conf/myusername创build相应的文件
guest_username=www-data local_root=/usr/share/nginx/www write_enable=yes
用户以guest_username身份连接,因此它允许您拥有多个具有不同访问权限的FTP用户,但是一直保留重要的文件级所有者权限。
这将给你一个很好的简单,chrooted,安全,隔离和可pipe理的FTPconfiguration。
别客气。
请确保使用:
pasv_address=YOUR_PUBLIC_IP
在vsftpdconfiguration中,其中YOUR_PUBLIC_IP是EC2实例的公有IP,否则您将无法login到vsftpd。
其余的可以从第一个答案中使用,或者你也可以使用php-fpm与你select的用户一起工作。 例如,假设您要使用用户webuser,则需要执行下一步(所有步骤都应以root用户身份完成):1)创build用户并更改权限:
useradd -d /usr/share/nginx/www webuser chown webuser.webuser -R /usr/share/nginx/www
2)不要忘了input以下内容为这个用户添encryption码:
passwd webuser
3)通过让/etc/php-fpm.confconfiguration你的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
还可以用下面的内容创build一个/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)添加一个虚拟主机configuration到你的nginxconfiguration,如:
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服务。
这应该使它工作。
注意:确保创build/ usr / share / nginx / logs目录。
你可以做以下的事情来实现你所描述的…
请用您喜欢的任何FTP用户名replacearby 。
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
如果您已经创build了名为arby的FTP用户名,那么请执行以下操作,而不是第一个命令…
sudo usermod -d /usr/share/nginx/www -a -G www-data arby