Назад | Перейти на главную страницу

Настройка vsftpd с nginx в ubuntu

У меня установлен 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