systemd -- su: /etc/init.d 스크립트에서 권한이 거부되었습니다.

systemd -- su: /etc/init.d 스크립트에서 권한이 거부되었습니다.

/etc/init.d우리는 RHEL6에서 RHEL8로 마이그레이션하고 있으며 다시 작성하고 테스트해야 하는 애플리케이션이 많기 때문에 이전 스크립트를 유지하고 싶습니다 .

많은 초기화 스크립트의 경우 이전 버전과의 호환성이 잘 작동합니다.

그러나 루트에서 애플리케이션별 사용자로 전환하는 다른 스크립트의 경우 다음을 수행합니다.

  su - username -c "application-start-script"

다시 시작하는 동안 실패합니다.

  su: Pemission denied.

아직,수동으로 시작그리고systemctl 일하다. 재부팅하는 동안에만 이 결함이 발생합니다.

whoami스크립트가 다음과 같이 실행되는지 확인했습니다( 를 사용하여 ).뿌리두 경우 모두.

그래서 내 질문은 다음과 같습니다.

su시스템 시작 중에 루트로 실행할 때 어떻게/왜 실패합니까?

답변1

이미 해결된 것으로 표시되었음에도 불구하고 일부 사람들은 SELinux를 비활성화할 수 있는 옵션이 없기 때문에 참여하고 싶었습니다.

init.d디렉터리 에서 ls -ZSELinux 컨텍스트를 사용하여 모든 파일을 봅니다. 귀하의 스크립트에는 다른 시작 스크립트와 비교하여 잘못된 컨텍스트가 있을 수 있으므로 일치하도록 변경해야 합니다. 가장 쉬운 것은 달리는 것이다.

sudo chcon --reference=nameofascriptthatworks yourscriptname

그리고 다른 컨텍스트와 함께 컨텍스트가 올바르게 설정되었는지 확인하십시오 ls -Z.

답변2

여기서도 같은 문제가 발생했습니다. Oracle을 시작하는 스크립트가 작동하지 않았습니다. /var/messages를 보면 이것이 허용되지 않는다는 selinux 오류가 표시됩니다. 저는 CentOS에서 작업 중이며 selinux 구성을 필수에서 완화로 변경했습니다. 그 후 모든 것이 잘되었습니다. 나에게 이것은 단지 개발 VM이므로 보안은 문제가 되지 않습니다. 메시지 파일 단일 init.d 서비스를 사용하지 않는 방법도 있는데 시도해 볼 가치가 있습니다.

고양이/etc/selinux/config

# This file controls the state of SELinux on the system on boot.

# SELINUX can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=permissive

관련 정보