Instalando o GLPI no Rock Linux 9.3

Cleiton Hoffmann
11 min readFeb 17, 2024

--

https://glpi-project.org/pt-br/

O GLPI, que significa “Gestão Livre de Parque de Informática”, é uma solução de software de código aberto projetada para facilitar a gestão de ativos de TI (Tecnologia da Informação) e serviços relacionados dentro de uma organização. Ele oferece uma ampla gama de recursos que visam otimizar a administração dos recursos tecnológicos, melhorar a eficiência operacional e facilitar o suporte aos usuários.

Principais funcionalidades e propósitos do GLPI:

  1. Gestão de Ativos: O GLPI permite o inventário detalhado de hardware e software em um ambiente corporativo. Isso inclui computadores, servidores, dispositivos de rede, softwares instalados, entre outros. A capacidade de rastrear e gerenciar ativos é essencial para garantir a segurança, atualizações e manutenção adequada.
  2. Help Desk e Gestão de Tickets: Uma das funcionalidades centrais do GLPI é o módulo de help desk, que facilita o gerenciamento de incidentes, solicitações de suporte e a resolução eficiente de problemas. Os usuários podem relatar incidentes, e a equipe de suporte pode acompanhar, atribuir prioridades e resolver essas questões de forma organizada.
  3. Gestão de Contratos e Fornecedores: O GLPI oferece recursos para o gerenciamento de contratos e relacionamentos com fornecedores. Isso inclui o monitoramento de prazos, renovações, e a centralização de informações relacionadas a contratos de serviços.
  4. Automatização de Tarefas Recorrentes: Automatizar processos repetitivos é uma parte integral do GLPI. Isso contribui para a eficiência operacional, reduzindo a carga de trabalho manual e minimizando erros humanos.
  5. Gestão de Projetos de TI: Além de lidar com ativos e incidentes diários, o GLPI também suporta a gestão de projetos de TI. Isso permite o acompanhamento de atividades, prazos e recursos associados a projetos específicos.
  6. Relatórios e Análises: O sistema oferece recursos robustos para a geração de relatórios e análises. Isso proporciona uma visão abrangente do ambiente de TI, permitindo a tomada de decisões informadas e estratégicas.
  7. Integração com Outras Ferramentas: O GLPI é projetado para integração com outras ferramentas e tecnologias, tornando-o flexível e adaptável a ambientes de TI diversificados.

O GLPI é muito mais do que um simples sistema de inventário de ativos; é uma plataforma robusta que integra recursos de gestão de tickets, gerenciamento de incidentes, inventário de hardware e software, além de oferecer uma visão abrangente do parque tecnológico da empresa. Ao permitir que as organizações consolidem essas funcionalidades em uma única interface intuitiva, o GLPI se torna um aliado poderoso na resolução de uma série de desafios comuns enfrentados pelas empresas modernas.

Realizado nossa introdução vamos abordar uma empresa fictícia chamada Acme Corporation(que é uma fabricante de bigornas e artefatos explosivos) que deseja realizar a instalação do GLPI e isso será realizada em servidor cujo sistema operacional e o Rock Linux 9.3.

Então vamos a preparação do ambiente

Com nosso sistema já instalado, nomeado e IP fixo configurado daremos andamento ao processo.

Certo primeiro vamos usar o gerenciador de pacotes dnf para buscar e instalar as atualizações mais recentes de todos os pacotes instalados no sistema.

sudo dnf update -y

Agora instalaremos as ferramentas wget, tar, policycoreutils-python-utils, vim e unzip no sistema, pois utilizaremos mais tarde.

sudo dnf install wget tar policycoreutils-python-utils vim unzip -y

Em seguida vamos remove automaticamente pacotes que não são mais necessários no sistema e limpa todos os dados armazenados em cache pelo DNF.

sudo dnf autoremove && sudo dnf clean all

Vamos checar nossa configurações de timezone.

ls -l /etc/localtime
/etc/localtime -> ../usr/share/zoneinfo/America/Sao_Paulo

Em seguida vou instalar e ajustar o NTP

O rock linux está a usar o chrony assim irei editar seu arquivo de configuração ( /etc/chrony.conf), estou a usar as configurações recomendadas em ntp.br, a versão atual já presente no Rock Linux 9.3 suporta NTS.

# servidores publicos do NTP.br com NTS disponível
server a.st1.ntp.br iburst nts
server b.st1.ntp.br iburst nts
server c.st1.ntp.br iburst nts
server d.st1.ntp.br iburst nts
server gps.ntp.br iburst nts

