O PHP é uma linguagem de script rica em recursos, mas quando utilizada de forma incorreta , intencionalmente ou não, pode comprometer grande parte do servidor web ou seus dados.
Através do arquivo php.ini em disable_functions, vamos criar uma lista de funções que devem ser desabilitadas por motivos de segurança.
Localizando o arquivo php.ini correto no servidor.
O primeiro passo é encontrar o arquivo php.ini correto no servidor. Existem vários cenários em um servidor web em que são criados vários arquivos php.ini . Por exemplo, se utilizamos o php-fpm com múltiplas versões do php instaladas em nosso servidor, haverá um php.ini para cada versão… Neste caso você deverá procurar o php.ini responsável por cada versão. O local correto irá variar dependendo de sua Distribuição Linux, se utiliza algum Painel de controle ou não , etc.
A forma mais simples de localizar o php.ini correto em nosso servidor é executando um arquivo php que nos traga através de “phpinfo()” todas as configurações de nosso php.
Crie um arquivo info.php em alguma url ativa em seu servidor web e insira
<?php
phpinfo();
?>
Acesse através de seu navegador web o arquivo info.php. Serão exibidas várias informações úteis sobre o php ativo nessa URL.
Localize: “Loaded Configuration File” . Este é o caminho correto para o php.ini que desejamos . Copie o caminho para php.ini , nós vamos utilizá-lo a seguir para informar em disable_functions as funções que desejamos desabilitar.
Acesse seu servidor linux utilizado o ssh e edite o arquivo php.ini
Em tempo, recomendo que por motivos de segurança desabilite allow_url_fopen e allow_url_include:
allow_url_fopen=Off
allow_url_include=Off
Salve (Ctrl+o) e saia do nano (Ctrl+x)
Reinicie o httpd server
Se utiliza o Apache e não possui o php-fpm:
Para CentOS/RedHat:
systemctl restart httpd
ou
service httpd restart
Para Debian/Ubuntu:
service apache2 restart
Se utiliza o PHP-FPM
O PHP-FPM (FastCGI Process Manager ), é um manipulador do PHP que funciona a parte, como um serviço e não um módulo. A forma correta de reiniciar irá variar dependendo de como foi instalado em seu servidor .
Para simplificar, acesse seu arquivo info.php criado anteriormente e note que em ” Loaded Configuration File” haverá um nome parecido com “php-fpmxxx” esse será o nome do processo que você deverá reiniciar .
Nome do processo php-fpm .Exemplo php-fpm72
Com as informações acima reinicie o serviço substituindo “php-fpmxxx” pelo nome encontrado em seu servidor. :
Para CentOS/RedHat:
systemctl restart php-fpmxxx
ou
service php-fpmxxx restart
Para Debian/Ubuntu:
service php-fpmxxx restart
Para se certificar que as configurações foram atualizadas, acesse novamente seu arquivo info.php e verifique em disable_functions se a lista de funções estão sendo exibidas.
Nota Final: Para informação, utilizando o php-fpm existem ainda outras formas de desabilitar as funções que não foram abordadas neste post.
LEMP é um grupo de Software Livre. A sigla LEMP significa Linux, Nginx (pronuncia-se Engine x), MySQL e PHP .
Nginx é um software de servidor Web de código aberto robusto, pequeno, de alto desempenho, servidor proxy reverso e também servidor proxy de E-mail. Os dados do site serão armazenados em um banco de dados MySQL (usando MariaDB) e o conteúdo dinâmico será processado pelo PHP 7.4.
O Pré Requisito para continuar com esse tutorial é que você já tenha o Linux CentOS 7 instalado.
Primeiro passo – Instalar o Nginx
No CentOS o Nginx não está disponível no repositório padrão. Vamos adicionar o repositório EPEL para que possamos instalar o Nginx através do yum.
yum install epel-release
Com o repositório EPEL instalado no servidor, vamos instalar o nginx
yum install nginx
Vamos iniciar o nginx
systemctl start nginx
Nós já podemos acessar utilizando o IP de seu servidor, a página “default” do nginx e certificar que tudo está ok. Caso não saiba ou tenha certeza de qual é o IP utilize:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
ou
curl http://icanhazip.com
Se está utilizando o CentOS 7, provavelmente precisará de uma nova regra ao Firewall padrão (firewalld), para permitir tráfego na porta 80.
Você verá a página Default do NGINX, que é exibida para fins de informação e teste.
Página Default do NGINX
Segundo Passo – Instalar MySQL(MariaDB)
Agora que temos o servidor web NGINX instalado e configurado, vamos instalar o MariaDB, que irá armazenar e gerenciar os dados do site. O MariaDB é mantido pela comunidade de desenvolvedores originais do antigo e conhecido MySQL.
O MariaDB vem com repositórios padrão do CentOS, bastaria utilizar o yum para instala-lo rapidamente. Porém nós desejamos instalar o MariaDB 10.4, que não é a versão disponível como padrão . Após atualizar o servidor com yum , vamos adicionar o repositório do MariaDB e definir a versão ‘0.4
yum update -y;
Crie o arquivo abaixo e insira:
nano /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
Atualize o cache do yum
yum makecache fast
Instale o MariaDB
yum -y install MariaDB-server MariaDB-client
Vamos dar um start no MariaDB e habilita-lo para iniciar após o reboot.
systemctl start mariadb
systemctl enable mariadb
Com o MariaDB (MySQL) iniciado, precisamos executar um script de segurança que irá remover algumas configurações default e deixará nossa instalação mais segura.
mysql_secure_installation
A primeira opção irá perguntar qual é a senha do root para o MariaDB. Como acabamos de instalar o MariaDB, você deverá deixar esta opção em branco e pressionar enter para continuar. Na próxima questão será solicitado que digite uma senha para o root do MariaDB e confirme.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
Para as outras questões digite Y.
Remove anonymous users? [Y/n] Y
...
Disallow root login remotely? [Y/n] Y
...
Remove test database and access to it? [Y/n] Y
...
Reload privilege tables now? [Y/n] Y
Teceiro Passo – Instalar o PHP 7.4
O PHP é o responsável em processar o código para exibir conteúdo dinâmico. Ele poderá executar scripts, conectar-se ao bancos de dados MySQL para obter informações e entregar o conteúdo processado ao seu servidor da Web para exibição.
O primeiro passo será instalar o repositório do CentOS que contém os pacotes de instalação do PHP 7.4
Nós já temos agora, o php 7.4 e componentes instalados no servidor mas precisamos fazer algumas modificações para manter o servidor mais seguro.
Edite o arquivo principal de configuração do php:
nano /etc/php.ini
Vamos configurar o PHP para aceitar apenas URLs de arquivos que realmente existem no servidor. Isso atenua uma vulnerabilidade de segurança em que o interpretador PHP pode ser induzido a permitir a execução de código arbitrário se o arquivo .php solicitado não estiver presente no sistema de arquivos.
Localize cgi.fix_pathinfo altere para 0 , isso irá desabilitar essa função.Lembre-se de Remover o “;” antes do nome para descomentar essa função.
cgi.fix_pathinfo=0
Salve e saia do editor nano. ( ctrl+x , y)
Abra e edite o arquivo de configuração do php-fpm www.conf:
nano /etc/php-fpm.d/www.conf
Procure a linha “listen =” e modifique conforme abaixo:
listen = /var/run/php-fpm/php-fpm.sock
Localize listen.owner e listen.group . Descomente removendo o “;” antes das funções e altere para :
listen.owner = nginx
listen.group = nginx
Localize user e group. Altere os valores de apache para nginx
user = nginx
group = nginx
Salve e saia do editor nano. ( ctrl+x , y)
Agora, precisamos apenas iniciar nosso processador de PHP e habilitar para iniciar após o boot.
systemctl start php-fpm
systemctl enable php-fpm
Quarto Passo – Configurar Nginx para processar páginas PHP 7.2
Agora vamos criar um novo arquivo de configuração para o Nginx . Substitua em server_name “nome_dominio_ou_IP_do_Seu_Servidor” para o IP de seu servidor :
nano /etc/nginx/conf.d/default.conf
Insira o código abaixo:
server {
listen 80;
server_name nome_dominio_ou_IP_do_Seu_Servidor;
# note that these lines are originally from the "location /" block
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Salve e saia do editor nano. ( ctrl+x , y)
Reinicie o nginx para que as modificações sejam carregadas.
systemctl restart nginx
Para Finalizar, vamos criar um arquivo de teste em php que trará informações sobre nosso servidor e php .
nano /usr/share/nginx/html/info.php
Insira o código:
Salve e saia do editor nano. ( ctrl+x , y) .
Agora acesse :
http://ip_do_seu_servidor/info.php
.
Será exibido uma página semelhante a :
Agora você tem o LEMP instalado e configurado em seu servidor da melhor forma possível. Com estas configurações você poderá hospedar em seu servidor os mais diversos sistemas, como por exemplo WordPress, Joomla, etc…