Mudanças entre as edições de "Atualizacao OJS"

De wiki.franca.unesp.br
Ir para: navegação, pesquisa
Linha 205: Linha 205:
 
<pre>
 
<pre>
 
installed = On
 
installed = On
 +
</pre>
 +
 +
 +
= Documentação de Segurança e Pós-Instalação: OJS 3.5 LTS =
 +
 +
Este guia técnico detalha as camadas de proteção de infraestrutura, regras do servidor web Apache e mecanismos de defesa aplicados no ecossistema do Open Journal Systems (OJS 3.5) para eliminar ataques direcionados e cadastros automatizados de robôs.
 +
 +
== Passo 1: Blindagem de Permissões de Arquivos no Linux ==
 +
 +
Para garantir que o usuário do servidor web (<tt>www-data</tt>) não consiga modificar ou injetar scripts maliciosos nos arquivos estruturais do OJS, redefinimos a árvore de permissões do sistema operacional de forma estrita.
 +
 +
=== 1.1. Ajuste de Propriedade e Permissões Globais ===
 +
Acesse a pasta definitiva de produção e transfira a propriedade do código-fonte para o usuário administrador (<tt>root</tt>), mantendo o Apache apenas no grupo de leitura.
 +
<pre>
 +
cd /var/www/ojs3
 +
sudo chown -R root:www-data .
 +
sudo find . -type d -exec chmod 755 {} \;
 +
sudo find . -type f -exec chmod 644 {} \;
 +
</pre>
 +
 +
=== 1.2. Liberação de Escrita Restrita ===
 +
Conceda permissão de gravação (<tt>775</tt>) exclusivamente nos diretórios onde o OJS precisa manipular arquivos temporários e receber uploads legítimos.
 +
<pre>
 +
sudo chmod -R 775 cache/ public/
 +
sudo chown -R root:www-data /usr/uploads
 +
sudo chmod -R 775 /usr/uploads
 +
