Equipe CCPA
voltar

Procedimentos para Instalação da Infraestrutura
Instalação do ambiente de execução
Configuração do Sapolio em um computador local usando a imagem do Docker
Configuração do Git
Descobrindo a versão do Ubuntu
Comandos apt-get
Tunel via ssh
Nobreak SMS - Iniciar aplicativo
Nobreak SMS - Configurações do aplicativo
Wake On Lan
Geração automática de documentação
Acesso à máquina certificadora
Renovação do certificado do servidor Web (HTTPS)
Instalação do ambiente de execução

  1. Configurar o locale:
    1. Verificar se o locale correto (pt_BR.UTF-8) está instalado (execute locale na linha de comando). Ele deve existir no arquivo /var/lib/locales/supported.d/pt).
    2. Se não estiver:
      update-locale LANG="pt_BR.UTF-8" LANGUAGE="pt_BR:pt:en"
      
    3. Se não funcionar:
      1. Descomente a linha # pt_BR.UTF-8 UTF-8 no arquivo /etc/locale.gen
      2. Gere os locales que devem estar disponíveis: sudo locale-gen
      3. Execute o passo anterior (update-locale ...)
  2. Instalar pacotes Debian:
    sudo apt install build-essential zlib1g-dev zip p7zip-full libreadline-dev apache2
    sudo apt install postgresql postgresql-contrib postgresql-client postgresql-server-dev-all
    sudo apt install lua5.3 liblua5.3-dev
    sudo apt install openssl libssl-dev libssl-doc libzzip-dev libexpat-dev
    sudo apt install texlive-full texlive-lang-portuguese texlive-fonts-recommended texlive-latex-extra tipa texlive-latex-recommended
    
  3. Configurar o PostgreSQL:
    • Atualizar o postgresql.conf:
      listen_addresses = '*'      # what IP address(es) to listen on
      
    • Atualizar pg_hba.conf:
      # Liberar o acesso sem senha localmente
      cp /etc/postgresql/12/main/pg_hba.conf /tmp/
      sed '/^#/!s/[a-z0-9]*.$/trust/g' /etc/postgresql/12/main/pg_hba.conf > /tmp/pg_hba.conf
      # Liberar o acesso com senha APENAS para o usuário acompanhamento e APENAS para conexões vindas do IP indicado
      cat "host all acompanhamento 139.82.9.6/32 md5" >> /tmp/pg_hba.conf
      # Copia o novo pg_hba.conf para o local apropriado e reinicia o banco
      cp /tmp/pg_hba.conf /etc/postgresql/12/main/pg_hba.conf
      /etc/init.d/postgresql restart
      # Cria os usuários e importa a base de dados
      psql -U postgres -f $DUMP_ROLES
      psql -U postgres -f $DUMP_DATABASE
      
  4. Configurar o Apache:
    (*) manter o arquivo "alfa.conf" de uma instalação prévia
    (*) ativar os modulos para gerenciamentos de grupos (authz_groupfile) e cgilua (cgid)
    SITE_AVAILABLE=/etc/apache2/sites-available
    SITE_ENABLED=/etc/apache2/sites-enabled
    sudo cp alfa.conf $SITE_AVAILABLE
    sudo ln -s $SITE_AVAILABLE/alfa.conf  $SITE_ENABLED/alfa.conf
    sudo service apache2 restart
    sudo a2enmod authz_groupfile
    sudo a2enmod cgid
    sudo service apache2 restart
    
  5. Arquivos de configuração das contas de usuários. Acrescentar o que está em negrito e sublinhado:
    • /etc/pam.d/common-session (umask de comandos remotos)
      session optional                        pam_umask.so umask=0002
      
    • /etc/skel/.bashrc (template do .bashrc)
      # Configuração da equipe NSI-CSAcad
      # árvore de rocks
      export TREE='/home/ccpa-auto/luarocks'
      #prompt colorido
      #export PS1='\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
      
    • /etc/skel/.profile (template do .profile)
      #umask 022
      umask 0002
      ...
      # Configurações da equipe NSI-CSAcad
      # PATH onde são instalados os scripts dos rocks
      PATH=$PATH:/home/ccpa-auto/luarocks/bin
      
    • /etc/ssh/sshd_config (configuração do sshd)
      # Configuração da equipe NSI-CSAcad
      # restrição de acesso (via ssh) a somente os seguintes usuários
      AllowUsers tomas daniel geraldoluiz
      
  6. Criar usuário "ccpa-auto":
    sudo adduser --ingroup users ccpa-auto
    # copiar arquivos backup public_html do ccpa-auto (checar outros diretórios!!)
    # copiar arquivos /var/www/dev e /var/www/private_rocks
    # permitir que todos consultem os arquivos
    chmod o+rx /home/ccpa-auto
    
  7. LuaRocks:
    wget http://luarocks.github.io/luarocks/releases/luarocks-3.7.0.tar.gz
    tar xfz luarocks-3.7.0.tar.gz
    cd  luarocks-3.7.0
    ./configure
    make build
    sudo make install
    make bootstrap
    luarocks --tree=/home/ccpa-auto/luarocks --server=http://alfa.vrac.puc-rio.br/nossos install ccpa-env PGSQL_INCDIR=/usr/include/postgresql/
    
  8. Configurar disparadores (o comando abaixo pode ser usado também para os disparadores cgilua.fcgi e wsapi.cgi):
    # habilita o uso de [#!/usr/bin/env cgilua.cgi] no início dos scripts
    sudo ln -s /home/ccpa-auto/luarocks/bin/cgilua.cgi /usr/local/bin/cgilua.cgi
    # habilita a carga da configuração do CGILua para nós
    DOCUMENT_ROOT= ??  # Tipicamente, DocumentRoot é /var/www
    sudo mkdir $DOCUMENT_ROOT/cgilua
    sudo chown ccpa-auto:users $DOCUMENT_ROOT/cgilua
    sudo chmod g+w $DOCUMENT_ROOT/cgilua
    echo require\"sintra.cgilua.config\" > $DOCUMENT_ROOT/cgilua/config.lua
    