# caso deseje pode configurar servidores adicionais com NTS, como os da cloudflare e netnod
# nesse caso basta descomentar as linhas a seguir
server time.cloudflare.com iburst nts
server nts.netnod.se iburst nts

# arquivo usado para manter a informação do atraso do seu relógio local
driftfile /var/lib/chrony/chrony.drift

# local para as chaves e cookies NTS
ntsdumpdir /var/lib/chrony

# se quiser um log detalhado descomente as linhas a seguir
#log tracking measurements statistics
#logdir /var/log/chrony

# erro máximo tolerado em ppm em relação aos servidores
maxupdateskew 100.0

# habilita a sincronização via kernel do real-time clock a cada 11 minutos
rtcsync

# ajusta a hora do sistema com um "salto", de uma só vez, ao invés de
# ajustá-la aos poucos corrigindo a frequência, mas isso apenas se o erro
# for maior do que 1 segundo e somente para os 3 primeiros ajustes
makestep 1 3

# diretiva que indica que o offset UTC e leapseconds devem ser lidos
# da base tz (de time zone) do sistema
leapsectz right/UTC

Para reiniciar o serviço pode se utilizar o comando a seguir:

systemctl restart chronyd.service

Para verificar o correto funcionamento e a correção do tempo, bem como o uso do NTS, os seguintes comandos podem ser utilizados:

systemctl restart chrony
chronyd.service chrony-wait.service
[root@srvglpi ~]# systemctl restart chronyd.service
[root@srvglpi ~]# chronyc tracking
Reference ID : C814BA4C (200.20.186.76)
Stratum : 2
Ref time (UTC) : Fri Feb 16 23:28:13 2024
System time : 0.000199780 seconds slow of NTP time
Last offset : -0.000206281 seconds
RMS offset : 0.000206281 seconds
Frequency : 0.000 ppm slow
Residual freq : -11.481 ppm
Skew : 1000000.000 ppm
Root delay : 0.016672220 seconds
Root dispersion : 7.776476860 seconds
Update interval : 63.8 seconds
Leap status : Normal

chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- a.st1.ntp.br 1 6 37 16 -295us[ -295us] +/- 5923us
^- 201.49.148.135 2 6 37 15 +57ms[ +57ms] +/- 83ms
^? c.st1.ntp.br 1 7 4 82 -3676us[-3837us] +/- 9316us
^* 200.20.186.76 1 6 37 17 +34us[ -172us] +/- 8385us
^- gps.nu.ntp.br 1 6 37 16 -353us[ -353us] +/- 4998us
^- time.cloudflare.com 3 6 37 17 +8386us[+8386us] +/- 68ms
^- mmo1-ts.nts.netnod.se 1 6 37 16 -1304us[-1304us] +/- 109ms

chronyc -N authdata
Name/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen
=========================================================================
a.st1.ntp.br NTS 1 15 256 94 0 0 8 104
b.st1.ntp.br NTS 1 15 256 94 0 0 8 100
c.st1.ntp.br NTS 1 15 256 95 0 0 5 100
d.st1.ntp.br NTS 1 15 256 94 0 0 8 100
gps.ntp.br NTS 1 15 256 94 0 0 8 100
time.cloudflare.com NTS 1 15 256 94 0 0 8 100
nts.netnod.se NTS 1 15 256 95 0 0 8 100

Agora vamos a Instalação do apache e php

dnf  -y install https://rpms.remirepo.net/enterprise/remi-release-9.3.rpm;
#Este comando instala o repositório Remi no sistema. O repositório Remi fornece pacotes mais recentes e atualizados do PHP

sudo dnf module list php -y;
#Este comando lista os módulos PHP disponíveis no repositório

Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language


sudo dnf module enable php:remi-8.2 -y;
#Este comando habilita um módulo PHP específico (remi-8.2 neste caso) do repositório Remi.

sudo dnf -y install httpd;
sudo systemctl enable --now httpd.service;
#O primeiro comando instala o Apache (httpd).
#O segundo comando habilita e inicia o serviço Apache.

Instalação PHP

sudo dnf install php -y

sudo dnf install php-{mbstring,mysqli,xml,cli,ldap,openssl,xmlrpc,pecl-apcu,zip,curl,gd,json,session,imap,intl,zlib,redis} -y;
#Este comando instala uma série de pacotes PHP e suas dependências, incluindo módulos e extensões conforme solicitado pela documentação glpi.

Download do Arquivo GLPI

cd /tmp;
wget https://github.com/glpi-project/glpi/releases/download/10.0.11/glpi-10.0.11.tgz ;

Criação do Diretório onde sera armazenado nosso site do GLPI

sudo mkdir /var/www/ACME;

