Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_o_pure-ftpd_com_mysql_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalando e Configurando o Pure-FTPd com MySQL ======
 +
 +Instalando o pacote do Pure-ftpd
 +<sxh bash>
 +aptitude install mysql-server mysql-client pure-ftpd-mysql -y
 +</​sxh>​
 +
 +Agora vamos ajustar ele para rodar como deamon
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​Daemonize
 +</​sxh>​
 +
 +Vamos proibir o login de anomymous
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​NoAnonymous
 +</​sxh>​
 +
 +Vamos habilitar o chroot
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​ChrootEveryone
 +</​sxh>​
 +
 +Vamos habilitar o nosso servidor escutar somente em ipv4
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​IPV4Only
 +</​sxh>​
 +
 +Vamos limitar a quantidade de Cliente para 10
 +<sxh bash>
 +echo "​10"​ > /​etc/​pure-ftpd/​conf/​MaxClientsNumber
 +</​sxh>​
 +
 +Vamos limitar a quantidade de conexões de um IP
 +<sxh bash>
 +echo "​2"​ > /​etc/​pure-ftpd/​conf/​MaxClientsPerIP
 +</​sxh>​
 +
 +Vamos ajustar os logs
 +<sxh bash>
 +echo "​ftp"​ > /​etc/​pure-ftpd/​conf/​SyslogFacility
 +</​sxh>​
 +
 +Vamos habilitar o verbose nos logs para termos mais informações sobre o que os usuário estão fazendo
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​VerboseLog
 +</​sxh>​
 +
 +Vamos habilitar a listagem de arquivos ocultos
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​DisplayDotFiles
 +</​sxh>​
 +
 +Vamos desabilitar a resolução de nomes nos logs 
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​DontResolve
 +</​sxh>​
 +
 +Vamos ajustar o tempo máximo que um cliente pode ficar ocioso
 +<sxh bash>
 +echo "​10"​ > /​etc/​pure-ftpd/​conf/​MaxIdleTime
 +</​sxh>​
 +
 +Vamos ajustar o uid mínimo para efetuar login no ftp, pois vamos mascarar os usuários do banco de dados
 +<sxh bash>
 +echo "​9999"​ > /​etc/​pure-ftpd/​conf/​MinUID
 +</​sxh>​
 +
 +Vamos habilitar o usuário a poder escrever ou remover arquivos ocultos
 +<sxh bash>
 +echo "​no"​ > /​etc/​pure-ftpd/​conf/​ProhibitDotFilesWrite
 +</​sxh>​
 +
 +Vamos habilitar o usuário poder ler arquivos ocultos
 +<sxh bash>
 +echo "​no"​ > /​etc/​pure-ftpd/​conf/​ProhibitDotFilesRead
 +</​sxh>​
 +
 +Vamos habilitar o servidor a nunca deixar sobreescrever arquivos
 +<sxh bash>
 +echo "​no"​ > /​etc/​pure-ftpd/​conf/​AutoRename
 +</​sxh>​
 +
 +Vamos desabilitar o usuário a mudar a permissão de seus arquivos
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​NoChmod
 +</​sxh>​
 +
 +Vamos habilitar a criação do diretório home caso não exista
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​CreateHomeDir
 +</​sxh>​
 +
 +Vamos habilitar o percentual máximo de uso do disco, com isso quando chegar a este ponto não vamos mais habilitar uploads
 +<sxh bash>
 +echo "​85"​ > /​etc/​pure-ftpd/​conf/​MaxDiskUsage
 +</​sxh>​
 +
 +Vamos habilitar proteção contra usuário fazer coisa errada como chmod 0 nos arquivos
 +<sxh bash>
 +echo "​yes"​ > /​etc/​pure-ftpd/​conf/​CustomerProof
 +</​sxh>​
 +
 +Agora vamos criar o banco de dados e a tabela para armazenar os nossos usuários
 +<sxh sql>
 +mysql -u root -p
 +Enter password: ​
 +Welcome to the MySQL monitor. ​ Commands end with ; or \g.
 +Your MySQL connection id is 43
 +Server version: 5.5.37-0+wheezy1 (Debian)
 +
 +Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
 +
 +Oracle is a registered trademark of Oracle Corporation and/or its
 +affiliates. Other names may be trademarks of their respective
 +owners.
 +
 +Type '​help;'​ or '​\h'​ for help. Type '​\c'​ to clear the current input statement.
 +
 +mysql> create database pure;
 +Query OK, 1 row affected (0.00 sec)
 +
 +mysql> grant all privileges on pure.* to pure@localhost identified by '​pure';​
 +Query OK, 0 rows affected (0.00 sec)
 +
 +mysql> use pure;
 +Database changed
 +mysql> CREATE TABLE users (
 +    ->   User VARCHAR(16) BINARY NOT NULL,
 +    ->   ​Password VARCHAR(64) BINARY NOT NULL,
 +    ->   Uid INT(11) NOT NULL default '​9999',​
 +    ->   Gid INT(11) NOT NULL default '​9999',​
 +    ->   Dir VARCHAR(128) BINARY NOT NULL,
 +    ->   ​PRIMARY KEY  (User)
 +    -> );
 +Query OK, 0 rows affected (0.01 sec)
 +
 +mysql> \q
 +Bye
 +</​sxh>​
 +
 +Vamos criar um grupo chamado pure para marcarar o gid do sistema
 +<sxh bash>
 +groupadd -g 9999 pure
 +</​sxh>​
 +
 +Agora vamos criar um usuário chamado pure para utilizarmos ele para mascarar os uid do sistema
 +<sxh bash>
 +useradd -m -s /bin/false -g 9999 -u 9999 pure
 +</​sxh>​
 +
 +Agora vamos configurar o arquivo de conexão do pure com o MySQL
 +
 +Vamos fazer um backup do arquivo
 +<sxh bash>
 +cp /​etc/​pure-ftpd/​db/​mysql.conf /​etc/​pure-ftpd/​db/​mysql.conf.old
 +</​sxh>​
 +
 +Agora vamos ajustar o arquivo
 +<sxh apache>
 +vim /​etc/​pure-ftpd/​db/​mysql.conf
 +MYSQLServer ​    ​127.0.0.1
 +MYSQLPort ​      3306
 +MYSQLUser ​      pure
 +MYSQLPassword ​  pure
 +MYSQLDatabase ​  pure
 +MYSQLCrypt ​     password
 +MYSQLGetPW ​     SELECT Password FROM users WHERE User='​\L'​
 +MYSQLGetUID ​    ​SELECT Uid FROM users WHERE User='​\L'​
 +MYSQLDefaultUID 9999
 +MYSQLGetGID ​    ​SELECT Gid FROM users WHERE User='​\L'​
 +MYSQLDefaultGID 9999
 +MYSQLGetDir ​    ​SELECT Dir FROM users WHERE User='​\L'​
 +</​sxh>​
 +
 +Agora vamos adicionar um usuário no banco de dados
 +<sxh sql>
 +mysql -u root -p
 +Enter password: ​
 +Welcome to the MySQL monitor. ​ Commands end with ; or \g.
 +Your MySQL connection id is 48
 +Server version: 5.5.37-0+wheezy1 (Debian)
 +
 +Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
 +
 +Oracle is a registered trademark of Oracle Corporation and/or its
 +affiliates. Other names may be trademarks of their respective
 +owners.
 +
 +Type '​help;'​ or '​\h'​ for help. Type '​\c'​ to clear the current input statement.
 +
 +mysql> use pure;
 +Reading table information for completion of table and column names
 +You can turn off this feature to get a quicker startup with -A
 +
 +Database changed
 +mysql> insert into users(user, password, dir) values ('​douglas',​password('​123'​),'/​home/​pure/​douglas'​);​
 +Query OK, 1 row affected (0.02 sec)
 +
 +mysql> \q
 +</​sxh>​
 +
 +Agora vamos criar o diretório para o douglas
 +<sxh bash>
 +mkdir -p /​home/​pure/​douglas
 +</​sxh>​
 +
 +Agora vamos ajustar as permissões
 +<sxh bash>
 +chown -R pure:pure /​home/​pure/​douglas
 +</​sxh>​
 +
 +Agora vamos desabilitar o login via pam e deixar somente via MySQL
 +<sxh bash>
 +echo "​no"​ > /​etc/​pure-ftpd/​conf/​PAMAuthentication
 +</​sxh>​
 +
 +Agora vamos reiniciar o pure
 +<sxh bash>
 +/​etc/​init.d/​pure-ftpd-mysql restart
 +</​sxh>​
 +
 +Agora vamos testar a conexão e vamos criar um diretório
 +<sxh bash>
 +ftp localhost
 +ftp: connect to address ::1: Connection refused
 +Trying 127.0.0.1...
 +Connected to localhost.
 +220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
 +220-You are user number 1 of 50 allowed.
 +220-Local time is now 18:55. Server port: 21.
 +220-This is a private system - No anonymous login
 +220 You will be disconnected after 15 minutes of inactivity.
 +Name (localhost:​root):​ douglas
 +331 User douglas OK. Password required
 +Password:
 +230 OK. Current restricted directory is /
 +Remote system type is UNIX.
 +Using binary mode to transfer files.
 +ftp> ls
 +200 PORT command successful
 +150 Connecting to port 37494
 +226-Options:​ -l 
 +226 0 matches total
 +ftp> mkdir novo
 +257 "​novo"​ : The directory was successfully created
 +ftp> ls
 +200 PORT command successful
 +150 Connecting to port 35479
 +drwxr-xr-x ​   2 9999       ​pure ​            4096 Jun 17 18:56 novo
 +226-Options:​ -l 
 +226 1 matches total
 +ftp> cd ..
 +250 OK. Current directory is /
 +ftp> quit
 +221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
 +221 Logout.
 +</​sxh>​
 +
 +
 +====== Habilitando o TLS ======
 +
 +Habilitando que o TLS, se o valor for 1 podemos utilizar ou não a opção de TLS se o valor for dois é obrigatório utilizar o TLS na conexão.
 +<sxh bash>
 +echo "​1"​ > /​etc/​pure-ftpd/​conf/​TLS
 +</​sxh>​
 +
 +Vamos acessar o diretório que vai armazenar as nossas chaves
 +<sxh bash>
 +cd /​etc/​ssl/​private ​
 +</​sxh>​
 +
 +Agora vamos gerar a nossa chave auto-assinada
 +<sxh bash>
 +openssl req -x509 -nodes -newkey rsa:1024 -keyout /​etc/​ssl/​private/​pure-ftpd.pem -out /​etc/​ssl/​private/​pure-ftpd.pem ​
 +Generating a 1024 bit RSA private key
 +.........++++++
 +...................................................................................................................................................++++++
 +writing new private key to '/​etc/​ssl/​private/​pure-ftpd.pem'​
 +-----
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:BR
 +State or Province Name (full name) [Some-State]:​Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas ​
 +Organizational Unit Name (eg, section) []:IT
 +Common Name (e.g. server FQDN or YOUR name) []:​pure.douglasqsantos.com.br
 +Email Address []:​douglas.q.santos@gmail.com
 +</​sxh>​
 +
 +Agora vamos ajustar a permissão da nossa chave
 +<sxh bash>
 +chmod 400 pure-ftpd.pem
 +</​sxh>​
 +
 +Agora vamos reiniciar o serviço
 +<sxh bash>
 +/​etc/​init.d/​pure-ftpd-mysql restart ​
 +</​sxh>​
 +
 +====== Referências ======
 +  - http://​download.pureftpd.org/​pub/​pure-ftpd/​doc/​
 +  - http://​download.pureftpd.org/​pub/​pure-ftpd/​doc/​README.TLS