Configuração de uma máquina de teste usando a imagem do Docker

Visão geral:
Criar containers para simular máquinas.
Esses containers terão nomes da forma gdt-prod-<NOME_DO_USUARIO>.
Alguns diretórios serão mapeados de algum diretório do host para um diretório do container.

Primeiros passos: Criar no 'host' no diretório desejado a pasta 'ccpa-auto' que será mapeada para dentro do container, e copiar do bitbucket os arquivos do sapolio e do avalie:
  cd PATH_DESEJADO
  mkdir ccpa-auto
  cd ccpa-auto
  git clone git@bitbucket.org:puc-rio/avalie.git
  git clone git@bitbucket.org:puc-rio/sapolio.git

Em outra pasta dentro da área de trabalho do seu usuário, copie o repositório 'docker-dev', construa a imagem e rode o container:

Construir imagem:
Clonar repo:
  git clone git@bitbucket.org:puc-rio/docker-dev.git
  cd docker-dev
Construir imagem:
  sudo docker build -t gdt-prod:latest .

Rodar container:
Criar arquivo chamado '.env' no mesmo diretório do docker-dev com as seguintes variáveis
(Essas variáveis de ambiente serão usadas na pelo 'docker-compose.yml')
  SAP_PATH=<PATH_SAPOLIO>
  AVALIE_PATH=<PATH_AVALIE>
  BACKUP_PATH=<PATH_BACKUP>

  PORT_APACHE=<PORTA_DO_APACHE>
  PORT_SSH=<PORTA_DO_SSH>
  LOGUSER=<NOME_DO_CONTAINER>

Executar na mesma pasta do 'docker-dev':
  sudo -E docker compose up -d --no-recreate
Adicionar ao /etc/hosts:
  127.0.1.1 omega

Configurar o .ssh/config
Ex:

  HostName localhost
   User tomas
   Port 10022

Para enfim:
  ssh gdt-prod

E/ou acessar o container pela url no navegador como:
  http://omega:PORT_APACHE/avalie/home.lua
Como descobrir a versão do Ubuntu?

Descobrindo a versão do Ubuntu:

ssh [usuário@]máquina "lsb_release -a"

Descobrindo informações da máquina:

ssh [usuário@]máquina "uname -a"

Ou:

ssh [usuário@]máquina "file /sbin/init"
Configuração do Git

Para que todos os desenvolvedores possam atualizar um sistema através do Git, o clone do repositório NÃO deve incluir a conta pessoal de quem fizer a primeira instalação. Uma forma de fazer isso é editar o arquivo .git/config e retirar o trecho nome_usuario@ que ficar na seção [remote "origin"], associada à chave url. Por exemplo:

...
[remote "origin"]
    url = https://bitbucket.org/puc-rio/sapolio.git
    fetch = +refs/heads/*:refs/remotes/origin/*
...

Uma opção é trocar o acesso para ssh. alterando a linha do meio para: url = git@bitbucket.org:puc-rio/sapolio.git

Comandos apt-get

Site com comandos para o gerenciamento de pacotes no Debian.
Tunel via ssh

Um túnel via ssh serve para ter acesso a uma máquina (ou porta de uma máquina) em uma rede inacessível diretamente, usando uma máquina intermediária que serve de ponte entre a sua local e a destino.

No nosso caso, como as duas únicas portas de acesso à máquina intermediária (Satoro) são as 32122 (ssh) e 80 (http), não temos como ter acesso externo a nenhuma outra máquina das redes da PUC. Assim, o jeito de chegar à máquina assinaturadigital-api.dsi.puc-rio.br, por exemplo, é fazer um túnel através do Satoro para redirecionar as conexões para ela.

ssh -L <porta local>:<máquina destino>:<porta destino> <seu usuário>@<máquina intermediária>

Explicando:

porta local é a entrada do túnel, portanto é a porta que você deve usar para se conectar
máquina destino é a máquina que você quer alcançar
porta destino é a porta na máquina destino
seu usuário é o nome do usuário na máquina intermediária, que é quem vai fazer o redirecionamento

Em outras palavras, todas as conexões feitas através da porta local são redirecionadas pelo Satoro para a máquina destino.

Exemplo:

eu@local: $ ssh -p 32122 -L 1025:assinaturadigital-api.dsi.puc-rio.br:443 eu@satoro

No navegador

https://localhost:1025/apidocs/index.html

Através dessa porta local chega-se à porta especificada na máquina destino através do túnel!

Nobreak SMS - Iniciar aplicativo

O Nobreak SMS (Senoidal Inteligente) do alfa possui um aplicativo para gerenciamento de energia. Ele pode ser acessado através do endereço:

Caso esta página não esteja abrindo o aplicativo, siga os passos abaixo para inicializá-lo.

Nobreak SMS - Configurações do aplicativo

O Nobreak SMS (Senoidal Inteligente) do alfa possui um aplicativo para gerenciamento de energia. Nele, são definidas algumas configurações de funcionamento do nobreak. Elas devem ser aplicadas na seguinte página:

As configurações a serem aplicadas estão definidas abaixo.

Wake On Lan

Com esse recurso podemos iniciar as nossas máquinas remotamente, sendo necessário apenas o endereço MAC e o IP de broadcast da rede.

Geração automática de documentação

A geração automática da documentação é feita apenas para os arquivos na pasta modulos de cada sistema. As páginas são geradas pela ferramenta LDoc através de comandos como a seguir:

$ ldoc /home/ccpa-auto/<sistema>/modulos --dir /var/www/doc/<sistema>/
Acesso à máquina certificadora

O acesso à máquina certificadora (139.82.9.51) deve ser feito através de ssh com o usuário sra, para o qual já fiz três pares de chaves, uma para cada um de nossos servidores: alfa, prod e satoro. As chaves públicas já estão instaladas na certificadora.

O esquema em funcionamento é simples e assíncrono: copia-se o(s) arquivo(s) que se deseja assinar para o diretório inbound na certificadora e, depois de algum tempo um arquivo de mesmo nome com sufixo _S deverá aparecer no diretório outbound assim como o original será apagado do inbound.


O nosso problema é que usamos dois usuários (do ponto de vista do S.O.) diferentes para as nossas "coisas": o ccpa-auto, para os programas de linha de comando; e o www-data, para tudo o que é disparado pela Web. Em geral a gente não se dá conta disso, mas o usuário que executa praticamente tudo é o usuário do Apache e, como tal, costuma ser configurado para não ter permissão para nada, justamente para evitar problemas de invasão e dar um mínimo de segurança. Assim, o www-data não está configurado para logar e não tem um interpretador de comandos definido, como pode ser constatado no /etc/passwd.

Dito isso, decidi instalar a chave privativa para o usuário ccpa-auto E TAMBÉM para o usuário www-data. Isso foi feito da seguinte forma:

Renovação (reissue) do certificado do servidor Web

Embora o certificado tenha validade de alguns anos, todo ano é necessário renová-lo (reissue) e atualizar os arquivos de configuração no servidor Web. Este processo depende de acesso ao site da empresa que gerou o certificado e da aprovação do RDC, já que foi configurado que eles são os administradores do domínio.

O RDC possui uma página com explicações bem crípticas sobre esse processo, mas que pode ajudar.

  1. Verificar a validade atual:
    1. Acessar alguma página via HTTPS
    2. No cadeado da página (na barra da URL), clicar em Conexão Segura -> Mais informações (isso pode variar dependendo do navegador)
    3. Ver certificado
    4. Verificar a Validade; deve aparecer um período: "Não antes de" e "Não após"
  2. Renovar o certificado
    1. Essa parte começa quando o Casanova repassar o e-mail de aviso de renovação, mas pode ser feita diretamente através do link:
      https://cheapsslsecurity.com/client/orderdtl.html?orderdetailid=466013
      1. Identificação: casanova@inf.puc-rio.br
        Senha que ele me passou!
      2. Em Manage Order | Validity, clicar no botão Reissue Now
        Irá aparecer uma tela com três passos: (1) Input CSR, (2) Select your server, e (3) Select the signature algorithm.
      3. Clicar em CSR Generation Tool
        Irá abrir uma outra aba/janela com os dados para a geração do CSR:
        • Common Name (Hostname): www.ccpa.puc-rio.br (CN)
        • Organization: PONTIFICIA UNIVERSIDADE CATOLICA DO RIO DE JANEIRO (O)
        • City/Locality: RIO DE JANEIRO (L)
        • State/Region: RIO DE JANEIRO (ST)
        • Country: BR (C)
        • Key Algorithm: RSA
        • Key Size: 2048
      4. Clicar em GENERATE CSR
      5. Download do .txt (www.ccpa.puc-rio.br.key)
      6. Copiar o CSR
    2. Paste do CSR no passo (1) dos três passos da página
    3. Selecionar o servidor Web: Apache
    4. Selecionar o algoritmo: SHA-512
    5. Clicar em Continue
      Isso irá fazer o site enviar um e-mail de confirmação para hostmaster@puc-rio.br
    6. Entrar em contato com o RDC (através do cat@puc-rio.br) e pedir para eles confirmarem (eles fazem essa confirmação diretamente no site ou através de e-mail)
    7. Na mesma página, onde aparecem os dados do certificado, ao lado de Status: Pending, clique em Refresh até que o status mude
    8. Clique no botão Download Certificate, que deverá surgir quando o status mudar; o arquivo deve ser um .zip
  3. Instalar o novo certificado:
    1. Copiar os arquivos (.key baixado depois de gerar o CSR; e dois arquivos .crt dentre do .zip) para a pastar /etc/ssl/certs/ccpa/ no servidor:
      • www_ccpa_puc-rio_br.crt é o SSLCertificateFile
      • www.ccpa.puc-rio.br.key é o SSLCertificateKeyFile e deve ter permissão -rw------- 1 root root
      • DigiCertCA.crt é o SSLCertificateChainFile
      • Resumindo:
        tomas@ccpa-vm:/etc/ssl/certs/ccpa$ ls -l
        total 68
        -rw-r--r-- 1 root root  1958 Jan  8  2021 ccpa_01-2021.key
        -rw-r--r-- 1 root root  2362 Jan  8  2021 ccpa_01-2021.pem
        lrwxrwxrwx 1 root root    23 Jan 12  2022 ccpa_01-2022.crt -> www_ccpa_puc-rio_br.crt
        lrwxrwxrwx 1 root root    19 Jan 12  2022 ccpa_01-2022.key -> ccpa_puc-rio_br.key
        lrwxrwxrwx 1 root root    23 Feb  1  2023 ccpa_01-2023.crt -> www_ccpa_puc-rio_br.crt
        lrwxrwxrwx 1 root root    28 Feb  9 10:16 ccpa_01-2024.crt -> www_ccpa_puc-rio_br_2024.crt
        lrwxrwxrwx 1 root root    28 Feb  9 10:18 ccpa_01-2024.key -> www.ccpa.puc-rio.br_2024.key
        -rw------- 1 root root  1704 Jan 11  2022 ccpa_puc-rio_br.key
        -rw-r--r-- 1 root root  1720 Feb  9 10:14 DigiCertCA_2024.crt
        -rw-rw-r-- 1 root root  1934 Jan 12  2022 DigiCertCA.crt
        -rw-r--r-- 1 root root  1934 Jan  8  2021 intermediario_01-2021.crt
        lrwxrwxrwx 1 root root    14 Jan 12  2022 intermediario_01-2022.crt -> DigiCertCA.crt
        lrwxrwxrwx 1 root root    27 Feb  1  2023 intermediario_01-2023.crt -> intermediarioDigiCertCA.crt
        lrwxrwxrwx 1 root root    19 Feb  9 10:17 intermediario_2024.crt -> DigiCertCA_2024.crt
        -rw-rw-r-- 1 root root  2102 Jan 31  2023 intermediarioDigiCertCA.crt
        -rw-r--r-- 1 root root  2252 Feb  9 10:15 www_ccpa_puc-rio_br_2024.crt
        -rw------- 1 root root  1732 Feb  9 09:59 www.ccpa.puc-rio.br_2024.key
        -rw-rw-r-- 1 root root  2750 Jan 31  2023 www_ccpa_puc-rio_br.crt
        
    2. Atualizar o arquivo de configuração do Apache: /etc/apache2/sites-enabled/ccpa-ssl.conf:
              SSLCertificateFile    /etc/ssl/certs/ccpa/www_ccpa_puc-rio_br_2024.crt
              SSLCertificateKeyFile /etc/ssl/certs/ccpa/www.ccpa.puc-rio.br_2024.key
              SSLCertificateChainFile /etc/ssl/certs/ccpa/DigiCertCA_2024.crt
      
    3. Recarregar a configuração do Apache: sudo apache2ctl graceful
voltar