sudo tar -xvf glpi-10.0.11.tgz -C /var/www/ACME;

Moveremos o diretórios “files” e “config” para fora da hierarquia do GLPi, esta é uma recomendação de segurança.

sudo mv -v /var/www/ACME/glpi/files /var/www/ACME/glpi/config /var/www/ACME/;

Precisamos agora ajustando código do GLPi para o novo local dos diretórios

sudo sed -i 's/\/config/\/..\/config/g' /var/www/ACME/glpi/inc/based_config.php
sudo sed -i 's/\/files/\/..\/files/g' /var/www/ACME/glpi/inc/based_config.php

A partir daqui realizaremos alguns ajustes nas propriedade de arquivos do GLPi.

sudo chown apache:apache /var/www/ACME/glpi -Rf;

# Ajustar propriedade de arquivos files, config
sudo chown apache:apache /var/www/ACME/files -Rf;
sudo chown apache:apache /var/www/ACME/config -Rf;

# Ajustar permissões gerais
sudo find /var/www/ACME/ -type d -exec chmod 755 {} \;
sudo find /var/www/ACME/ -type f -exec chmod 644 {} \;

Esses comandos ajustam as permissões de todos os diretórios (-type d) para 755 e todos os arquivos (-type f) para 644 dentro de /var/www/ACME/. Isso significa que os diretórios terão permissões de leitura, escrita e execução para o proprietário e leitura e execução para outros, enquanto os arquivos terão permissões de leitura e escrita para o proprietário e leitura para outros.


sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/ACME(/.*)?";
sudo restorecon -Rv /var/www/ACME;

O primeiro comando (semanage fcontext) adiciona uma regra SELinux para permitir a escrita pelo Apache no diretório /var/www/ACME e seus subdiretórios.

O segundo comando (restorecon) restaura os contextos de segurança SELinux para os arquivos e diretórios dentro de /var/www/ACME, aplicando as regras recém-definidas.

sudo setsebool -P httpd_can_sendmail 1;
sudo setsebool -P httpd_can_network_connect 1;
sudo setsebool -P httpd_can_network_connect_db 1;
sudo setsebool -P httpd_mod_auth_ntlm_winbind 1;
sudo setsebool -P allow_httpd_mod_auth_ntlm_winbind 1;

Esses comandos ativam vários Booleans SELinux específicos para o Apache. Eles permitem que o Apache envie e-mails, conecte-se à rede, conecte-se a bancos de dados e use autenticação NTLM com o módulo winbind.

sudo sed -i "s/session.cookie_httponly =/session.cookie_httponly = on/"  /etc/php.ini

A opção session.cookie_httponly no PHP é usada para indicar se os cookies de sessão devem ser enviados apenas através de conexões HTTP. Definir isso como on significa que os cookies de sessão só serão enviados se a solicitação for uma solicitação HTTP, não uma solicitação HTTPS.

Esta configuração pode ajudar a aumentar a segurança, evitando que cookies de sessão sejam acessíveis via JavaScript (ajudando a proteger contra ataques de script entre sites — XSS).

sudo sed -i "s/;session.cookie_secure =/session.cookie_secure = on/"  /etc/php.ini

Em resumo, esse comando específico está habilitando a opção “session.cookie_secure” no arquivo de configuração do PHP, removendo o ponto e vírgula no início da linha (se existir) e definindo o valor como “on”. Essa configuração ajuda a melhorar a segurança em ambientes nos quais o PHP está sendo usado para sessões web.

Estou realizando estas substituições pois se não o fizermos será solicitado no assistente de instalação do glpi.

Agora implementamos um redirecionamento de HTTP para HTTPS no apache. Editaremos o arquivo /etc/httpd/conf/httpd.conf. E adicionaremos:

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}$1 [L]
RequestHeader set X-Forwarded-Proto "https"

Portanto, esse bloco de configuração garante que todas as solicitações HTTP sejam redirecionadas para HTTPS

Certifique-se que os modulos módulos ssl e rewrite estejam habilitados.

sudo httpd -M | grep ssl

sudo httpd -M | grep rewrite

rewrite_module (shared)

Para meu caso o mod_ssl nao estava instalado.

Instalar modulo SSL

sudo dnf install mod_ssl -y

Criando um virtual host

sudo vim /etc/httpd/conf.d/glpi.conf

<VirtualHost *:443>
ServerName glpi.ch.vlab

DocumentRoot /var/www/ACME/glpi/public

# If you want to place GLPI in a subfolder of your site (e.g. your virtual host is serving multiple applications),
# you can use an Alias directive. If you do this, the DocumentRoot directive MUST NOT target the GLPI directory itself.
# Alias "/glpi" "/var/www/glpi/public"


