Esse é um projeto da 42 sp com o objetivo de nos introduzir ao mundo da virtualização.
Primeiramente teremos que instalar um linux (Debian/Centos) com a minima quantidade de sofwares, e baixar somente o necessario para o funcionamento de um servidor.
- Para o projeto eu optei pelo Debian por ser mais simples.
- Podemos fazer o download do nosso sistema em Debian.
- Irei estar utilizar o Virtual box para instalar nosso sistema.
- Agora basta Criar uma nova maquina virtual
- Antes de iniciar nossa nova maquina precisamos mudar a configuração de rede do virtual box para Placa em Modo Bridge.
- Ao ligar nossa VM podemos selecionar nossa Debian Iso para instalação.
- É importante que selecionemos a instalação sem a interface grafica.
- A primeira parte da instalação é bastante simples, basta selecionar a linguagem, localização,hostname (login da intra + 42), senha do root e usuario inicial.
- Depois das configurações basicas iremos definir como nossas partições serão organizadas.
- Basta selecionar a opção para setar o lvm encriptado automaticamente.
- Iremos criar algumas pastas em partições separadas.
- Agora basta esperar a instalação.
- Irei deixar apenas os sofwares padrões e o ssh como programas iniciais.
- Durante A instalação desse servidor estarei utilizando o gerenciador de pacote aptitude, por se tratar uma aplicação mais simples
- apt install aptitude
- Vim como editor de texto.
- aptitude install vim
- App Armor é um software sutilizado para limitar o acesso dos programas a certos recursos.
- Podemos visualizar o apparmor com aa-status.
- Podemos verificar o hostname da nossa maquina com hostname
- O hostname pode ser modificado com hostnamectl set-hostname "new host name"
- O SSH é um protolo de rede utilizado para acessar, gerenciar e modificar um servidor remotamente.
- Esse acesso é realizado atraves da rede, onde dados e informações são transmitidos atraves de uma comunicação criptografada.
- A ferramenta utilizada sera o Open SSH
- Podemos verificar sua execução com o systemctl status ssh
- Por padrão ele estara rodando na porta 22
- Estarei mudando a porta no arquivo /etc/ssh/sshd_config com o vim
- Agora computadores na mesma rede podem acessar nossa maquina via SSH
- A conexão é realizada com ssh user@host -p 4242
- ssh é o comando utilizado para realizar nossa conexão.
- user sera o usuario que tentaremos acessar na nossa maquina.
- host sera o ip da nossa maquina
- -p é utilizado para indicar a porta onde conexão sera estabelecida, em nosso caso a porta 4242
- Estarei utilizando UFW como firewall.
- Ele é um firewall front-end descomplicado que nos permite o gerenciamento das regras do firewall.
- Foi criado para facilitar a configuração de um firewall.
- Para installar e ativar o ufw:
- aptitude install ufw
- ufw enable (para iniciar as regras)
- systemctl enable ufw (para iniciar as regras sempre no boot)
- Iremos começar negando todas conexões recebidas e permitindo as saidas:
- ufw default allow outgoing
- ufw default deny incoming
- Nesse ponto caso tentemos nos conectar via SSH como foi feito anteriormente, a conexão sera negada.
- Para resolver esse problema podemos permitir a porta na qual o SSH esta rodando (4242)
- ufw allow 4242
- Da mesma forma podemos negar novamente esse porta
- ufw deny 4242
- ufw status podemos verificar nossas regras.
- Irei modificar algumas da politiacas de segurança.
- Para as configurações iniciais estarei modificando o arquivo /etc/login.defs com o vim.
- Estarei deixando a expiração de uma senha para 30 dias, um warning 7 dias antes e a modificação de uma senha tem que ter o intervalo minimo de 2 dias.
- Essas configurações serão aplicadas apenas para os novos usuarios
- Para ver as configurações de expiração de senha para os usuarios ja criados usamos chage -l "username"
- E para modificar os valores:
- chage -M "days" "username" (Numero maximo de dias uma senha pode ser usada).
- chage -m "days" "username" (Numero minimo de dias antes de uma senha ser trocada).
- chage -W "days" "username" (Manda um warning antes da senha expirar).
- Para algumas configurações mais avançadas estarei utilizando o pwquality
- aptitude install libpam-pwquality
- Agora podemos adicionar regras mais avançadas no arquivo etc/pam.d/common-password
- Setarei um tamanho minimo de 10 characters, minimo de 1 letra maiuscula e 1 digito, maximo de 3 repetições do mesmo character, alem das configurações padrões do pwquality.
- O sistema bloqueia certos locais e ações por razões de segurança, o unico que pode acessar essas areas é o root user.
- Não é uma boa pratica utilizar o sistema sempre logado na conta root, pois podemos executar alguma ação não intencionada que pode dafinificar o sistema.
- Para resolver essas questões surgiu o sudo que nos permitira acesso temporario ao direitos de administrador mesmo não estando logado na conta root.
- aptitude install sudo
- Podemos verificar no arquivo /etc/sudoers que os usuarios que estiverem dentro do grupo sudo podera executar ações de administrador.
- Para adicionar um usuario para esse grupo basta usar usermod -aG sudo "username".
- Podemos acompanhar os comandos que os usuarios executaram com o sudo com grep sudo /var/log/auth.log
- Estarei adicionando algumas configurações sobre o sudo
- Configurações podem ser adicionados no arquivo /etc/sudoers
- Estarei modificando o numero maximo de tentativa ao errar a senha para executar um comando com sudo.
- Tambem colocarei uma mensagem costumizada caso o usuario erre a senha.
- Como citado anteriormente os logs do sudo estão presentes no /var/log/auth.log, mas esse arquivo tambem possui o logs de varias outras aplicações, logo é uma boa pratica ter um arquivo separado para o sudo.
- Para realizar tal ação, primeiro precisaremos adicionar a seguinte linha no arquivo /etc/sudoers:
- Depois precisaremos modificar o arquivo /etc/rsyslog.conf adicionando a seguinte linha:
- Agora reiniciaremos o serviço rsyslog, sudo systemctl restart rsyslog
- Agora os logs relacionados ao sudo ficarão armazenados no arquivo /var/log/sudo.log
- Por razões de segurança tambem esterei fazendo com que o sudo so possa ser usado com uma tty real, ou seja não pode ser executado por um cron por exemplo.
- Defaults requiretty no /etc/sudoers
- Podemo utilizar o cron quando precisamos que alguma tarefa seja executada a cada periodo de tempo.
- O serviço cron utiliza os seguintes arquivos : /var/spool/cron/*, /etc/cron.d/*, /etc/anacrontab
- Podemos criar um novo cron utilizando crontab -e
- Agora é gora de montar nosso primeiro serviço do nosso servidor.
- Primeiro vamos installar o MariaDB como nosso banco de dados.
- aptitude install mariadb-server mariadb-client
- Podemos chegar se foi instalado com sucesso com o comando mysql
- Agora precisaremos instalar o lighttpd
- aptitude install lighttpd
- Podemos checar se esta rodando com systemctl status lighttpd
- Podemos verifica suas configurações em /etc/lighttpd/lighttpd.conf e /etc/lighttpd/conf-available/
- Agora caso coloquemos o ip da nossa maquina no browser uma pagina inicial sera mostrada
- O arquivo inicial do lighttpd esta localizado em /var/ww/html/
- Agora iremos instalar o php para trabalhar junto com lighttpd
- Para installar o php assim como as extenções necessarias utilizamos aptitude install php php-cli php-common php-fpm php-mysql
- Agora precisamos modificar o php.ini para habilitar o suporte do php pro lighttpd
- vim /etc/php/"version"/fpm/php.ini
- Primeiro iremos descomentar o comando cgi.fix_pathinfo=1
- Por padrão o php-fpm escuta no socket /var/run/php7-fpm.sock, para mudar essa configuração padrão iremos alterar o arquivo /etc/php/"version"/fpm/pool.d/www.conf
- Na linha listen = /run/php/php7.0-fpm.sock iremos substituir por listen = 127.0.0.1:9000
- Agora iremos habilitar o FastCgi modificando o arquivo /etc/lighttpd/conf-available/15-fastcgi-php.conf
- nas linhas:
"bin-path" => "/usr/bin/php-cgi
"socket" => "/var/run/lighttpd/php.socket" - Colocaremos:
"host" => "127.0.0.1",
"port" => "9000", - Agora basta habilitar o FastCgi e FastCgi-php com:
- lighty-enable-mod fastcgi
- lighty-enable-mod fastcgi-php
- Agora iremos reiniciar os serviços:
- systemctl restart php7.0-fpm
- systemctl restart lighttpd
- Agora podemos testar subindo nosso primeiro site: (SEGUINTES PASSOS SÃO IRRELEVANTES PARA O PROJETO, JA QUE O VIRTUAL HOST SO SERIA ACESSIVEL DENTRO DA MAQUINA)
- mkdir /var/www/html/testsite
- Agora criamos uma configuração para o nosso virtual host: vim /etc/lighttpd/conf-available/test.conf
- Dentro dele colamos:
- $HTTP["host"] =="test.example.com" {
- server.document-root = "/var/www/html/testsite"
- index-file.names = ( "index.php" )
- }
- Agora ciramos um index.php dentro da pasta que criamos, essa sera nossa pagina inicial
- Dentro dela fiz um Hello World para testar
- Agora podemos habilitar nosso virtual host com:
- ln -s /etc/lighttpd/conf-available/test.conf /etc/lighttpd/conf-enabled/
- Agora setamos as permisões apropriadas para a pasta do nosso site:
- chown -R www-data:www-data /var/www/html/testsite
- Finalmente reiniciamos nosso serviço: systemctl restart lighttpd
- Agora caso tentemos acessar o host que configuramos (test.example.com) iremos ver o conteudo do nosso index.php
- Agora podemos criar nosso database para o nosso wordpress
- mysql
- CREATE DATABASE wordpress;
- CREATE USER 'flda-sil'@'localhost' IDENTIFIED BY '123'
- GRANT ALL ON wordpress.* TO 'flda-sil'@'localhost';
- FLUSH PRIVILEGES
- Com o database criado podemos ir na pasta /var/www/html/ para setar nosso wordpress
- Primeiro apagaremos todos os arquivos da pasta: rm -fr /var/www/html/
- Agora dentro da nossa pasta de downloads iremos baixar o wordpress: wget http://wordpress.org/latest.tar.gz
- Podemos extrair seu conteudo com: tar xpf latest.tar.gz
- Agora copiados todo conteudo da pasta wordpress que foi oque extraimos e colamos em /var/www/html
- sudo cp -r wordpress /var/www/html/
- Agora setamos as permisões da pasta do nosso site:
- sudo chown -R www-data:www-data /var/www/html
- sudo chmod -R 777 /var/www/html
- Agora quando acessarmos o ip da nossa maquina no navegador conseguiremos nos conectar ao wordpress
- Agora basta conectar o database ao wordpress e nosso site estara pronto:
- Como serviço extra estarei utilizando Ngrok
- Com ele podemos expor alguma porta local para a internet, dessa forma compartilhando nosso site sem muitas complicações.
- Primeiro estarei realizando a instalação:
- sudo apt install snapd
- sudo snap install ngrok
- Agora podemos executar /snap/bin/ngrok 80 http para expor nosso servidor web pra internet
- Agora podemos disponibilizar os links fornecidos no Forwarding para quem quiser acessar nosso site.