Chegou a vez do MariaDB. Ele atuará como nosso backend de autenticação e guardará os dados das aplicações de agendas e contatos, de preferência sem fazer nosso modesto servidor sentar quando for colocado sob alguma carga. Por isso ele receberá algum carinho especial.

Nesta parte também veremos um método para saber quais portas estão abertas em nosso servidor, coisa que será útil lá no final para compor o nosso firewall local.

Instalando

Se por um acaso do destino você seguiu o meu guia sobre como rodar o Slackware no AWS EC2, o MariaDB não estará disponível na instalação inicial do Slackware, logo precisa ser instalado e configurado.

# slackpkg install mariadb
# mysql_install_db --user=mysql
# chmod 755 /etc/rc.d/rc.mysqld
# /etc/rc.d/rc.mysqld start
150513 10:59:12 mysqld_safe Logging to '/var/lib/mysql/mail.err'.
150513 10:59:12 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

Agora você precisa configurar a senha para o usuário root do MariaDB, o que é igualmente simples. Apenas tome o cuidado de usar uma senha forte.

# /usr/bin/mysql_secure_installation

Logo no início você será perguntado:

Enter current password for root (enter for none):

Como o MariaDB acabou de ser instalado, o usuário root não possui uma senha ainda. Apenas aperte enter para continuar. Em seguida você verá:

Set root password? [Y/n]
New password: <senha fodona do root>
Re-enter new password: <repita a senha fodona do root>

Aperte enter para YES e digite a nova senha, repetindo em seguida. Para as demais perguntas, responda YES a todas.

O carinho

Agora defina uma configuração padrão. Para isso, copie um dos arquivos disponíveis em /usr/share/mysql/*.cnf. O Slackware vem com configurações para servidores pequenos, médios e grandes. Essas qualificações são baseada principalmente na quantidade de memória disponível e compartilhamento de recursos, mas são um tanto antiquadas.

Nesta série, estou usando como base uma instância do tipo t1.micro, a menor disponível no AWS EC2. Os recursos dessa instância e o tipo de uso que daremos a ela corresponde a configuração my-medium.cnf. Sinta-se a vontade para usar outra se for o seu caso.

# cp -p /usr/share/mysql/my-medium.cnf /etc/my.cnf.d/

Agora edite o arquivo /etc/my.cnf.d/my-medium.cnf para ajustar algumas coisas, habilitar o motor InnoDB e adicionar o suporte a unicode.

Primeiro, faça as linhas abaixo aparecem como mostrado:

#port           = 3306
#^^^^ Há dois desse, um na seção [client] e outro na [mysqld]. Comentar os dois.
skip-networking
#log-bin=mysql-bin
#binlog_format=mixed

Só para esclarecer, desativamos completamente o suporte a rede do MariaDB. Uma vez que ele será necessário apenas localmente, não faz sentido expô-lo na rede. Também desativamos as funções relativas a replicação.

Descomente as linhas abaixo relativas ao InnoDB:

innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

E adicone isso para habilitar o suporte ao unicode na seção [mysqld] mesmo, logo depois das configurações do InnoDB e antes de [mysqldump]:

# Set collation to unicode
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Por fim, reinicie o MariaDB.

# /etc/rc.d/rc.mysqld restart

O MariaDB está instalado e rodando com uma configuração razoável. Acredito que ela é suficiente para o propósito desta série, mas eu não sou DBA para afirmar se ela é boa ou não para produção. O que posso dizer com certeza é que eu uso assim em produção e não tenho problemas.

Na hora do boot o Slackware cuidará de iniciar o MariaDB automaticamente através do script /etc/rc.d/rc.M. Você não precisa se preocupar com isso.

Portas abertas

Ao finalizar a instalação de qualquer serviço de rede, é bom verificar como ele está 'ouvindo'. Para isso use o comando ss. Por exemplo, para saber quais serviços estão ouvindo no protocolo TCP, rode:

# ss -ltp
State       Recv-Q Send-Q         Local Address:Port             Peer Address:Port
LISTEN      0      128                        *:time                        *:*        users:(("inetd",525,4))
LISTEN      0      128                        *:auth                        *:*        users:(("inetd",525,7))
LISTEN      0      128                        *:ssh                         *:*        users:(("sshd",7554,3))
LISTEN      0      128                127.0.0.1:9050                        *:*        users:(("tor",634,7))

E para saber quais serviços estão ouvindo em sockets do Unix:

# ss -lxp
Netid State      Recv-Q Send-Q       Local Address:Port           Peer Address:Port
u_str LISTEN     0      50     /var/run/mysql/mysql.sock 10804               * 0       users:(("mysqld",7463,14))
u_str LISTEN     0      128    /tmp/ssh-4pcHXPfAiB/agent.643 5019            * 0       users:(("sshd",643,7))
u_dgr LISTEN     0      0        /run/udev/control 3196                      * 0       users:(("udevd",198,3))
u_str LISTEN     0      30     /var/run/dbus/system_bus_socket 4873          * 0       users:(("dbus-daemon",548,4))
u_dgr UNCONN     0      0                 /dev/log 4031                      * 0       users:(("syslogd",338,0))
u_str UNCONN     0      0                        * 4672                      * 0       users:(("dhcpcd",451,3))
u_dgr UNCONN     0      0                        * 4095                      * 4031    users:(("klogd",342,1))
u_dgr UNCONN     0      0                        * 4673                      * 4031    users:(("dhcpcd",451,5))
u_dgr UNCONN     0      0                        * 4897                      * 4031    users:(("dbus-daemon",548,10))
u_dgr UNCONN     0      0                        * 4884                      * 4031    users:(("crond",579,3))
u_dgr UNCONN     0      0                        * 3202                      * 3203    users:(("udevd",198,8))
u_dgr UNCONN     0      0                        * 3203                      * 3202    users:(("udevd",383,9),("udevd",382,9),("udevd",198,9))

Conforme as saídas acima, além dos serviços padrão do Slackware (time e auth) ouvindo na rede, temos o SSH (*:ssh) e o Tor (127.0.0.1:9050) ouvindo em TCP. Note que o MariaDB só está disponível via socket /var/run/mysql/mysql.sock, o que corresponde ao que configuramos. Os outros sockets são padrão numa instalação do Slackware. Sua preocupação com eles e os outros serviços TCP fica a cargo do seu nível de paranóia.

Note que não há nenhum serviço ouvindo na rede IPv6 (endereços no formato :::*). Isso é esperado e desejado, uma vez que no AWS EC2 não há suporte ao IPv6. Se o seu SSH estiver ouvindo em IPv6, desative-o (dica: /etc/ssh/sshd_config, AddressFamily inet).

Use a saída do ss para direcionar o seu trabalho quando aos serviços que mais tarde receberão regras apropriadas no firewall. Mais informações sobre o ss podem ser obtidas com comando man ss e neste artigo. O comando netstat -tnap também pode ajudar nisso.

Fecho essa parte aqui. Na próxima vamos colocar o nginx no molho.