ErrorLog "logs/glpi_error.log"
CustomLog "logs/glpi_access.log" combined


SSLEngine on
SSLCertificateFile /etc/httpd/ssl/certs/glpi-selfsigned.crt
SSLCertificateKeyFile /etc/httpd/ssl/private/glpi-selfsigned.key

<Directory /var/www/ACME/glpi/public>
Options -Indexes
Options -Includes -ExecCGI
Require all granted

RewriteEngine On

# Ensure authorization headers are passed to PHP.
# Some Apache configurations may filter them and break usage of API, CalDAV, ...
RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect all requests to GLPI router, unless file exists.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

<IfModule mod_php.c>
php_value max_execution_time 600
php_value always_populate_raw_post_data -1
</IfModule>

</Directory>

<Directory /var/www/ACME/config>
Options -Indexes
Options -Includes -ExecCGI
AllowOverride None
Require all denied
</Directory>

<Directory /var/www/ACME/files>
Options -Indexes
Options -Includes -ExecCGI
AllowOverride None
Require all denied
</Directory>
</VirtualHost>

Agora vamos criar o certificado auto assinado.

sudo mkdir -p /etc/httpd/ssl/{private,certs}

sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/httpd/ssl/private/glpi-selfsigned.key -out /etc/httpd/ssl/certs/glpi-selfsigned.crt

httpd -t
Syntax OK

Pode ser que seja necessário algum pequeno ajuste ou correção na configuração particular de cada um.

Agora ajustaremos configurarmos o firewall do servidor.

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

sudo firewall-cmd --reload

E reiniciamos o apache

systemctl restart httpd

A esta altura se abrirmos o navegado e acessar o ip de nosso servidor ou o endereço de nosso site, se nosso dns ja estiver configurado, devemos ter a visão da pagina inicial de configuração(se tudo estiver ok , claro.)

Mas Calma ainda temos elementos a configurar.

Instalando e Configurando o mariadb-server

sudo dnf -y install mariadb-server;

#habilitando e iniciando o serviço
sudo systemctl enable --now mariadb.service ;

#Criando Usuário e Base de Dados MySQL
mysql -e "create database ACME_glpi character set utf8";

# Criando usuário
mysql -e "create user 'ACMEglpi'@'localhost' identified by 'zcn8SwbN20010002343es8EYwlePH46obxIr'";

# Dando privilégios ao usuário
mysql -e "grant all privileges on ACME_glpi .* to 'ACMEglpi'@'localhost' with grant option";

# Habilitando suporte ao timezone no MySQL/Mariadb
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql;

# Permitindo acesso do usuário ao TimeZone
mysql -e "GRANT SELECT ON mysql.time_zone_name TO 'ACMEglpi'@'localhost';";

# Forçando aplicação dos privilégios
mysql -e "FLUSH PRIVILEGES;";

systemctl restart mysqld;

O comando mysql -e é utilizado para executar instruçoes SQL diretamente a partir da linha de comando no MySQL.

Quando nos instalamos o MariaDB, o usuário root do banco de dados é criado por padrão, mas geralmente sem uma senha. Defina uma senha forte para o usuário root para evitar acesso não autorizado.

Com isso podemos acessar nosso site e finalizar as configurações:

Observe como passamos em todas as recomendações

Assim ja podemos acessar o sistema com usuarios padroes da ultima imagem.

Pós Instalação

Bom como podemos ver na ultima imagem são necessários algumas alterações que se refere a modificar senha dos usuários e remover o arquivo de instalação.

sudo rm /var/www/ACME/glpi/install/install.php

Criar entrada no agendador de tarefas do Linux

echo -e "*/3 *\t* * *\troot\tphp /var/www/ACME/glpi/front/cron.php" >> /etc/crontab

Agora concluiremos a instalação do REDIS

dnf install -y redis

systemctl enable --now redis

# Dizendo ao GLPi para usar o REDIS para cache
php /var/www/ACME/glpi/bin/console cache:configure --context=core --dsn=redis://127.0.0.1:6379

O Redis é um sistema de armazenamento de dados em memória de código aberto, conhecido por sua velocidade e versatilidade. Ele é classificado como um banco de dados em memória, mas vai além disso, ira nos auxiliar na performance do sistema.

Conclusão

Com isso devemos ter nosso sistema em perfeito funcionamento, modificações e refinamentos são necessários para cada ambiente, espero que tenham apreciado este tutorial.

--

--

Cleiton Hoffmann

Analista de Infraestrutura com foco em Cloud & DevOps | AWS | Microsoft Azure | Google Cloud | Oracle Cloud