내 경험에 따르면 권한이없는 사용자는 x 비트를 설정하지 않으면 소유하지 않은 유닉스 소켓에 액세스 할 수 없습니다. 이 비트는 정확히 무엇을합니까? 감사
답변
내가 볼 수 있듯이 아무것도.
리눅스 man 페이지 유닉스 (7) 소켓을 포함하고있는 디렉토리의 권한 (즉, 당신이 필요로 일반적으로 적용된다는 것을 말한다 +x
에 /foo
에 연결하는 /foo/sock
, 그리고 +w
에 /foo
생성 /foo/sock
)하고 쓰기 소켓 자체에 연결하는 권한 제어 :
Linux에서 스트림 소켓 오브젝트에 연결하려면 해당 소켓에 대한 쓰기 권한이 필요합니다. 마찬가지로 데이터 그램을 데이터 그램 소켓에 전송하려면 해당 소켓에 대한 쓰기 권한이 필요합니다.
분명히 일부 다른 시스템은 다르게 작동합니다.
POSIX는 소켓 파일 및 일부 시스템 (예 : 이전 BSD)에 대한 권한의 영향에 대해 언급하지 않으며 소켓 권한은 무시됩니다. 휴대용 프로그램은 보안을 위해이 기능에 의존해서는 안됩니다.
unix(4)
FreeBSD에서 비슷한 요구 사항을 설명합니다. 일부 시스템의 소켓 액세스가 디렉토리 권한도 무시하는지 Linux 매뉴얼 페이지에 표시되지 않았습니다 .
x
소켓 에서 비트를 제거하면 소켓을 실행하려고 할 때 다른 오류가 발생하는 것처럼 보이지만 실제로는 큰 차이가 없습니다.
$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied
(또한 w
Debian의 Linux 4.9.0에서 소켓에 액세스하는 데 실제로 비트 만 중요 하다는 것을 테스트했습니다 .)
아마도 소켓이 사용자로부터 모든 권한 비트를 제거했거나 x
디렉토리 의 비트 를 의미 했습니까?