私はvsftpdをUbuntu12.04LTSにインストールし、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
...
ログインすると、書き込みアクセス権のあるWebディレクトリが表示されるFTPユーザーを作成する方法がわかりません。いくつかの方法で試しましたが、エラーが発生し続けます(接続がない、書き込みアクセスがない、またはタイムアウトが非常に遅い)。
まず、PASV FTPを許可するために、ファイアウォールでポート35000:36000を必ず開いてください。
次に、あなたの/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ユーザーを使用できますが、その間、重要なファイルレベルの所有者権限は保持されます。
これにより、シンプルで、chrootされた、安全で、分離された、管理しやすいFTP構成が得られます。
どういたしまして。
必ず使用してください:
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ディレクトリを作成してください。
あなたが説明したことを達成するためにあなたは以下をするかもしれません...
arbyを任意の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
arbyという名前のFTPユーザー名を既に作成している場合は、最初のコマンドの代わりに次のコマンドを実行してください...
Sudo usermod -d /usr/share/nginx/www -a -G www-data arby