일어나서는 안되는 EACCES

일어나서는 안되는 EACCES

나는 리눅스 박스에서 내가 정말로 설명할 수 없는 상황에 직면했습니다.

배경 정보: 우리는 애플리케이션에 요청을 전달하는 ac/C++ 모듈을 사용하여 Apache를 실행하고 있습니다. 요청이 전송될 로컬 포트를 지정하는 .port 파일을 읽어 이를 수행합니다.

설치 후 웹 인터페이스를 사용하여 연결할 수 없습니다. 몇 가지 문제 해결 후 strace를 꺼내서 Apache 프로세스가 .port 파일을 읽을 수 없다는 것을 발견했습니다.

[pid  8105] stat("/tmp/somedir/application.port", 0x7ffff9694470) = -1 EACCES (Permission denied)

파일의 권한을 확인합니다.

% ls -l /tmp/somedir/application.port
-rw-r--r--. 1 appuser staff    5 Oct 16 14:10 application.port

글쎄요, 누구나 읽을 수 있어야겠죠?

아파치 프로세스가 어떻게 실행되는지 확인합니다.

% ps -ef | grep 8105
appuser   8105  3357  0 15:14 ?        00:00:00 /usr/sbin/httpd

따라서 아파치 프로세스는 파일의 소유자로 실행됩니다. 그것도 효과가 있겠지?

마지막으로 나는 이렇게 한다:

% su - appuser
% stat /tmp/somedir/application.port
  File: `/tmp/somedir/application.port'
  Size: 5           Blocks: 8          IO Block: 4096   regular file
Device: 11h/17d Inode: 1400293     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1001/ appuser)   Gid: ( 1001/   staff)
Access: 2013-10-16 14:10:03.357679902 +0200
Modify: 2013-10-16 14:10:03.357679902 +0200
Change: 2013-10-16 14:10:03.357679902 +0200

그러면 "appuser"는 파일을 소유하고 웹 서버를 실행하지만 웹 서버 프로세스 내에서 해당 파일을 stat()할 수 있는 권한이 없습니까? 여기서 무슨 일이 일어나고 있는지 아는 사람 있나요?

또한 이것이 우리가 수행한 첫 번째 설치가 아니며 다른 설치도 예상대로 작동했다는 점을 언급하고 싶습니다. 이 특정 기계를 설정하는 동안 수동으로 약간의 조정이 있었을 수도 있지만, 어떻게 해서 이렇게 되었는지 아직도 이해가 되지 않습니다.

프로세스를 다시 시작해도 동작이 변경되지 않습니다.

기계는 RHEL 6 상자입니다.

답변1

마지막으로 문제가 실제로 SELinux와 관련되어 있음을 발견했습니다.

SELinux가 무엇인지에 대한 빠른 개요와 몇 가지 유용한 명령이 필요한 사람에게는 다음을 권장합니다.단순한 필사자를 위한 SELinux유튜브 동영상. 이는 문제 해결에 대한 좋은 소개입니다.

관련 정보