CentOS 8에서 권한이 없는 사용자로 실행되는 시스템 서비스를 실행할 수 없습니다.

CentOS 8에서 권한이 없는 사용자로 실행되는 시스템 서비스를 실행할 수 없습니다.

systemd와 selinux와 관련하여 CentOS 7과 8 사이에 변경 사항이 있을 수 있습니다. 아직 이를 처리하는 방법을 모르겠습니다.

어떤 이유로(교차 배포판 호환) 우리는 postgresql 9.6을 사용하고 있습니다.엔터프라이즈DB. 설치 프로그램이 CentOS 7에서 제대로 작동합니다.하지만 더 이상 CentOS 8에는 없습니다.. 설치 프로그램은 사용자 postgres(내 경우에는 uid=1004)로 실행되는 systemd 서비스를 생성합니다.

[Service]
Type=forking
TimeoutSec=120

User=postgres
Group=postgres
...

설치 프로그램이 끝나면 systemctl을 사용하여 서비스가 시작됩니다. 이제 CentOS 8에서는 실패합니다. systemctl status를 수행하면 다음이 표시됩니다.

postgresql.service: Failed to execute command: Permission denied

파일 시스템과 사용자 권한에 관한 모든 것이 완벽합니다.

SELinux를 비활성화하자마자 작동이 시작됩니다!

CentOS 7에서는 이것이 필요하지 않았습니다. 설치 프로그램을 호출하여 실행이 작동하도록 하기 전에 지금 무엇을 할 수 있는지 말해 줄 수 있습니까?

부록

아마도 문제의 진짜 원인을 찾았을 것입니다. 루트 파일 시스템이 아닌 다른 디스크에 설치하려고 합니다. 루트 파일 시스템에 설치하면 설치 프로그램이 작동하기 시작합니다.시스템 서비스 파일의 "ExecStart" 지시어가 다른 디스크에 있는 실행 파일은 더 이상 작동하지 않습니다.이를 허용하도록 시스템에 지시하는 방법은???

제 자신을 깨닫게 해주셔서 정말 감사드립니다.

답변1

파일 계층의 다른 부분에 있는 다른 디스크?

SElinux를 사용하면 selinux와 파일 컨텍스트 번역을 만드는 방법을 이해할 수 있습니다! 예를 들어 ntpd의 구성 파일과 ntp의 로그 파일을 /services/ntpd/ntp.conf 및 /services/ntpd/ntp.log와 같은 다른 위치로 변경하면 어떻게 되는지 시도해 보십시오!

답변2

마침내 나는 일주일 전에 내 문제에 대한 해결책을 찾았습니다. 내 질문에 이전에는 그것이 중요하지 않을 것이라고 생각했기 때문에 언급하지 않았습니다.

신선하고 비어 있는 별도의 디스크에 설치하고 있었습니다. 루트 파일 시스템이 아닙니다. 루트 파일 시스템에 설치하면 효과가 있다는 것을 알았습니다.

나는 그랬던 것보다

Restorecon -r /새 디스크의 마운트 지점

그 후 작동하기 시작했습니다!

CentOS 7에서는 이 작업이 필요하지 않다고 생각합니다.

답변3

계층 구조를 루트(/)부터 현재 마운트된 디스크(예: /tmp/tmp_mnt로 마운트)로 복사했습니다.

Restorecon -r은 파일의 컨텍스트를 재설정하므로 ls -Z가 친구입니다.

postgres 및 postgres 바이너리에 대한 시스템 단위 파일에 대한 ls -Z가 흥미롭습니다.

SElinux 정책이 centos7과 centos8 간에 다를 가능성이 있습니다.

관련 정보