Configurando o vsftpd com o nginx no ubuntu

2

Eu tenho vsftpd instalado no Ubuntu 12.04LTS junto com nginx, php e sql em uma instância do Amazon ec2. O servidor da web está pronto, mas estou com problemas para me conectar ao servidor FTP. Não tenho certeza de como definir os privilégios ou quais opções de configuração posso estar perdendo.

Por padrão, o local da raiz da Web está em /usr/share/nginx/www e é de propriedade de root:root . O servidor da Web é executado como usuário www-data no grupo www-data .

Eu abri a porta 21 e configurei as portas passivas no backend ec2 e no firewall ufw.

No vsftpd.conf, eu tenho:

...
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
...

Agora, não sei ao certo como criar o usuário de FTP que, quando eu fizer login, exiba meu diretório da web com acesso de gravação. Eu tentei algumas maneiras diferentes, mas continuo correndo em erros (sem conexão, sem acesso de gravação ou tempos limite muito lentos).

    
por arby 16.06.2012 / 21:58

3 respostas

1

Primeiro, certifique-se de abrir as portas 35000: 36000 no firewall para permitir o FTP PASV.

Então, para o seu /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

Em seguida, para criar um usuário, execute

/bin/htpasswd /etc/ftpd.passwd myusername

Em seguida, crie o arquivo anexo em /etc/vsftpd_user_conf/myusername

guest_username=www-data
local_root=/usr/share/nginx/www
write_enable=yes

O usuário se conecta como o guest_username declarado, por isso permite que você tenha vários usuários de FTP com acesso diferente, mas preservando as importantes permissões de proprietário em nível de arquivo.

Isso lhe dará uma configuração simples, simples, segura, isolada e gerenciável de FTP.

De nada.

    
por 20.06.2012 / 23:47
1

Por favor, certifique-se de usar:

pasv_address=YOUR_PUBLIC_IP

Na configuração vsftpd, onde YOUR_PUBLIC_IP é o IP público da sua instância do EC2, caso contrário, você não poderá fazer login no vsftpd.

O resto pode ser usado a partir da 1ª resposta, ou você pode alternativamente usar o php-fpm trabalhando com um usuário de sua escolha. Por exemplo, supondo que você quer usar user webuser, você precisará seguir os próximos passos (todas as etapas devem ser feitas como o usuário root): 1) Crie o usuário e altere os privilégios:

useradd -d /usr/share/nginx/www webuser
chown webuser.webuser -R /usr/share/nginx/www

2) Não se esqueça de adicionar uma senha para este usuário digitando:

passwd webuser

3) Configure a sua instalação do php-fpm fazendo com que o /etc/php-fpm.conf tenha o seguinte:

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

E também crie um /etc/php-fpm.d/webuser.conf com o próximo conteúdo:

[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) Adicione uma configuração vhost à sua configuração nginx como:

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) Reinicie seu serviço php-fpm e reinicie seu serviço nginx.

Isso deve funcionar.

Nota: Certifique-se de criar o diretório / usr / share / nginx / logs.

    
por 20.06.2012 / 13:39
0

Você pode fazer o seguinte para conseguir o que descreveu ...

Substitua arby pelo nome de usuário do FTP que preferir.

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

Se você já criou um nome de usuário FTP chamado arby , faça o seguinte em vez do primeiro comando ...

sudo usermod -d /usr/share/nginx/www -a -G www-data arby

    
por 19.06.2012 / 05:22