sudo rm -rf cache/*.php cache/t_compile/* cache/_db/*
 +
</pre>
 +
 +
== Passo 2: Configuração do reCAPTCHA v3 do Google (Invisível) ==
 +
 +
O OJS 3.5 exige o uso de chaves nativas do tipo **reCAPTCHA v3**. O uso de chaves v2 gera falhas críticas de validação de proprietário no formulário de registro.
 +
 +
=== 2.1. Ajuste no Arquivo de Configuração ===
 +
Edite o arquivo <tt>/var/www/ojs3/config.inc.php</tt>, localize a seção <tt>[captcha]</tt> e insira as credenciais geradas no console do Google:
 +
<pre>
 +
[captcha]
 +
captcha = on
 +
captcha_on_register = on
 +
recaptcha = on
 +
recaptcha_public_key = "SUA_CHAVE_DE_SITE_V3"
 +
recaptcha_private_key = "SUA_CHAVE_SECRETA_V3"
 +
recaptcha_enforce_hostname = off
 +
</pre>
 +
* ''Nota: Mantenha a diretiva <tt>recaptcha_enforce_hostname</tt> em <tt>off</tt> para evitar falsos positivos causados por proxies ou redirecionamentos de rede da UNESP.''
 +
 +
== Passo 3: Proteção da Pasta Pública e Regras do Apache ==
 +
 +
=== 3.1. Criação do Arquivo de Inibição .htaccess ===
 +
Crie um arquivo de controle interno na pasta de uploads públicos para impedir terminantemente a execução de qualquer interpretador de scripts backend.
 +
<pre>
 +
sudo nano /var/www/ojs3/public/.htaccess
 +
</pre>
 +
Cole o seguinte conteúdo estruturado para o Apache 2.4:
 +
<pre>
 +
# 1. Mantém a liberação de scripts visuais legítimos do OJS
 +
<Files ~ "js/\.(js|JS)$">
 +
    Require all granted
 +
</Files>
 +
 +
# 2. Bloqueia a execução de QUALQUER script interpretável
 +
<FilesMatch "\.(?:inc|php|php3|php4|php5|php7|php8|phtml|py|rb)$">
 +
    <IfModule mod_authz_core.c>
 +
        Require all denied
 +
    </IfModule>
 +
    <IfModule !mod_authz_core.c>
 +
        Order Allow,Deny
 +
        Deny from all
 +
    </IfModule>
 +
</FilesMatch>
 +
 +
# 3. Remove a capacidade do servidor de processar o tipo MIME dessas extensões nesta pasta
 +
RemoveHandler .php .phtml .php3 .php4 .php5 .php7 .php8
 +
RemoveType .php .phtml .php3 .php4 .php5 .php7 .php8
 +
</pre>
 +
Ajuste as permissões de integridade do arquivo:
 +
<pre>
 +
sudo chown root:www-data /var/www/ojs3/public/.htaccess
 +
sudo chmod 644 /var/www/ojs3/public/.htaccess
 +
</pre>
 +
 +
=== 3.2. Configuração do Host Virtual do Apache e Redirecionamento HTTPS ===
 +
Edite o arquivo de configuração do site (<tt>/etc/apache2/sites-available/ojs.conf</tt>) para mitigar ataques de clickjacking, ocultar dados do servidor e forçar o uso de SSL na porta 80 via redirecionamento nativo estável (301).
 +
 +
<pre>
 +
<VirtualHost *:80>
 +
    ServerName ojs.franca.unesp.br
 +
    Redirect permanent / https://unesp.br
 +
</VirtualHost>
 +
 +
<VirtualHost *:443>
 +
    ServerName ojs.franca.unesp.br
 +
    DocumentRoot /var/www/ojs3
 +
 +
    # Cabeçalhos Globais de Segurança
 +
    Header always set X-Frame-Options "SAMEORIGIN"
 +
    Header always set X-XSS-Protection "1; mode=block"
 +
    Header always set X-Content-Type-Options "nosniff"
 +
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
 +
 +
    # Restrição física de execução e listagem na pasta Public
 +
    <Directory "/var/www/ojs3/public">
 +
        Options Indexes FollowSymLinks
 +
        AllowOverride All
 +
        Require all granted
 +
        <FilesMatch "\.(php|php3|php4|php5|php7|php8|phtml)$">
 +
            Require all denied
 +
        </FilesMatch>
 +
    </Directory>
 +
</VirtualHost>
 +
</pre>
 +
Aplique o teste de integridade e recarregue o servidor web:
 +
<pre>
 +
sudo apache2ctl configtest
 +
sudo systemctl restart apache2
 +
</pre>
 +
 +
== Passo 4: Automação de Tarefas Críticas (Cron Job) ==
 +
 +
No OJS 3.5, as tarefas agendadas devem ser gerenciadas diretamente pelo agendador do Debian, aliviando o tempo de resposta das requisições HTTP normais.
 +
 +
=== 4.1. Desativação do Gatilho Web ===
 +
Altere o parâmetro dentro do <tt>config.inc.php</tt> na seção <tt>[general]</tt>:
 +
```ini
 +
scheduled_tasks = Off
 +
```
 +
 +
=== 4.2. Inserção no Cron do Usuário www-data ===
 +
Abra o arquivo de agendamentos do usuário do Apache:
 +
<pre>
 +
sudo crontab -u www-data -e
 +
</pre>
 +
Adicione a instrução de execução minuciosa no final do arquivo:
 +
<pre>
 +
* * * * * php /var/www/ojs3/tools/runScheduledTasks.php
 
</pre>
 
</pre>

Edição das 16h19min de 17 de julho de 2026

Índice

Tutorial de Migração e Atualização do OJS (v3.2.1.4 para v3.3.0.22)

Este guia documenta o processo de migração de ambiente e atualização do Open Journal Systems (OJS) para corrigir inconsistências estruturais e eliminar vulnerabilidades de segurança exploradas por bots.

Passo 1: Backup e Exportação no Servidor Antigo (OJS 3.2.1.4)

Acesse o servidor de produção antigo via terminal SSH e execute os comandos abaixo para exportar o banco de dados e compactar os arquivos de mídias e submissões.

1.1. Exportação do Banco de Dados

mysqldump -u seu_usuario_banco -p seu_banco_ojs > /tmp/ojs_prod_32.sql

1.2. Compactação do Diretório de Uploads Privados (files_dir)

tar -czvf /tmp/uploads_ojs.tar.gz -C /usr/uploads .

1.3. Compactação da Pasta Pública de Imagens e Temas

tar -czvf /tmp/public_ojs.tar.gz -C /var/www/ojs public

Passo 2: Importação e Preparação no Novo Servidor (Debian/PHP 8.1)

Envie os arquivos gerados no `/tmp` do servidor antigo para o `/tmp` do novo servidor. Em seguida, prepare a estrutura do OJS 3.3.0.22 limpo.

2.1. Restauração dos Uploads Privados no Novo Caminho

mkdir -p /usr/uploads
tar -xzvf /tmp/uploads_ojs.tar.gz -C /usr/uploads

2.2. Instalação do Código Limpo do OJS 3.3 e Restauração da Pasta Public

cd /var/www/
# (Assumindo que você já baixou e extraiu o OJS 3.3 em /var/www/ojs3)
tar -xzvf /tmp/public_ojs.tar.gz -C /var/www/ojs3/

2.3. Criação e Importação do Banco de Dados de Homologação

mysql -u root -p -e "CREATE DATABASE ojs3_teste CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -u root -p ojs3_teste < /tmp/ojs_prod_32.sql

Passo 3: Saneamento Preventivo do Banco de Dados (DBeaver/MySQL)

Antes de iniciar a atualização, é obrigatório corrigir as inconsistências de dados e estruturas antigas que travam o atualizador do OJS. Abra o seu gerenciador de banco de dados (ex: DBeaver), conecte-se à base `ojs3_teste` e execute o bloco SQL abaixo integralmente:

-- =================================================================
-- CORREÇÃO 1: TABELA EMAIL_LOG (Erro de truncamento de dados)
-- =================================================================
DELETE FROM email_log 
WHERE assoc_id IS NULL 
   OR assoc_type IS NULL 
   OR assoc_id = 0 
   OR assoc_type = 0;

DELETE FROM email_log WHERE NOT assoc_id REGEXP '^[0-9]+\$';

-- =================================================================
-- CORREÇÃO 2: TABELA REVIEW_ROUND_FILES (Erro 150 / Chave Estrangeira)
-- =================================================================
-- Força as duas tabelas a usarem o mesmo motor InnoDB
ALTER TABLE submission_files ENGINE=InnoDB;
ALTER TABLE review_round_files ENGINE=InnoDB;

-- Iguala perfeitamente o tipo de dado da coluna de ligação nas duas tabelas
ALTER TABLE submission_files MODIFY file_id BIGINT NOT NULL;
ALTER TABLE review_round_files MODIFY file_id BIGINT NOT NULL;

-- Remove registros órfãos de revisões que apontam para arquivos inexistentes
DELETE FROM review_round_files 
WHERE file_id NOT IN (SELECT file_id FROM submission_files);

-- Remove registros zerados ou nulos que corrompem a chave estrangeira posterior
DELETE FROM review_round_files WHERE file_id IS NULL OR file_id = 0;

Passo 4: Execução do Script de Atualização (CLI)

Com os dados limpos, prepare o arquivo de configuração e dispare o interpretador de atualização do OJS via linha de comando.

4.1. Configuração Inicial

Edite o arquivo `/var/www/ojs3/config.inc.php` com as credenciais do banco `ojs3_teste`, aponte o `files_dir = /usr/uploads` e ajuste temporariamente a diretiva de instalação:

installed = Off

4.2. Execução do Upgrade

Acesse a pasta raiz do novo OJS e execute o comando:

cd /var/www/ojs3
php tools/upgrade.php upgrade
  • Nota: O processo realizará a migração pesada OJSv3_3_0UpgradeMigration. É normal o script levar entre 45 minutos e 2 horas processando as tabelas e arquivos em segundo plano. Aguarde a mensagem final: "Successfully upgraded to version 3.3.0.22".

Passo 5: Ajuste Fino de Permissões no Linux (Pós-Upgrade)

Para resolver erros de escrita de templates (`Smarty: unable to write file`) e garantir a segurança do ambiente contra injeções de arquivos por bots, aplique as permissões estritas no Debian:

# 1. Garante que o root é dono do código e o grupo www-data (Apache) possa ler
cd /var/www/ojs3
sudo chown -R root:www-data .

# 2. Libera escrita estritamente nas pastas de cache e uploads públicos
sudo chmod -R 775 cache/ public/

# 3. Libera escrita no diretório privado de uploads
sudo chown -R root:www-data /usr/uploads
sudo chmod -R 775 /usr/uploads

# 4. Limpa resíduos e caches antigos gerados no processo
sudo rm -rf cache/*.php cache/t_compile/* cache/_db/*

5.1. Ativação do Sistema

Retorne ao arquivo `/var/www/ojs3/config.inc.php` e reative o OJS mudando a diretiva para:

installed = On



Tutorial de Atualização Final: OJS 3.3.0.22 para OJS 3.5.0-5 LTS

Este guia orienta a etapa final de atualização do Open Journal Systems (OJS) para a versão mais recente com suporte de longo prazo (LTS), fechando permanentemente as vulnerabilidades contra bots.

Passo 1: Preparação do Pacote OJS 3.5 LTS

Acesse o terminal do novo servidor e faça o download do pacote limpo da versão mais recente diretamente do repositório do PKP.

1.1. Download e Extração do OJS 3.5

cd /tmp
wget https://sfu.ca
tar -xzvf ojs-3.5.0-5.tar.gz

1.2. Criação do Novo Diretório da Aplicação

Para manter o ambiente organizado, criaremos uma pasta temporária para a nova versão e depois substituiremos a antiga.

mv /tmp/ojs-3.5.0-5 /var/www/ojs35

Passo 2: Migração dos Arquivos Públicos e Configurações

O OJS 3.5 exige o reaproveitamento da pasta pública e do diretório de uploads que já foram saneados na etapa anterior.

2.1. Cópia da Pasta Public e Configuração

cp -R /var/www/ojs3/public /var/www/ojs35/
cp /var/www/ojs3/config.inc.php /var/www/ojs35/

2.2. Ajuste de Parâmetros no config.inc.php

Edite o arquivo `/var/www/ojs35/config.inc.php` para desativar o sistema temporariamente e conferir os caminhos:

  • Altere:
    installed = Off
  • Garanta que o caminho dos arquivos está correto:
    files_dir = /usr/uploads

Passo 3: Execução do Script de Upgrade Final (CLI)

Ao contrário da migração anterior, a atualização do 3.3 para o 3.5 é focada em novos recursos e otimizações, levando poucos minutos.

3.1. Execução do Comando

Acesse a pasta da nova versão e execute o interpretador de atualização:

cd /var/www/ojs35
php tools/upgrade.php upgrade
  • Nota: Aguarde a exibição da mensagem de sucesso: "Successfully upgraded to version 3.5.0.5".

Passo 4: Substituição do Diretório de Produção e Permissões

Com o upgrade concluído com sucesso, vamos alternar as pastas para que a versão 3.5 assuma o caminho definitivo `/var/www/ojs3`.

4.1. Substituição de Pastas

cd /var/www
mv ojs3 ojs3_antigo_33
mv ojs35 ojs3

4.2. Aplicação de Permissões Estritas Antibots

Execute os comandos de proteção no diretório definitivo do OJS:

cd /var/www/ojs3
sudo chown -R root:www-data .
sudo chmod -R 775 cache/ public/

# Permissão no diretório de uploads externo
sudo chown -R root:www-data /usr/uploads
sudo chmod -R 775 /usr/uploads

# Limpeza profunda de caches da versão anterior
sudo rm -rf cache/*.php cache/t_compile/* cache/_db/*

4.3. Reativação do Sistema

Abra o arquivo `/var/www/ojs3/config.inc.php` e altere a seguinte diretiva para restabelecer o acesso público:

installed = On


Documentação de Segurança e Pós-Instalação: OJS 3.5 LTS

Este guia técnico detalha as camadas de proteção de infraestrutura, regras do servidor web Apache e mecanismos de defesa aplicados no ecossistema do Open Journal Systems (OJS 3.5) para eliminar ataques direcionados e cadastros automatizados de robôs.

Passo 1: Blindagem de Permissões de Arquivos no Linux

Para garantir que o usuário do servidor web (www-data) não consiga modificar ou injetar scripts maliciosos nos arquivos estruturais do OJS, redefinimos a árvore de permissões do sistema operacional de forma estrita.

1.1. Ajuste de Propriedade e Permissões Globais

Acesse a pasta definitiva de produção e transfira a propriedade do código-fonte para o usuário administrador (root), mantendo o Apache apenas no grupo de leitura.

cd /var/www/ojs3
sudo chown -R root:www-data .
sudo find . -type d -exec chmod 755 {} \;
sudo find . -type f -exec chmod 644 {} \;

1.2. Liberação de Escrita Restrita

Conceda permissão de gravação (775) exclusivamente nos diretórios onde o OJS precisa manipular arquivos temporários e receber uploads legítimos.

sudo chmod -R 775 cache/ public/
sudo chown -R root:www-data /usr/uploads
sudo chmod -R 775 /usr/uploads
sudo rm -rf cache/*.php cache/t_compile/* cache/_db/*

Passo 2: Configuração do reCAPTCHA v3 do Google (Invisível)

O OJS 3.5 exige o uso de chaves nativas do tipo **reCAPTCHA v3**. O uso de chaves v2 gera falhas críticas de validação de proprietário no formulário de registro.

2.1. Ajuste no Arquivo de Configuração

Edite o arquivo /var/www/ojs3/config.inc.php, localize a seção [captcha] e insira as credenciais geradas no console do Google:

[captcha]
captcha = on
captcha_on_register = on
recaptcha = on
recaptcha_public_key = "SUA_CHAVE_DE_SITE_V3"
recaptcha_private_key = "SUA_CHAVE_SECRETA_V3"
recaptcha_enforce_hostname = off
  • Nota: Mantenha a diretiva recaptcha_enforce_hostname em off para evitar falsos positivos causados por proxies ou redirecionamentos de rede da UNESP.

Passo 3: Proteção da Pasta Pública e Regras do Apache

3.1. Criação do Arquivo de Inibição .htaccess

Crie um arquivo de controle interno na pasta de uploads públicos para impedir terminantemente a execução de qualquer interpretador de scripts backend.

sudo nano /var/www/ojs3/public/.htaccess

Cole o seguinte conteúdo estruturado para o Apache 2.4:

# 1. Mantém a liberação de scripts visuais legítimos do OJS
<Files ~ "js/\.(js|JS)$">
    Require all granted
</Files>

# 2. Bloqueia a execução de QUALQUER script interpretável
<FilesMatch "\.(?:inc|php|php3|php4|php5|php7|php8|phtml|py|rb)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order Allow,Deny
        Deny from all
    </IfModule>
</FilesMatch>

# 3. Remove a capacidade do servidor de processar o tipo MIME dessas extensões nesta pasta
RemoveHandler .php .phtml .php3 .php4 .php5 .php7 .php8
RemoveType .php .phtml .php3 .php4 .php5 .php7 .php8

Ajuste as permissões de integridade do arquivo:

sudo chown root:www-data /var/www/ojs3/public/.htaccess
sudo chmod 644 /var/www/ojs3/public/.htaccess

3.2. Configuração do Host Virtual do Apache e Redirecionamento HTTPS

Edite o arquivo de configuração do site (/etc/apache2/sites-available/ojs.conf) para mitigar ataques de clickjacking, ocultar dados do servidor e forçar o uso de SSL na porta 80 via redirecionamento nativo estável (301).

<VirtualHost *:80>
    ServerName ojs.franca.unesp.br
    Redirect permanent / https://unesp.br
</VirtualHost>

<VirtualHost *:443>
    ServerName ojs.franca.unesp.br
    DocumentRoot /var/www/ojs3

    # Cabeçalhos Globais de Segurança
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set X-Content-Type-Options "nosniff"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"

    # Restrição física de execução e listagem na pasta Public
    <Directory "/var/www/ojs3/public">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
        <FilesMatch "\.(php|php3|php4|php5|php7|php8|phtml)$">
            Require all denied
        </FilesMatch>
    </Directory>
</VirtualHost>

Aplique o teste de integridade e recarregue o servidor web:

sudo apache2ctl configtest
sudo systemctl restart apache2

Passo 4: Automação de Tarefas Críticas (Cron Job)

No OJS 3.5, as tarefas agendadas devem ser gerenciadas diretamente pelo agendador do Debian, aliviando o tempo de resposta das requisições HTTP normais.

4.1. Desativação do Gatilho Web

Altere o parâmetro dentro do config.inc.php na seção [general]: ```ini scheduled_tasks = Off ```

4.2. Inserção no Cron do Usuário www-data

Abra o arquivo de agendamentos do usuário do Apache:

sudo crontab -u www-data -e

Adicione a instrução de execução minuciosa no final do arquivo:

* * * * * php /var/www/ojs3/tools/runScheduledTasks.php