У меня установлен vsftpd на Ubuntu 12.04LTS вместе с nginx, php и sql на экземпляре Amazon ec2. Веб-сервер готов, но у меня проблемы с подключением к FTP-серверу. Я не совсем уверен, как установить привилегии или какие параметры конфигурации мне могут не хватать.
По умолчанию расположение веб-корня находится в /usr/share/nginx/www
и он принадлежит root:root
. Веб-сервер работает как пользователь 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, который при входе в систему отображает мой веб-каталог с доступом для записи. Я пробовал несколько разных способов, но продолжаю сталкиваться с ошибками (либо нет соединения, нет доступа для записи, либо очень медленные таймауты.)
Обязательно используйте:
pasv_address=YOUR_PUBLIC_IP
В конфигурации vsftpd, где YOUR_PUBLIC_IP - это общедоступный IP-адрес вашего экземпляра EC2, поскольку в противном случае вы не сможете войти в 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) Настройте установку php-fpm, указав в /etc/php-fpm.conf следующее:
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.
Сначала обязательно откройте порты 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 с разным доступом, но при этом сохранять важные разрешения владельца на уровне файлов.
Это даст вам красивую простую, защищенную, изолированную и управляемую конфигурацию FTP с chrooted.
Пожалуйста.
Вы можете сделать следующее, чтобы достичь того, что вы описали ...
Пожалуйста, замените арби с любым именем пользователя 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
Если вы уже создали имя пользователя FTP с именем арби, то вместо первой команды выполните следующее ...
sudo usermod -d /usr/share/nginx/www -a -G www-data arby