<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos ftp - Remontti</title>
	<atom:link href="https://blog.remontti.com.br/tag/ftp/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.remontti.com.br/tag/ftp</link>
	<description>rudimar@remontti</description>
	<lastBuildDate>Wed, 06 Mar 2024 17:38:43 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.remontti.com.br/wp-content/uploads/2024/09/icone-rr-80x80.png</url>
	<title>Arquivos ftp - Remontti</title>
	<link>https://blog.remontti.com.br/tag/ftp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</title>
		<link>https://blog.remontti.com.br/6975</link>
					<comments>https://blog.remontti.com.br/6975#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 07 Dec 2022 18:47:28 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Bullseye]]></category>
		<category><![CDATA[certificado]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debina bullseye]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[ftp ftp]]></category>
		<category><![CDATA[ftpd]]></category>
		<category><![CDATA[guro seguro]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[ssl ssl]]></category>
		<category><![CDATA[tls tls]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=6975</guid>

					<description><![CDATA[<p>Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download. Requisito: Debian 11&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/6975">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.</p>
<p><span id="more-6975"></span><br />
<img fetchpriority="high" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd.jpg" alt="" width="1000" height="474" class="alignnone size-full wp-image-6981" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd.jpg 1000w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-520x245.jpg 520w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-720x340.jpg 720w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p><strong>Requisito:</strong><br />
<a href="https://blog.remontti.com.br/5792" rel="noopener noreferrer" target="_blank">Debian 11 Instalação Limpa</a></p>
<p>Vire root de maneira correta no Debian 11!</p>
<pre class="remontti-code"># su -</pre>
<h3>Instalação do banco de dados MariaDB</h3>
<pre class="remontti-code"># apt install mariadb-server mariadb-client </pre>
<p>Por padrão o pacote MaraiDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB.</p>
<p><strong>Definindo senha para o root do mariaDB</strong><br />
Para aumentar a seguraçã vamos definir uma senha para o usuário root do MariDB, não esqueça de alterar <strong>ALTERE_3ST4_SENHA</strong> pela sua senha.</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
ALTER USER &#039;root&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;ALTERE_3ST4_SENHA&#039;;
FLUSH PRIVILEGES;
EXIT;</pre>
<p>Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!</p>
<pre class="remontti-code"># &gt; /root/.mysql_history</pre>
<h3>Instalação do Pure FTP</h3>
<pre class="remontti-code"># apt install pure-ftpd-mysql</pre>
<p>Agora criaremos nosso grupo FTP (<em>grupoftp</em>) e usuário (<em>pureftpd</em>) para que nosso usuários virtuais sejam mapeados.</p>
<pre class="remontti-code"># groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c &quot;pureftpd user&quot; -g ftpgroup ftpuser</pre>
<pre class="remontti-code"># vim /etc/default/pure-ftpd-common</pre>
<p>altere</p>
<pre class="remontti-code">UPLOADUID=
UPLOADGID=</pre>
<p>para </p>
<pre class="remontti-code">UPLOADUID=2001
UPLOADGID=2001</pre>
<p>Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.</p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<p>Entre com a senha de root criada anteriormente.  Não esqueça de alterar senha <strong>(SENHA_FTP_USER)</strong>.</p>
<pre class="remontti-code">CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost.localdomain&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
FLUSH PRIVILEGES;
</pre>
<p>Crie a tabela</p>
<pre class="remontti-code">USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default &#039;&#039;,
status enum(&#039;0&#039;,&#039;1&#039;) NOT NULL default &#039;0&#039;,
Password varchar(64) NOT NULL default &#039;&#039;,
Uid varchar(11) NOT NULL default &#039;-1&#039;,
Gid varchar(11) NOT NULL default &#039;-1&#039;,
Dir varchar(128) NOT NULL default &#039;&#039;,
ULBandwidth smallint(5) NOT NULL default &#039;0&#039;,
DLBandwidth smallint(5) NOT NULL default &#039;0&#039;,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default &#039;*&#039;,
QuotaSize smallint(5) NOT NULL default &#039;0&#039;,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

EXIT;
</pre>
<p>Salve o arquivo original /etc/pure-ftpd/db/mysql.conf e crie um novo com novas configurações, mais uma vez preste atenção a senha [SENHA_FTP_USER].</p>
<pre class="remontti-code"># mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)</pre>
<p>Esteja certo que você mudou o campo MYSQLPassword &#8216;SENHA_FTP_USER&#8217;</p>
<p>A configuração <strong>ChrootEveryone</strong> fará com que o PureFTPd faça chroot em todos os usuários virtuais em seu diretório pessoal, para que ele não consiga procurar diretórios e arquivos fora do diretório pessoal. A linha <strong>CreateHomeDir</strong> fará com que o PureFTPd crie o diretório inicial de um usuário quando o usuário efetuar login e o diretório inicial ainda não existir.</p>
<pre class="remontti-code"># echo yes &gt; /etc/pure-ftpd/conf/ChrootEveryone
# echo yes &gt; /etc/pure-ftpd/conf/CreateHomeDir
# echo 1 &gt; /etc/pure-ftpd/conf/TLS
# echo HIGH &gt; /etc/pure-ftpd/conf/TLSCipherSuite</pre>
<p>Gere os certificados.</p>
<pre class="remontti-code"># openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
# openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \
  /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem
# chmod 600 /etc/ssl/private/*.pem</pre>
<p>Vamos criar agora um usuário, Qual ficará dentro do diretório <strong>/var/pure-ftpd/ </strong> onde vou deixar todos meus usuários criado, porém você pode escolher qualquer diretório, usarei a pasta /var/ pois seria o &#8220;lugar correto&#8221;.</p>
<p>Entre no mariadb com seu usuario pureftpd e senha para fazer a criação do usuário ftp, no meu ex vou criar o usuário chamado remontti.</p>
<pre class="remontti-code"># mysql -u pureftpd -p</pre>
<pre class="remontti-code">USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) 
VALUES (&#039;remontti&#039;, &#039;1&#039;, MD5(&#039;SUA_SENHA&#039;), &#039;2001&#039;, &#039;2001&#039;, &#039;/var/pure-ftpd/remontti&#039;, &#039;100&#039;, &#039;100&#039;, &#039;&#039;, &#039;*&#039;, &#039;50&#039;, &#039;0&#039;);

SELECT * FROM ftpd;
EXIT;</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png" data-rel="lightbox-gallery-cZeHMfAx" data-rl_title="" data-rl_caption="" title=""><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png" alt="" width="2076" height="896" class="alignnone size-full wp-image-6984" srcset="https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb.png 2076w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-300x129.png 300w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-1024x442.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-768x331.png 768w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-1536x663.png 1536w, https://blog.remontti.com.br/wp-content/uploads/2022/12/pure-ftpd-mysql-mariadb-2048x884.png 2048w" sizes="(max-width: 2076px) 100vw, 2076px" /></a><br />
Limpe o histórico do mariadb. Não queremos ninguém vendo o q digitamos lá <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code"># &gt; /root/.mysql_history</pre>
<p>Ao fazer login o diretório /var/pure-ftpd/USUARIO será criado automaticamente.</p>
<p>Restarte o serviço e verifique o status do mesmo</p>
<pre class="remontti-code"># systemctl restart pure-ftpd-mysql
# systemctl status pure-ftpd-mysql</pre>
<p>Sempre que você queira criar um novo usuário, você tem que criar uma entrada na tabela ftpd.<br />
Explicando a estrutura da tabela:</p>
<p><strong>User:</strong> Seu usuário (ex. como no nosso usuário acima: teste).<br />
<strong>Status: </strong>0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.<br />
<strong>Password:</strong> A senha do usuário. A senha está encriptada com MD5.<br />
<strong>UID:</strong> O userid do usuário ftp que você criou (ex: 2001)<br />
<strong>GID: </strong>O groupid do grupo ftp que você criou (ex: 2001).<br />
<strong>Dir:</strong> Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.<br />
<strong>ULBandwidth: </strong>Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.<br />
<strong>DLBandwidth: </strong>Controle de Download em KB/sec. Use 0 para que seja ilimitado.<br />
<strong>Comment: </strong>Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.<br />
<strong>Ipaccess: </strong>Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou &#8216;*&#8217; para qualquer endereço IP.<br />
<strong>QuotaSize: </strong>Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.<br />
<strong>QuotaFiles:</strong> Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.</p>
<h3>Protegendo com Fail2ban</h3>
<pre class="remontti-code"># apt install fail2ban
# echo yes &gt; /etc/pure-ftpd/conf/DontResolve
# vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Adicione o filtro pure-ftpd.</p>
<pre class="remontti-code">[sshd]
enabled = true
[pure-ftpd]
enabled = true</pre>
<p>Restarte o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se você tiver interesse em ter uma interface web para gerenciamento recomendo:<br />
<a href="https://blog.remontti.com.br/5893" rel="noopener noreferrer" target="_blank">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin + Let’s Encrypt no Debian 11 bullseye “LAMP”</a></p>
<p>Gostou?</p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fonte:<a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL" rel="noopener noreferrer" target="_blank"> http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL</a></p>
<p>O post <a href="https://blog.remontti.com.br/6975">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados MariaDB/MySQL com Debian 11 Bullseye</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/6975/feed</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title>Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</title>
		<link>https://blog.remontti.com.br/3865</link>
					<comments>https://blog.remontti.com.br/3865#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 18 Dec 2019 00:50:02 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[buster]]></category>
		<category><![CDATA[certificado]]></category>
		<category><![CDATA[criptografado]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[debina buster]]></category>
		<category><![CDATA[Fail2ban]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[MariaDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[seguro]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[tls]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3865</guid>

					<description><![CDATA[<p>Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download. Requisito: Debian 10&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3865">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p style="text-align: left;">Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.</p>
<p><span id="more-3865"></span><br />
<img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp.jpg" alt="" width="1000" height="474" class="alignnone size-full wp-image-3876" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp.jpg 1000w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-768x364.jpg 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-520x245.jpg 520w, https://blog.remontti.com.br/wp-content/uploads/2019/12/ftp-720x340.jpg 720w" sizes="(max-width: 1000px) 100vw, 1000px" /></p>
<p><strong>Requisito:</strong><br />
<a href="https://blog.remontti.com.br/2966" rel="noopener noreferrer" target="_blank">Debian 10 Stretch / Instalação Limpa</a></p>
<p>Vire root de maneira correta no Debian 10!</p>
<pre class="remontti-code"># su -</pre>
<h3>Instalação do banco de dados MariaDB</h3>
<pre class="remontti-code"># apt install mariadb-server mariadb-client </pre>
<p>Por padrão o pacote MaraiDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB.<br />
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB. Mas isso é estranho, pois minha senha do root do MariaDB é diferente do meu usuário unix.<br />
Bom se você é meio paranoico com segurança, para alterar a senha do usuário root do MariaDB de forma bruta faça o seguinte:</p>
<pre class="remontti-code"># mariadb -u root</pre>
<pre class="remontti-code">USE mysql;
UPDATE user SET password=PASSWORD(&#039;SENHA_DB_ROOT&#039;) WHERE User=&#039;root&#039;;
UPDATE user SET plugin=&quot;mysql_native_password&quot;;
FLUSH PRIVILEGES;
quit;</pre>
<h3>Instalação do Pure FTP</h3>
<pre class="remontti-code"># apt install pure-ftpd-mysql</pre>
<p>Agora criaremos nosso grupo FTP (<em>grupoftp</em>) e usuário (<em>pureftpd</em>) para que nosso usuários virtuais sejam mapeados.</p>
<pre class="remontti-code"># groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c &quot;pureftpd user&quot; -g ftpgroup ftpuser</pre>
<pre class="remontti-code"># vim /etc/default/pure-ftpd-common</pre>
<p>altere</p>
<pre class="remontti-code">UPLOADUID=
UPLOADGID=</pre>
<p>para </p>
<pre class="remontti-code">UPLOADUID=2001
UPLOADGID=2001</pre>
<p>Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.</p>
<pre class="remontti-code"># mariadb -u root -p</pre>
<p>Entre com a senha de root criada anteriormente.  Não esqueça de alterar senha <strong>(SENHA_FTP_USER)</strong>.</p>
<pre class="remontti-code">CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost.localdomain&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
FLUSH PRIVILEGES;
</pre>
<p>Crie a tabela</p>
<pre class="remontti-code">USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default &#039;&#039;,
status enum(&#039;0&#039;,&#039;1&#039;) NOT NULL default &#039;0&#039;,
Password varchar(64) NOT NULL default &#039;&#039;,
Uid varchar(11) NOT NULL default &#039;-1&#039;,
Gid varchar(11) NOT NULL default &#039;-1&#039;,
Dir varchar(128) NOT NULL default &#039;&#039;,
ULBandwidth smallint(5) NOT NULL default &#039;0&#039;,
DLBandwidth smallint(5) NOT NULL default &#039;0&#039;,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default &#039;*&#039;,
QuotaSize smallint(5) NOT NULL default &#039;0&#039;,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

quit; 
</pre>
<p>Salve o arquivo original /etc/pure-ftpd/db/mysql.conf e crie um novo com novas configurações, mais uma vez preste atenção a senha [SENHA_FTP_USER].</p>
<pre class="remontti-code"># mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">MYSQLSocket /var/run/mysqld/mysqld.sock
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)</pre>
<p>Esteja certo que você mudou o campo MYSQLPassword &#8216;SENHA_FTP_USER&#8217;</p>
<p>A configuração <strong>ChrootEveryone</strong> fará com que o PureFTPd faça chroot em todos os usuários virtuais em seu diretório pessoal, para que ele não consiga procurar diretórios e arquivos fora do diretório pessoal. A linha <strong>CreateHomeDir</strong> fará com que o PureFTPd crie o diretório inicial de um usuário quando o usuário efetuar login e o diretório inicial ainda não existir.</p>
<pre class="remontti-code"># echo yes &gt; /etc/pure-ftpd/conf/ChrootEveryone
# echo yes &gt; /etc/pure-ftpd/conf/CreateHomeDir
# echo 1 &gt; /etc/pure-ftpd/conf/TLS
# echo HIGH &gt; /etc/pure-ftpd/conf/TLSCipherSuite</pre>
<p>Gere os certificados.</p>
<pre class="remontti-code"># openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048
# openssl req -x509 -nodes -newkey rsa:2048 -sha256 -keyout \
  /etc/ssl/private/pure-ftpd.pem \
  -out /etc/ssl/private/pure-ftpd.pem
# chmod 600 /etc/ssl/private/*.pem</pre>
<p>Vamos criar agora um usuário, Qual ficará dentro do diretório <strong>/var/pure-ftpd/ </strong> onde vou deixar todos meus usuários criado, porém você pode escolher qualquer diretório, usarei a pasta /var/ pois seria o &#8220;lugar correto&#8221;.</p>
<p>Entre no mariadb com seu usuario pureftpd e senha para fazer a criação do usuário ftp, no meu ex vou criar o usuário chamado remontti.</p>
<pre class="remontti-code"># mysql -u pureftpd -p</pre>
<pre class="remontti-code">USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) 
VALUES (&#039;remontti&#039;, &#039;1&#039;, MD5(&#039;SUA_SENHA&#039;), &#039;2001&#039;, &#039;2001&#039;, &#039;/var/pure-ftpd/remontti&#039;, &#039;100&#039;, &#039;100&#039;, &#039;&#039;, &#039;*&#039;, &#039;50&#039;, &#039;0&#039;);

quit;</pre>
<p>Limpe o histórico do mariadb. Não queremos ninguém vendo o q digitamos lá <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="remontti-code"># echo &gt; /root/.mysql_history</pre>
<p>Ao fazer login o diretório /var/pure-ftpd/USUARIO será criado automaticamente.</p>
<p>Restarte o serviço e verifique o status do mesmo</p>
<pre class="remontti-code"># systemctl restart pure-ftpd-mysql
# systemctl status pure-ftpd-mysql</pre>
<p>Sempre que você queira criar um novo usuário, você tem que criar uma entrada na tabela ftpd.<br />
Explicando a estrutura da tabela:</p>
<p><strong>User:</strong> Seu usuário (ex. como no nosso usuário acima: teste).<br />
<strong>Status: </strong>0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.<br />
<strong>Password:</strong> A senha do usuário. A senha está encriptada com MD5.<br />
<strong>UID:</strong> O userid do usuário ftp que você criou (ex: 2001)<br />
<strong>GID: </strong>O groupid do grupo ftp que você criou (ex: 2001).<br />
<strong>Dir:</strong> Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.<br />
<strong>ULBandwidth: </strong>Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.<br />
<strong>DLBandwidth: </strong>Controle de Download em KB/sec. Use 0 para que seja ilimitado.<br />
<strong>Comment: </strong>Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.<br />
<strong>Ipaccess: </strong>Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou &#8216;*&#8217; para qualquer endereço IP.<br />
<strong>QuotaSize: </strong>Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.<br />
<strong>QuotaFiles:</strong> Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.</p>
<h3>Protegendo com Fail2ban</h3>
<pre class="remontti-code"># apt install fail2ban
# echo yes &gt; /etc/pure-ftpd/conf/DontResolve
# vim /etc/fail2ban/jail.d/defaults-debian.conf</pre>
<p>Adicione o filtro pure-ftpd.</p>
<pre class="remontti-code">[sshd]
enabled = true
[pure-ftpd]
enabled = true</pre>
<p>Restarte o fail2ban</p>
<pre class="remontti-code"># systemctl restart fail2ban</pre>
<p>Se você tiver interesse em ter uma interface web para gerenciamento recomendo:<br />
<a href="https://blog.remontti.com.br/3006" rel="noopener noreferrer" target="_blank">Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”</a></p>
<p>Gostou?</p>
<p>Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>Fonte:<a href="http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL" rel="noopener noreferrer" target="_blank"> http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL</a></p>
<p>O post <a href="https://blog.remontti.com.br/3865">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3865/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>Criando backup do RouterOS/Mikrotik via FTP</title>
		<link>https://blog.remontti.com.br/3878</link>
					<comments>https://blog.remontti.com.br/3878#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Wed, 18 Dec 2019 00:40:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mikrotik]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[backuk]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<category><![CDATA[routeos]]></category>
		<category><![CDATA[salvar]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[seguro]]></category>
		<guid isPermaLink="false">https://blog.remontti.com.br/?p=3878</guid>

					<description><![CDATA[<p>Neste exemplo vou ensinar como fazer um backup do seu routerOS/Mikroitk via FTP. Testei com as versões > 6.48.x e > 7.6 Requisitos ter um servidor FTP 😛 Sugestão: Como criar um servidor FTP&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/3878">Criando backup do RouterOS/Mikrotik via FTP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp.jpg" alt="" width="720" height="340" class="alignnone size-full wp-image-3886" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp.jpg 720w, https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp-300x142.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/mikrotik_backup_ftp-520x245.jpg 520w" sizes="auto, (max-width: 720px) 100vw, 720px" /><br />
Neste exemplo vou ensinar como fazer um backup do seu routerOS/Mikroitk via FTP.</p>
<p>Testei com as versões > 6.48.x  e > 7.6</p>
<p>Requisitos ter um servidor FTP <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f61b.png" alt="😛" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br />
Sugestão: <a href="https://blog.remontti.com.br/3865" rel="noopener noreferrer" target="_blank">Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10</a></p>
<p>Vamos ao script, você precisa alterar:<br />
:global host <strong>____IP/DNS_SERVIDOR_FTP____</strong><br />
:global usuario <strong>____USER____</strong><br />
:global senha<strong> ____SENHA____</strong><br />
:global diretorio<strong> ____pastaX____</strong></p>
<p>Acesse o menu: <strong>System</strong> >> <strong>Script</strong> e depois em [+]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png" data-rel="lightbox-gallery-MTst98vA" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png" alt="" width="1680" height="909" class="alignnone size-full wp-image-3882" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp.png 1680w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-300x162.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-1024x554.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-768x416.png 768w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp-1536x831.png 1536w" sizes="auto, (max-width: 1680px) 100vw, 1680px" /></a></p>
<p>O nome do arquivo será o mesmo que você definiu em <strong>System</strong> >> <strong>Identity</strong>, serão criado dois arquivos, uma backup e um export (AAAA-MM-DD.NOME.backup AAAA-MM-DD.NOME.rsc) </p>
<pre class="remontti-code">:log warning &quot;***************************************&quot;
# Conexão FTP
:global host ____IP/DNS_SERVIDOR_FTP____
:global usuario ____USER____
:global senha ____SENHA____
:global diretorio ____pastaX____
# Pega o nome do Router
:global identifica [/system identity get name ];
# Gera data no formato AAAA-MM-DD
:global data [/system clock get date]
:global meses (&quot;jan&quot;,&quot;feb&quot;,&quot;mar&quot;,&quot;apr&quot;,&quot;may&quot;,&quot;jun&quot;,&quot;jul&quot;,&quot;aug&quot;,&quot;sep&quot;,&quot;oct&quot;,&quot;nov&quot;,&quot;dec&quot;);
:global ano ([:pick $data 7 11])
:global mestxt ([:pick $data 0 3])
:global mm ([ :find $meses $mestxt -1 ] + 1);
:if ($mm &lt; 10) do={ :set mm (&quot;0&quot; . $mm); }
:global mes ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])
:global dia ([:pick $data 4 6])
:log info &quot;Gerando backup: $ano-$mes-$dia.$identifica.backup&quot;;
/system backup save name=&quot;$ano-$mes-$dia.$identifica&quot;;
:log info &quot;Gerando export: $ano-$mes-$dia.$identifica.rsc&quot;;
/export file=&quot;$ano-$mes-$dia.$identifica&quot;
:log info &quot;Processando...&quot;;
:delay 5s
:log info &quot;Conectando FTP Server...&quot;;
:log info &quot;Enviando Backup [$ano-$mes-$dia.$identifica.backup] ...&quot;;
/tool fetch address=$host src-path=&quot;$ano-$mes-$dia.$identifica.backup&quot; user=&quot;$usuario&quot; password=&quot;$senha&quot; port=21 upload=yes mode=ftp dst-path=&quot;$diretorio/$ano-$mes-$dia.$identifica.backup&quot;
:log info &quot;Enviando Export [$ano-$mes-$dia.$identifica.rsc] ...&quot;;
/tool fetch address=$host src-path=&quot;$ano-$mes-$dia.$identifica.rsc&quot; user=&quot;$usuario&quot; password=&quot;$senha&quot; port=21 upload=yes mode=ftp dst-path=&quot;$diretorio/$ano-$mes-$dia.$identifica.rsc&quot;
:delay 1
:log info &quot;Backup enviado com sucesso...&quot;;
:log info &quot;Removendo arquivos...&quot;;
 /file remove &quot;$ano-$mes-$dia.$identifica.backup&quot;
 /file remove &quot;$ano-$mes-$dia.$identifica.rsc&quot;
:log info &quot;Rotina de backup finalizada...&quot;;
:log warning &quot;***************************************&quot;;</pre>
<p>Agora será preciso agenda-lo para execução a cada X período, no meu exemplo vou definir que todos os meio dias a cada 3 dias. Ajuste de acordo com suas necessidades:<br />
Acesse o menu: <strong>System</strong> >> <strong>Scheduler</strong> [+]<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png" data-rel="lightbox-gallery-MTst98vA" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png" alt="" width="1353" height="785" class="alignnone size-full wp-image-3884" srcset="https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2.png 1353w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-300x174.png 300w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-1024x594.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2019/12/backup_mk_ftp2-768x446.png 768w" sizes="auto, (max-width: 1353px) 100vw, 1353px" /></a></p>
<p>Se estiver com preguiça <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /> pode copiar as linhas abaixo e colar no terminal, depois só alterar as variáveis.</p>
<pre class="remontti-code">/system script
add dont-require-permissions=no name=backup_ftp owner=remontti policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=&quot;:log warning \&quot;***************************************\&quot;\r\
    \n# Conex\E3o FTP\r\
    \n:global host ____IP/DNS_SERVIDOR_FTP____\r\
    \n:global usuario ___USUARIO___\r\
    \n:global senha ___SENHA___\r\
    \n:global diretorio ___NOME_DA_PASTA___\r\
    \n# Pega o nome do Router\r\
    \n:global identifica [/system identity get name ];\r\
    \n# Gera data no formato AAAA-MM-DD\r\
    \n:global data [/system clock get date]\r\
    \n:global meses (\&quot;jan\&quot;,\&quot;feb\&quot;,\&quot;mar\&quot;,\&quot;apr\&quot;,\&quot;may\&quot;,\&quot;jun\&quot;,\&quot;jul\&quot;,\&quot;aug\&quot;,\&quot;sep\&quot;,\&quot;oct\&quot;,\&quot;nov\&quot;,\&quot;dec\&quot;);\r\
    \n:global ano ([:pick \$data 7 11])\r\
    \n:global mestxt ([:pick \$data 0 3])\r\
    \n:global mm ([ :find \$meses \$mestxt -1 ] + 1);\r\
    \n:if (\$mm &lt; 10) do={ :set mm (\&quot;0\&quot; . \$mm); }\r\
    \n:global mes ([:pick \$ds 7 11] . \$mm . [:pick \$ds 4 6])\r\
    \n:global dia ([:pick \$data 4 6])\r\
    \n:log info \&quot;Gerando backup: \$ano-\$mes-\$dia.\$identifica.backup\&quot;;\r\
    \n/system backup save name=\&quot;\$ano-\$mes-\$dia.\$identifica\&quot;;\r\
    \n:log info \&quot;Gerando export: \$ano-\$mes-\$dia.\$identifica.rsc\&quot;;\r\
    \n/export file=\&quot;\$ano-\$mes-\$dia.\$identifica\&quot;\r\
    \n:log info \&quot;Processando...\&quot;;\r\
    \n:delay 5s\r\
    \n:log info \&quot;Conectando FTP Server...\&quot;;\r\
    \n:log info \&quot;Enviando Backup [\$ano-\$mes-\$dia.\$identifica.backup] ...\&quot;;\r\
    \n/tool fetch address=\$host src-path=\&quot;\$ano-\$mes-\$dia.\$identifica.backup\&quot; user=\&quot;\$usuario\&quot; password=\&quot;\$senha\&quot; port=21 upload=yes mode=ftp dst-path=\&quot;\$diretorio/\$ano-\$mes-\$dia.\$identifica.backup\&quot;\
    \r\
    \n:log info \&quot;Enviando Export [\$ano-\$mes-\$dia.\$identifica.rsc] ...\&quot;;\r\
    \n/tool fetch address=\$host src-path=\&quot;\$ano-\$mes-\$dia.\$identifica.rsc\&quot; user=\&quot;\$usuario\&quot; password=\&quot;\$senha\&quot; port=21 upload=yes mode=ftp dst-path=\&quot;\$diretorio/\$ano-\$mes-\$dia.\$identifica.rsc\&quot;\r\
    \n:delay 1\r\
    \n:log info \&quot;Backup enviado com sucesso...\&quot;;\r\
    \n:log info \&quot;Removendo arquivos...\&quot;;\r\
    \n /file remove \&quot;\$ano-\$mes-\$dia.\$identifica.backup\&quot;\r\
    \n /file remove \&quot;\$ano-\$mes-\$dia.\$identifica.rsc\&quot;\r\
    \n:log info \&quot;Rotina de backup finalizada...\&quot;;\r\
    \n:log warning \&quot;***************************************\&quot;;&quot;

/system scheduler
add interval=3d name=backup_ftp on-event=backup_ftp policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=dec/17/2019 start-time=12:00:00</pre>
<p>Simples né! Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!<br />
<a href="https://blog.remontti.com.br/doar"><img decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2019/07/quero-doar-remontti.png" /></a></p>
<p>Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato <a href="https://blog.remontti.com.br/meucontato" rel="noopener noreferrer" target="_blank">clique aqui.</a></p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/3878">Criando backup do RouterOS/Mikrotik via FTP</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/3878/feed</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
			</item>
		<item>
		<title>Criando uma maquina virtual com linux (Debian) para Desenvolvedores Web (LDAMPS)</title>
		<link>https://blog.remontti.com.br/1730</link>
					<comments>https://blog.remontti.com.br/1730#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Mon, 20 Feb 2017 02:08:28 +0000</pubDate>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[SFTP]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xamp]]></category>
		<category><![CDATA[xampp]]></category>
		<guid isPermaLink="false">http://blog.remontti.com.br/?p=1730</guid>

					<description><![CDATA[<p>LDAMPS (Linux / DNS / Apache / MySQL / PHP / SFTP) A ideia deste tutorial é criar um cenário mais legal que um simples &#8220;xampp/easyphp&#8221;, e sim criar nosso próprio &#8220;servidor de hospedagem&#8221;&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/1730">Criando uma maquina virtual com linux (Debian) para Desenvolvedores Web (LDAMPS)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><strong></strong><strong>LDAMPS</strong> (Linux / DNS / Apache / MySQL / PHP / SFTP)</p>
<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/web-dev-icon.jpg" alt="" width="800" height="510" class="alignnone size-full wp-image-1764" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/web-dev-icon.jpg 800w, https://blog.remontti.com.br/wp-content/uploads/2017/02/web-dev-icon-300x191.jpg 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/web-dev-icon-768x490.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>A ideia deste tutorial é criar um cenário mais legal que um simples &#8220;xampp/easyphp&#8221;, e sim criar nosso próprio &#8220;servidor de hospedagem&#8221; onde vamos criar domínios virtuais quais poderemos acessá-los para fazer simulações em cima de ambientes mais reais. </p>
<p>Para crianção da maquina virtual no VirtualBox e a Instalação do Debian siga os tutoriais abaixo.</p>
<p><a href="https://blog.remontti.com.br/1134" target="_blank" rel="noopener">Criando uma máquina virtual no Virtual Box</a></p>
<p>Na instalação, na parte da configuração não é necessário fixar um IP, pode recebe-lo automaticamente via DHCP, assim se você sair da sua rede pode levar a experiência para outras redes, porém será necessário alterar o endereço IP nas configurações do bind cada vez que seu servidor receber um novo IP, falarei disso nas configurações do BIND (é apenas um arquivo nada d+).</p>
<p><a href="https://blog.remontti.com.br/1152" target="_blank" rel="noopener">Instalação do Debian 8 Jessie Limpa passo-a-passo</a></p>
<p>Após instalação do Debina, instalaremos o SSH para acessamos remotamente via Terminal ou com Putty (Windows). Vou ainda instalar o editor vim, que é meu preferido, mas você pode usar nano, pico entre outros.</p>
<pre class="remontti-code"># apt install ssh vim</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_46_54.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_46_54-300x167.png" alt="" width="300" height="167" class="alignnone size-medium wp-image-1735" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_46_54-300x167.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_46_54.png 720w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Lembre-se que no processo da criação da maquina virtual nossa placa de rede ficou em modo bridge, ou seja isso faz com que a comunicação existente em sua rede seja de ponto-a-ponto entre todos que nela estão conectados.</p>
<p>Sempre que iniciar sua máquina virtual será necessário verificar qual IP recebeu. </p>
<pre class="remontti-code"># ifconfig </pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_52_46.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_52_46-300x167.png" alt="" width="300" height="167" class="alignnone size-medium wp-image-1736" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_52_46-300x167.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/VirtualBox_Debian-Dev-Web_19_02_2017_15_52_46.png 720w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
No meu caso minha maquina está com o IP 10.0.0.109. Agora vamos acessar nosso servidor por SSH, se você já utiliza linux abra em seu terminal e digite $ ssh seuusuario@ip-do-seu-servidor ou abra o Putty e informe o IP do seu servidor.<br />
Entre com sua senha, e após vire administrador (root) com o comando #su<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_155718.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_155718-300x201.png" alt="" width="300" height="201" class="alignnone size-medium wp-image-1737" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_155718-300x201.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_155718-768x515.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_155718.png 842w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Tem duas coisar que sempre faço após instalar um debian, faça se desejar.<br />
A primeira é colorir o bash.</p>
<pre class="remontti-code"># vim /root/.bashrc</pre>
<p>Descomente </p>
<pre class="remontti-code">
export LS_OPTIONS=&#039;--color=auto&#039;
eval &quot;`dircolors`&quot;
alias ls=&#039;ls $LS_OPTIONS&#039;
alias ll=&#039;ls $LS_OPTIONS -l&#039;
alias l=&#039;ls $LS_OPTIONS -lha&#039;
</pre>
<p>Insira ao final:</p>
<pre class="remontti-code">
PS1=&#039;${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u\[\033[00m\]@\[\033[01;36m\]\h\[\033[00m\]:\[\033[01;37m\]\w\[\033[01;32m\]\$\[\033[00m\] &#039;
</pre>
<p>Deslogue do root <em>(# exit)</em>, e logue novamente <em>(# su)</em><br />
Pronto nosso bash está com &#8220;mais vida&#8221; <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Você encontra mais detalhes em: <a href="https://blog.remontti.com.br/141" target="_blank" rel="noopener">Colorindo seu Bash</a></p>
<p>A segunda é melhorar o autocomplete:<br />
<a href="https://blog.remontti.com.br/1318" target="_blank" rel="noopener">Bash com autocomplete “turbinado” no Debian</a></p>
<p>Precisamos instalar nosso servidor web, para isso siga o tutorial abaixo.</p>
<p><a href="https://blog.remontti.com.br/1296" target="_blank" rel="noopener">Passo-a-passo como criar um servidor web Apache2, PHP5, MySQL, PHPMyAdmin “LAMP” no Debian 8</a></p>
<p>Agora vem a parte legal!! Configurar nosso servidor para resolver nomes (Sevidor DNS) e nele configurar alguns domínios &#8220;fake&#8221; quais poderemos acessar.<br />
<font color="red"><br />
<i>Vale lembrar que você não deve fazer isso em uma máquina com IP válido, caso fizer isso vai estar deixando consultas recursivas aberta para o mundo &#8220;escravizar-lo&#8221;, não vou entrar em detalhes das configurações avançadas do bind, o intuito aqui é ensinar pessoas a ter um cenário para programação web, em um ambiente local. Se deseja saber como configurar um servidor DNS acesse:</font> <a href="https://blog.remontti.com.br/1397">Servidor DNS Recursivo, Autoritativo e Reverso com Bind9 (IPv4+IPv6)</a>. </i></p>
<p>No exemplo vou inventar dois domínios fake:<br />
dominio1.com.br<br />
dominio2.com.br</p>
<p>Instalaremos o <a href="https://pt.wikipedia.org/wiki/BIND" target="_blank" rel="noopener">BIND</a> </p>
<pre class="remontti-code"># apt install bind9</pre>
<p>Altere o DNS do seus servidor para ele mesmo</p>
<pre class="remontti-code"># echo &#039;nameserver 127.0.0.1&#039; &gt; /etc/resolv.conf
</pre>
<p>Para prevenir que o DHCP não mude novamente seu DNS vamos alterar um configuração no arquivo de configuração do DHCP Cliente. Assim sempre vamos receber o 127.0.0.1</p>
<pre class="remontti-code"># sed -i &quot;s/#prepend domain-name-servers/prepend domain-name-servers/g&quot; /etc/dhcp/dhclient.conf</pre>
<p>Se quiser garantia que irá receber o 127.0.0.1 de um reboot em sua VM, e após reiniciar de um cat /etc/resolv.conf e veja se  <em>nameserver 127.0.0.1</em> se encontra no arquivo.</p>
<pre class="remontti-code"># reboot</pre>
<p>Vamos criar nossa zona fake, que fará com que todos os domínios que adicionaremos nela o servidor faça responder que o domínios é o seu próprio servidor. </p>
<pre class="remontti-code"># echo &#039;include &quot;/etc/bind/fakes.zone&quot;;&#039; &gt;&gt; /etc/bind/named.conf.local

# echo &#039;zone &quot;web.local&quot; IN { type master; file &quot;/etc/bind/db.web.local&quot;; };&#039; &gt;&gt; /etc/bind/named.conf.local</pre>
<pre class="remontti-code"># vim /etc/bind/db.web.local </pre>
<p><font color="red">Lembrando que 10.0.0.109 é o IP que estou recebendo via DHCP, SEMPRE que sua interface receber um novo IP será necessário altera-lo, e  restartar o serviço bind9.</font></p>
<pre class="remontti-code">
$ORIGIN .
$TTL 86400
web.local         IN SOA  ns1.web.local. ns2.web.local. (
                        2017021901 ; serial
                        28800      ; refresh (8 hours)
                        1800       ; retry (30 minutes)
                        2419200    ; expire (4 weeks)
                        10800      ; minimum (3 hours)
                        )
                        NS web.local
                        A 10.0.0.109
</pre>
<p>Vou ensinar como fazer script (shell script) que fará com que sempre fique o IP recebido via DHCP.<br />
Insira no final do arquivo /etc/rc.local as linhas abaixo, o rc.local é carregado na inicialização.</p>
<pre class="remontti-code"># vim /etc/rc.local</pre>
<p>Insira antes de exit 0</p>
<pre class="remontti-code">
pegaip=$(ifconfig eth0 | grep &quot;inet end&quot; | awk &#039;{print $3}&#039;)
sed -i &quot;s/ A .*/ A $pegaip/g&quot; /etc/bind/db.web.local
/etc/init.d/bind9  restart
</pre>
<p>Criaremos nosso arquivo fakes.zone quais adicionaremos os domínios fake.</p>
<p># vim /etc/bind/fakes.zone</p>
<pre class="remontti-code">
zone &quot;fakes.zone&quot; {
        type master;
        file &quot;/etc/bind/db.fakes.zone&quot;;
        allow-query {none;};
};
</pre>
<pre class="remontti-code"># vim /etc/bind/db.fakes.zone</pre>
<pre class="remontti-code">
$TTL 1H
@       IN      SOA LOCALHOST. NS.LOCALHOST (
                        2017021900      ; Serial  
                        1h              ; Refresh
                        15m             ; Retry
                        30d             ; Expire 
                        2h              ; Negative Cache TTL
                )
                NS  LOCALHOST.

*.dominio1.com.br       IN CNAME .
dominio1.com.br         IN CNAME .

*.dominio2.com.br       IN CNAME .
dominio2.com.br         IN CNAME .

</pre>
<pre class="remontti-code"># vim /etc/bind/named.conf.options</pre>
<p>Insira no arquivo antes de fechar a chave options.</p>
<pre class="remontti-code">response-policy {
	zone &quot;fakes.zone&quot; policy CNAME web.local;
};</pre>
<p>Ficando assim:</p>
<pre class="remontti-code">
options {
        directory &quot;/var/cache/bind&quot;;

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0 s placeholder.

        // forwarders {
        //      0.0.0.0;
        // };


        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };

        response-policy {
                zone &quot;fakes.zone&quot; policy CNAME web.local;
        };
};
</pre>
<p>Restarte o bind toda vez que fizer alguma alteração (ex adicionar um novo domínio)</p>
<pre class="remontti-code"># /etc/init.d/bind9  restart</pre>
<p>Ping para seus domínios e veja se responde o IP do seu servidor.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_180743.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_180743-300x201.png" alt="" width="300" height="201" class="alignnone size-medium wp-image-1734" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_180743-300x201.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_180743-768x515.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_180743.png 842w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Altere os DNS de seu computador para o IP do seu servidor &#8220;no meu caso 10.0.0.109&#8221;. Seu computador vai fazer as consultas DNS em seu servidor, qual responde como autoritativo pelos domínios fakes. Agora Acesse seus domínios em seu navegador.<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202-300x213.png" alt="" width="300" height="213" class="alignnone size-medium wp-image-1745" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202-300x213.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202-768x544.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202-1024x726.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_183202.png 1043w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><br />
Recebemos a tela padrão, que esta é o arquivo que está em /var/www/html/index.html<br />
Como padrão então já sabemos que o diretório padrão do apaches (www-data) é /var/www/html/. Bom precisamos fazer nosso apache interpretar que cada site fique em um diretório diferente. Então vamos criar esses diretórios.</p>
<pre class="remontti-code"># mkdir -p /var/www/dom_fakes/dominio1.com.br
# mkdir /var/www/dom_fakes/dominio2.com.br</pre>
<p>Agora criamos nossos 2 arquivos de configurações em /etc/apache2/sites-enabled/ para cada domínio.</p>
<p><strong>dominio1.com.br</strong></p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/dominio1.com.br.conf</pre>
<pre class="remontti-code">&lt;VirtualHost *:80&gt;
	ServerName dominio1.com.br
	ServerAlias www.dominio1.com.br

        ServerAdmin seu@email.com.br
        DocumentRoot /var/www/dom_fakes/dominio1.com.br
	&lt;Directory /var/www/dom_fakes/dominio1.com.br/&gt;
    		Options Indexes FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;

	LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/dominio1.com.br_error.log
        CustomLog ${APACHE_LOG_DIR}/dominio1.com.br_access.log combined

&lt;/VirtualHost&gt;</pre>
<p><strong>dominio2.com.br</strong></p>
<pre class="remontti-code"># vim /etc/apache2/sites-enabled/dominio2.com.br.conf</pre>
<pre class="remontti-code">&lt;VirtualHost *:80&gt;
	ServerName dominio2.com.br
	ServerAlias www.dominio2.com.br
        ServerAdmin seu@email.com.br
        DocumentRoot /var/www/dom_fakes/dominio2.com.br

	&lt;Directory /var/www/dom_fakes/dominio2.com.br/&gt;
    		Options Indexes FollowSymLinks
    		AllowOverride All
	&lt;/Directory&gt;

	LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/dominio2.com.br_error.log
        CustomLog ${APACHE_LOG_DIR}/dominio2.com.br_access.log combined

&lt;/VirtualHost&gt;</pre>
<p>Criamos um arquivo em cada diretório para que possamos visualizar que estamos acessando o domínio corretamente.</p>
<pre class="remontti-code"># echo &gt; /var/www/dom_fakes/dominio1.com.br/d1.html
# echo &gt; /var/www/dom_fakes/dominio2.com.br/d2.html</pre>
<p>Agora restart o apache.</p>
<pre class="remontti-code"># /etc/init.d/apache2 restart</pre>
<p>Bingo!<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184336.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184336-300x230.png" alt="" width="300" height="230" class="alignnone size-medium wp-image-1747" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184336-300x230.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184336.png 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184339.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184339-300x230.png" alt="" width="300" height="230" class="alignnone size-medium wp-image-1748" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184339-300x230.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_184339.png 750w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Vamos remover o /var/www/html/index.html e criar um link dos domínios fakes em /var/www/html/ assim quando você não quiser trocar o IP para resolver nomes, você pode acessar o http://IP/dominiofake&#8230;. </p>
<pre class="remontti-code"># rm /var/www/html/index.html 
# ln -s /var/www/dom_fakes/ /var/www/html/</pre>
<p><a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133530.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133530-300x203.png" alt="" width="300" height="203" class="alignnone size-medium wp-image-1800" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133530-300x203.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133530-768x520.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133530.png 912w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133757.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133757-300x203.png" alt="" width="300" height="203" class="alignnone size-medium wp-image-1804" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133757-300x203.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133757-768x520.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170221_133757.png 912w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Para enviarmos os arquivos podemos usar um cliente SFTP como o FileZilla, Winscp entre outros. Mas para logar no nosso cliente SFTP vamos ter que fazer alguns ajustes no usuário www-data (usuário do apache), primeiramente ele não vem com permissão para logar, vale lembrar que eu não recomendo faze isso em servidores convencionais, este é um ambiente de &#8220;local&#8221; para estudos&#8230; </p>
<pre class="remontti-code"># usermod -s /bin/bash www-data</pre>
<p>Sete uma senha para o usuário www-data com o comando. (Vamos usar ela para logar posteriormente no FileZilla)</p>
<pre class="remontti-code"># passwd www-data</pre>
<p>Altere as permissões do diretório/subdir em /var/www para seu usuário www-data</p>
<pre class="remontti-code"># chown  www-data. /var/www/ -R</pre>
<p>Agora basta você conectar-se para enviar os arquivos: (ex. FileZilla)<br />
<a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223559.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223559-300x242.png" alt="" width="300" height="242" class="alignnone size-medium wp-image-1757" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223559-300x242.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223559-768x619.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223559.png 789w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a> <a href="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836.png" data-rel="lightbox-gallery-KyYx0QYd" data-rl_title="" data-rl_caption="" title=""><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836-300x236.png" alt="" width="300" height="236" class="alignnone size-medium wp-image-1761" srcset="https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836-300x236.png 300w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836-768x604.png 768w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836-1024x805.png 1024w, https://blog.remontti.com.br/wp-content/uploads/2017/02/Screenshot_20170219_223836.png 1164w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<p>Se você deseja arriscar e elevar o nível e criar um servidor FTP você pode seguir o tutorial: <a href="https://blog.remontti.com.br/136" target="_blank" rel="noopener">Servidor FTP com usuários no banco de dados MySQL</a></p>
<p>Como está criando um ambiente para programar é interessante receber os erros do PHP, então edite as configurações do php.ini ele fica em <strong>/etc/php5/apache2/php.ini</strong><br />
Procure por <strong>display_errors</strong> e altere para <strong>On</strong> </p>
<pre class="remontti-code">display_errors = On</pre>
<p>O padrão para upload de arquivos no PHP é de 2M. Você este valor procurando por <strong>upload_max_filesize</strong> e colocando o valor que achar melhor.</p>
<pre class="remontti-code">upload_max_filesize = 20M</pre>
<p>A cada alteração feita no php.ini deve ser restartado o apache.</p>
<pre class="remontti-code"># /etc/init.d/apache2 restart</pre>
<p>Se precisar ver os logs você encontra em <strong>/var/log/apache2/</strong>. Se você reparar vai ver que la na configuração do domínio no apache temos o valor <em>[ErrorLog ${APACHE_LOG_DIR}/dominio2.com.br_error.log]</em>.<br />
Ex de comando para  visualizar:</p>
<pre class="remontti-code"># tail -f /var/log/apache2/dominio1.com.br_error.log </pre>
<p>Agora cada vez que deseja criar um domínio fake:<br />
<strong>1 &#8211;</strong> Crie um arquivo/etc/apache2/sites-enabled/dominiofake.com.conf  (sempre terminando em .conf)</p>
<pre class="remontti-code">Conforme modelos acima.</pre>
<p><strong>2 &#8211;</strong> Insira no /etc/bind/db.fakes.zone seu dominofake.com </p>
<pre class="remontti-code">*.dominiofake.com       IN CNAME .
dominiofake.com         IN CNAME .</pre>
<p><strong>3 &#8211; </strong> Restart o apcache e o Bind</p>
<pre class="remontti-code">/etc/init.d/bind9  restart
/etc/init.d/apache2 restart</pre>
<p>Você pode criar também um usuário MySQL para cada aplicação sua, para separar as bases de dados, segue um ex. onde criamos a base de dados dominio1 com o usuario dominio1 e SENHA:</p>
<pre class="remontti-code"># mysql -u root -p</pre>
<p>Você pode usar o phpmyadmin também.</p>
<pre class="remontti-code">CREATE DATABASE dominio1;
GRANT ALL PRIVILEGES ON dominio1.* TO &#039;dominio1&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SUA-SENHA-DOM1&#039;;
FLUSH PRIVILEGES;
quit;</pre>
<p><strong>Pensando em facilitar sua vida, vou criar dois shell script. Uma para adicionar um domínio com apenas um comando, e outro para remover.</strong></p>
<pre class="remontti-code">vim /bin/adddominio</pre>
<pre class="remontti-code">#!/bin/bash

DOMINIO=$1

if [ -z $DOMINIO ];then
        echo
        echo &quot;Comando imcompleto!&quot;
        echo &quot; Use ex.: adddominio dominio.tld&quot;
        echo
else
        EXITE=`ls -lh /etc/apache2/sites-enabled/ |grep ${DOMINIO} |wc -l`
        echo
        if [ $EXITE = 1 ]; then
                        printf &quot;\033[1;31m ${DOMINIO} \033[0m já cadastrado! \n&quot;
        else

                mkdir /var/www/dom_fakes/${DOMINIO}

                cat &lt;&lt;&lt; &quot;
                &lt;VirtualHost *:80&gt;
                        ServerName ${DOMINIO}
                        ServerAlias www.${DOMINIO}

                        ServerAdmin seu@email.com.br
                        DocumentRoot /var/www/dom_fakes/${DOMINIO}
                        &lt;Directory /var/www/dom_fakes/${DOMINIO}/&gt;
                                Options Indexes FollowSymLinks
                                AllowOverride All
                        &lt;/Directory&gt;

                        LogLevel warn

                        ErrorLog ${APACHE_LOG_DIR}/${DOMINIO}_error.log
                        CustomLog ${APACHE_LOG_DIR}/${DOMINIO}_access.log combined
                &lt;/VirtualHost&gt;
                &quot; &gt; /etc/apache2/sites-enabled/${DOMINIO}.conf

                echo &quot;*.${DOMINIO}       IN CNAME .&quot; &gt;&gt; /etc/bind/db.fakes.zone
                echo &quot;${DOMINIO}         IN CNAME .&quot; &gt;&gt; /etc/bind/db.fakes.zone

                chown  www-data. /var/www/dom_fakes/${DOMINIO}

                /etc/init.d/bind9 restart
                /etc/init.d/apache2 restart

                echo

                printf &quot;\033[1;32m$DOMINIO \033[0m configurado com sucesso! \n&quot;
        fi
        echo
fi</pre>
<pre class="remontti-code">vim /bin/deldominio</pre>
<pre class="remontti-code">#!/bin/bash

DOMINIO=$1

if [ -z $DOMINIO ];then
        echo
        echo &quot;Comando imcompleto!&quot;
        echo &quot; Use ex.: deldominio dominio.tld&quot;
        echo
else
        EXITE=`ls -lh /etc/apache2/sites-enabled/ |grep ${DOMINIO} |wc -l`
        echo
        if [ $EXITE = 0 ]; then
                        printf &quot;\033[1;31m ${DOMINIO} \033[0m não encontrado! \n&quot;
        else
                rm -rf /var/www/dom_fakes/${DOMINIO}

                rm -f /etc/apache2/sites-enabled/${DOMINIO}.conf

                sed -i &quot;/${DOMINIO}/d&quot; /etc/bind/db.fakes.zone

                /etc/init.d/bind9 restart
                /etc/init.d/apache2 restart
                echo
                printf &quot;\033[1;32m$DOMINIO \033[0m removido com sucesso! \n&quot;
        fi
        echo
fi
</pre>
<p>Altere as permissões.</p>
<pre class="remontti-code"># chmod +x /bin/adddominio
# chmod +x /bin/deldominio</pre>
<p>Pronto agora bastar você usar o comando adddominio para adicionar todas as configurações automaticamente e deldominio para remove-las.<br />
Adicionando:</p>
<pre class="remontti-code">adddominio dominio3.com</pre>
<p>Removendo:</p>
<pre class="remontti-code">deldominio dominio3.com</pre>
<p>Parabéns! Você montou um servidor próprio! </p>
<p>Agora se você quer dar uma de preguiçoso vou deixar aqui o link para você importar a VM em seu virtual box.<br />
<strong><a href="https://mega.nz/#!FtYhCLLY!3Hyjmp2u0fNVXmLe0RUi18NEb8oJv08ZxrPgXeFMN_A" target="_blank" rel="noopener">Dev Web Server.ova</a> 765MB (64bits)</strong><br />
Abra seu Virtual Box vá em: Arquivo &#8211;>  Importar Amppliance e selecione o arquivo.</p>
<pre class="remontti-code">Usuários / Senhas
SSH:
webdev / remontti
root / remontti
www-data / remontti (SFTP)

MySQL
root / remontti
phpmyadmin / remontti</pre>
<p>Se gostou, ficou com dúvida deixe seu comentário.</p>
<p>Abraço!</p>
<p>O post <a href="https://blog.remontti.com.br/1730">Criando uma maquina virtual com linux (Debian) para Desenvolvedores Web (LDAMPS)</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/1730/feed</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Servidor FTP com usuários no banco de dados MySQL</title>
		<link>https://blog.remontti.com.br/136</link>
					<comments>https://blog.remontti.com.br/136#comments</comments>
		
		<dc:creator><![CDATA[Rudimar Remontti]]></dc:creator>
		<pubDate>Sat, 10 Sep 2016 02:00:38 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[pure-ftpd]]></category>
		<guid isPermaLink="false">http://www.remontti.com.br/blog/?p=136</guid>

					<description><![CDATA[<p>Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download. Distribuição utilizada: Debian&#46;&#46;&#46;</p>
<p>O post <a href="https://blog.remontti.com.br/136">Servidor FTP com usuários no banco de dados MySQL</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://blog.remontti.com.br/wp-content/uploads/2009/04/pure-ftpd-with-mysql-300x155.png" alt="pure-ftpd-with-mysql" width="300" height="155" class="alignnone size-medium wp-image-986" srcset="https://blog.remontti.com.br/wp-content/uploads/2009/04/pure-ftpd-with-mysql-300x155.png 300w, https://blog.remontti.com.br/wp-content/uploads/2009/04/pure-ftpd-with-mysql.png 390w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<p style="text-align: left;">Neste tutorial vamos montar um servidor FTP utilizando o PureFTPd com usuários no banco de dados Mysql ao invés de usar usuários do sistema, vamos ainda poder configurar quotas e limites de upload e download.</p>
<p><span id="more-136"></span><br />
Distribuição utilizada: <strong>Debian 9</strong> (Stretch ) / Instalação Limpa (<a href="https://blog.remontti.com.br/1152" rel="noopener" target="_blank">Tutorial de instalação aqui</a>)</p>
<p><strong><font color="red">Requisitos:</font></strong><br />
<a href="https://blog.remontti.com.br/2024" rel="noopener" target="_blank">Servidor web Apache2, PHP 7.0, MariaDB, PHPMyAdmin “LAMP” no Debian 9 Stretch</a></p>
<pre class="remontti-code"># apt install pure-ftpd-mysql</pre>
<p>Agora criaremos nosso grupo FTP (<em>grupoftp</em>) e usuário (<em>pureftpd</em>) para que nosso usuários virtuais sejam mapeados.</p>
<pre class="remontti-code"># groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c &quot;pureftpd user&quot; -g ftpgroup ftpuser</pre>
<p>Próximo passo criar a nossa base de dados, onde ficaram armazenado as informações dos nossos usuários.</p>
<pre class="remontti-code"># mysql -u root -p</pre>
<pre class="remontti-code">CREATE DATABASE pureftpd;

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO &#039;pureftpd&#039;@&#039;localhost.localdomain&#039; IDENTIFIED BY &#039;SENHA_FTP_USER&#039;;

FLUSH PRIVILEGES;

USE pureftpd;

CREATE TABLE ftpd (
User varchar(16) NOT NULL default &#039;&#039;,
status enum(&#039;0&#039;,&#039;1&#039;) NOT NULL default &#039;0&#039;,
Password varchar(64) NOT NULL default &#039;&#039;,
Uid varchar(11) NOT NULL default &#039;-1&#039;,
Gid varchar(11) NOT NULL default &#039;-1&#039;,
Dir varchar(128) NOT NULL default &#039;&#039;,
ULBandwidth smallint(5) NOT NULL default &#039;0&#039;,
DLBandwidth smallint(5) NOT NULL default &#039;0&#039;,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default &#039;*&#039;,
QuotaSize smallint(5) NOT NULL default &#039;0&#039;,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
);

quit; 
</pre>
<p>Antes vamos criar um backup do /etc/pure-ftpd/db/mysql.conf e montar este arquivo com nossas configuração para fazera conexão ao mysql.</p>
<pre class="remontti-code"># mv /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# vim /etc/pure-ftpd/db/mysql.conf</pre>
<p>Adicione:</p>
<pre class="remontti-code">MYSQLSocket /var/run/mysqld/mysqld.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword SENHA_FTP_USER
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetUID SELECT Uid FROM ftpd WHERE User=&quot;\L&quot; AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetGID SELECT Gid FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MYSQLGetDir SELECT Dir FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User=&quot;\L&quot;AND status=&quot;1&quot; AND (ipaccess = &quot;*&quot; OR ipaccess LIKE &quot;\R&quot;)
</pre>
<p>Esteja certo que você mudou o campo MYSQLPassword &#8216;SENHA_MYSQL_FPTd&#8217;</p>
<p>Seguindo com as configurações</p>
<pre class="remontti-code"># echo yes &gt; /etc/pure-ftpd/conf/ChrootEveryone
# echo yes &gt; /etc/pure-ftpd/conf/CreateHomeDir</pre>
<p>ChrootEveryone &#8211; Prender por padrão os usuários FTP em seu diretório;<br />
CreateHomeDir &#8211; Criar o home do usuário automaticamente;</p>
<pre class="remontti-code"># /etc/init.d/pure-ftpd-mysql restart</pre>
<p>Vamos criar agora um usuário, no exemplo abaixo meu usuário será dono do /var/www/html (diretório padrão do apache/debian 8)</p>
<pre class="remontti-code"># mysql -u root -p</pre>
<pre class="remontti-code">USE pureftpd;

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (&#039;usuario&#039;, &#039;1&#039;, MD5(&#039;senha&#039;), &#039;2001&#039;, &#039;2001&#039;, &#039;/var/www/html&#039;, &#039;100&#039;, &#039;100&#039;, &#039;&#039;, &#039;*&#039;, &#039;50&#039;, &#039;0&#039;);
quit; </pre>
<p>Sempre que você queira criar um novo usário, você tem que criar uma entrada na tabela ftpd.<br />
Explicando a estrutura da tabela:</p>
<p><strong>User:</strong> Seu usuário (ex. como no nosso usuário acima: teste).<br />
<strong>Status: </strong>0 ou 1. 0 deixará sua conta inativa, e o usuário não pode logar.<br />
<strong>Password:</strong> A senha do usuário. A senha está encriptada com MD5.<br />
<strong>UID:</strong> O userid do usuário ftp que você criou (ex: 2001)<br />
<strong>GID: </strong>O groupid do grupo ftp que você criou (ex: 2001).<br />
<strong>Dir:</strong> Diretório home do usuário (ex: /home/teste). Se não existir será criado quando logar pela primeira vez via FTP. O usuário será preso neste diretório home.<br />
<strong>ULBandwidth: </strong>Controle de Upload em KB/Sec. Use 0 para que seja ilimitado.<br />
<strong>DLBandwidth: </strong>Controle de Download em KB/sec. Use 0 para que seja ilimitado.<br />
<strong>Comment: </strong>Você pode inserir qualquer comentário (ex: Usuário da administração). Você deixa este campo limpo.<br />
<strong>Ipaccess: </strong>Você pode definir o ip que serão permitidos para conectar nesta conta FTP. Ou &#8216;*&#8217; para qualquer endereço IP.<br />
<strong>QuotaSize: </strong>Espaço de armazenamento em MB (não KB, como em ULBandwidth eDLBandwidth) Defina 0 como ilimitado.<br />
<strong>QuotaFiles:</strong> Número total de arquivos que este usuário poderá salvar. Defina 0 para ilimitado.</p>
<p>Alterando as permissões do /var/www/html isso vai ser relativo ao diretório que você definido ao usuário criado.</p>
<pre class="remontti-code"># chown ftpuser. -R /var/www/html/</pre>
<address style="text-align: left;">Fontes:</address>
<address style="text-align: left;">http://download.pureftpd.org/pub/pure-ftpd/doc/README.MySQL</address>
<p>O post <a href="https://blog.remontti.com.br/136">Servidor FTP com usuários no banco de dados MySQL</a> apareceu primeiro em <a href="https://blog.remontti.com.br">Remontti</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.remontti.com.br/136/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
	</channel>
</rss>
