Eu fiz algumas pesquisas, codificação e documentação; aqui está um link para um cenário de uso ...
link
... escrevi apenas para você e administradores de servidores que enfrentam regulamentações semelhantes. Teste antes de colocar em produção e leia os avisos.
Eu sei que os links, por si só, não são suficientes para responder à pergunta, por isso vou entrar no processo de pensamento por trás da solução proposta.
Como os logs são gravados em poucas linhas por vez, fazendo um sistema de arquivos criptografado unidirecional é um pouco mais kill e fora das habilidades que tenho, em vez disso, o script automatiza a configuração de um específico tipo de arquivo ( mkfifo
) que atua como um pipe nomeado e um conjunto de regras de script que escutam as ações de gravação no arquivo de pipe nomeado. Este par de arquivos, em seguida, gera o terceiro arquivo, aquele que você está pedindo, um arquivo de log anexado criptografado que o host não pode ler. As operações do script são semelhantes a echo 'log message' | gpg -a -r [email protected] >> server.log
em execução para cada ação de log, mas com um canal nomeado em vez de |
e a lógica do script manipula o gpg'ing e anexa a um arquivo. Usar pipes nomeados em vez de pipes anônimos significa que apenas o caminho de saída do serviço de geração de log precisa ser atualizado para usar o caminho do pipe nomeado, em vez de ser um arquivo padrão para usar as tarefas de criptografia.
Note que há outros recursos que talvez já sejam úteis preparados que permitem criptografar e enviar arquivos de log por e-mail quando atingem um tamanho especificado pelo usuário; esses recursos são separados para permitir que o software IDS / IPS analisar registros ou tornar os logs enviados mais difíceis de espionar quando combinados com criptografia por gravação.
Editar / atualizar: você pode querer verificar o início rápido abreviado para outra pergunta que tenha um escopo mais geral, mas semelhante o suficiente para justificar a inclusão nesta resposta.
link
Editar / Atualizar: parece que os links dentro do markdown no GitHub são muito específicos do navegador, então aqui está uma cópia do primeiro cenário do documento vinculado acima.
Cenário de uso personalizado para o servidor da web
- Fazer o download e copiar o script para um
${PATH}
dir
'' '
git clone https://github.com/S0AndS0/Perinoid_Pipes
cd Perinoid_Pipes
cp Paranoid_Pipes.sh /usr/local/sbin/
chown ${USER}:${USER} /usr/local/sbin/Paranoid_Pipes.sh
chmod 700 /usr/local/sbin/Paranoid_Pipes.sh
'' '
- Mostrar opções de linha de comando disponíveis & seus valores atuais.
'' '
Paranoid_Pipes.sh --help
'' '
- Defina opções de linha de comando para gravar um canal nomeado no mesmo sistema de arquivos que o aplicativo do servidor da Web e o analisador de script personalizado no sistema de arquivos de hospedagem.
'' '
Paranoid_Pipes.sh --copy-save-yn='yes'\
--copy-save-name="/jailer_scripts/website_host/Web_log_encrypter.sh"\
--copy-save-ownership="notwwwuser:notwwwgroup"\
--copy-save-permissions='100'\
--debug-level='6'\
--listener-quit-string='sOmErAnDoM_sTrInG_wItHoUt_SpAcEs_tHaT_iS_nOt_NoRmAlY_rEaD'\
--log-level='0'\
--named-pipe-name="/jailed_servers/website_host/var/log/www/access.log.pipe"\
--named-pipe-ownership='notwwwuser:wwwgroup'\
--named-pipe-permissions='420'\
--output-parse-name="/jailed_logs/website_host/www_access.gpg"\
--output-parse-recipient="[email protected]"\
--output-rotate-actions='compress-encrypt,remove-old'\
--output-rotate-check-requency='25000'\
--output-rotate-max-bites='8388608'\
--output-rotate-recipient="[email protected]"\
--output-rotate-yn='yes'\
--output-save-yn='yes'\
--disown-yn='yes' --help
'' '
Observe que se o aplicativo do servidor não estiver em uma cadeia chroot, será necessário modificar os caminhos de arquivo para o pipe nomeado e a cópia do script, porque, acima, pressupõe-se que alguma forma de segregação do sistema de arquivos já tenha sido implementada. Remova o --help
acima para que o script execute ações em vez de imprimir os valores atuais das opções da linha de comando.
O caminho do arquivo de pipe nomeado (o caminho do arquivo --named-pipe-name
) deve ser adicionado manualmente ao caminho de log do seu servidor web, isso é diferente para cada daemon / servidor, de forma que os dados registrados dos clientes normais sejam gravados no arquivo de pipe nomeado .
A cópia do script (salva em --copy-save-name
caminho do arquivo) é o que faz a magia escutando as ações de gravação em seu arquivo de pipe nomeado relacionado, envia linhas registradas pelo GnuPG e anexa os resultados ( usando a chave pública para --output-parse-recipient
para criptografia inicial) no arquivo especificado pela opção de linha de comando --output-parse-name
.
O arquivo de log criptografado resultante é monitorado quanto ao tamanho do arquivo e quando isso e o contador de gravação são grandes o suficiente, o arquivo de log é criptografado novamente usando a chave pública para --output-rotate-recipient
e movido / renomeado.
Se o seu servidor puder enviar e-mails, modifique as opções --output-rotate-actions
para incluir email
como uma ação válida e os logs duplamente criptografados serão eventualmente transferidos.
Observe que, se você usar duas chaves públicas diferentes para criptografia, precisará das chaves privadas relacionadas a serem aplicadas na ordem correta de descriptografia.