저는 서버와 클라이언트로 상황을 만들고 있고 그들이 통신할 수 있도록 파이프를 만들고 싶습니다.
다음 명령을 사용하여 서버 코드에 파이프를 만들었습니다
mkfifo("fifo",1755);
.
- 1 생성된 사용자와 루트만이 삭제하거나 이름을 바꿀 수 있으며,
- 7은 사용자에게 읽기, 쓰기 및 실행 권한을 제공하는 데 사용됩니다.
- 5 그룹 및 기타 그룹에는 읽기 및 실행 권한만 부여합니다.
문제는 나중에 서버 코드에서 fifo를 열어서 읽었 open("fifo",O_RDONLY);
지만 실행하면 fifo에 대한 액세스를 거부하는 오류가 표시된다는 것입니다.
파이프 fifo의 권한을 살펴보았는데 다음과 같습니다
p-wx--s--t
.
p
파이프라인을 나타내며,-
사용자가 읽지 않았음을 나타냅니다. 언제 7을 줬는지는 모르겠지만,s
그룹 실행에는 사용자가 있습니다. 1을 주면 사용자와 다른 사람에게 읽고 실행할 수 있는 능력만 부여하고 다른 사람에게 기대되는 능력은 부여하지 않는지 모르겠습니다.
권한을 오해하고 있습니까?
답변1
단순히 파이프에서 바이너리를 실행할 수는 없습니다.파이프에서 네이티브 바이너리를 실행하는 방법이 있나요?. 또한 실행 파일의 끈적한 비트는 최신 시스템에서 아무런 가치가 없다고 생각합니다.
서버 코드에서 파이프를 만들었습니다.
mkfifo("fifo",1755);
파이프 fifo의 권한을 살펴보았는데 다음과 같습니다
p-wx--s--t
.
1755
귀하의 오류는 권한이 선행 없이 작성되었다는 것입니다 0
. 이는 1755
8진수 대신 10진수로 처리되었음을 의미합니다( 1755 & ~022 = 03311 = p-wx--s--t
; 022
umask는 어디에 있습니까).