
Existe (talvez) uma mudança entre o CentOS 7 e 8 em relação ao systemd e selinux ainda não sei como lidar com isso.
Por alguma razão (compatibilidade de distribuição cruzada), estamos usando o postgresql 9.6 deEnterpriseDB. O instalador funciona bem no CentOS 7mas não mais no CentOS 8. O instalador cria um serviço systemd rodando como usuário postgres (uid=1004 no meu caso).
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
...
Ao final do instalador o serviço é iniciado usando systemctl. Isso falha agora no CentOS 8. Quando faço um status systemctl, vejo isto:
postgresql.service: Failed to execute command: Permission denied
No sistema de arquivos e em relação às permissões do usuário está tudo perfeitamente bem.
Assim que eu desativo o SELinux ele começa a funcionar!
Isso não era necessário no CentOS 7. Alguém pode me dizer o que posso fazer agora ANTES de chamar o instalador para que sua execução funcione?
Termo aditivo
Talvez eu tenha encontrado o verdadeiro motivo do problema. Estou instalando em um disco diferente e não no sistema de arquivos raiz. O instalador começa a funcionar se eu instalar no sistema de arquivos raiz.Assim que o executável onde está a diretiva "ExecStart" do arquivo de serviço systemd estiver em outro disco ele não funcionará mais.Como dizer ao sistema para permitir isso???
Muito obrigado por me esclarecer.
Responder1
Um disco diferente em uma parte diferente da hierarquia de arquivos?
Com o SElinux em vigor, isso força você a entender o selinux e como criar traduções de contexto de arquivo! Tente o que acontece se você alterar, por exemplo, o arquivo de configuração do ntpd e os arquivos de log do ntp para outro lugar como: /services/ntpd/ntp.conf e /services/ntpd/ntp.log !
Responder2
Finalmente encontrei a solução para o meu problema há uma semana. Não mencionei isso antes na minha pergunta, pois pensei que isso não importaria.
Eu estava instalando em um disco separado novo e vazio. Não é o sistema de arquivos raiz. Descobri que a instalação no sistema de arquivos raiz funcionou.
Eu então fiz um
restaurarcon -r /ponto de montagem do novo disco
e depois disso começou a funcionar!
Acredito que isso não era necessário para o CentOS 7
Responder3
Você copiou a hierarquia da raiz (/) e para baixo para um disco atualmente montado (ou seja, montado como /tmp/tmp_mnt)?
O restorecon -r redefine o contexto dos arquivos... então ls -Z é seu amigo
ls -Z nos arquivos da unidade systemd para postgres e o binário postgres é interessante.
É provável que a política SElinux seja diferente entre centos7 e centos8.