ls -l
나는 실행 결과를보고 있습니다 /proc/<pid>/fd/
:
lr-x------ 1 root root 64 Apr 22 23:13 0 -> /dev/null
lrwx------ 1 root root 64 Apr 22 23:13 1 -> 'socket:[19700]'
lrwx------ 1 root root 64 Apr 22 23:13 2 -> 'socket:[19700]'
...
심볼릭 링크에 대한 권한은 무엇을 의미합니까? 내 첫 번째 생각은 파일 설명자의 "패턴"을 나타낸다는 것이었습니다. 하지만 그렇다면 왜 stdout
읽을 수 있습니까? 또한 모든 설명자가 실행 가능한 이유는 무엇입니까?
답변1
Linux의 /proc
파일 시스템은 객체를 실제로 파일이 아닌 파일로 렌더링합니다. 이는 알려진 API를 사용하여 객체를 파일로 렌더링합니다.
파일 설명자에 대한 실제 심볼릭 링크가 없습니다. 그러나 기호 링크는 파일 설명자에 대한 정보를 표시하는 편리한 방법입니다. 이러한 기호 링크는 필요할 때 즉석에서 생성됩니다(VFS에 캐시될 수 있으므로 일반적으로 처음 나타나는 날짜가 있습니다). 일반적으로 Linux에서 기호 링크에는 대상이 인증되므로 항상 가능한 모든 권한이 허용됩니다. 그러나 여기서 권한 표시는 파일 설명자가 열린 방식을 반영합니다. 이는 사용자(또는 때때로 루트(예: 프로세스가 덤프 불가능 또는 추적 불가능으로 설정된 경우))가 소유한 것처럼 보이며 액세스 속성이 실제로 확인되지 않은 경우에도 액세스 속성은 사용자로 제한됩니다(소유권 확인 )예시행, 아래 참조). 많은 세부 사항이 기록되어 있습니다.proc(5)
/proc/[pid]/fd/
예를 들어 입구에서:
/proc/[pid]/fd/
[...]
파이프 및 소켓에 대한 파일 설명자의 경우 항목은 내용이 inode가 있는 파일 유형인 기호 링크입니다. 이 파일에서 readlink(2)를 호출하면 다음 형식의 문자열이 반환됩니다.
유형: [인덱스 노드]
[...]
이 디렉토리의 심볼릭 링크를 역참조하거나 읽을 수 있는 권한(readlink(2))은 ptrace 액세스 모드 확인에 의해 제어됩니다
PTRACE_MODE_READ_FSCREDS
. ptrace(2)를 참조하세요.
따라서 동일한 사용자에게 속한 프로세스만 확인할 수 있습니다(또는 프로세스가 덤프 불가능/처리 불가능 및 기타 특수 경고로 설정된 경우 확인조차 할 수 없습니다).
내가 문서화하지 않은 것은 proc(5)
심볼릭 링크에 표시된 액세스 권한이 proc/[pid]/fd/
파일 설명자가 열린 방법을 반영하는 경우가 많다는 것입니다. 따라서 읽기 전용( ls -l /proc/self/fd/9 9</dev/null
), 쓰기 전용( ls -l /proc/self/fd/9 9>/dev/null
) 또는 읽기-쓰기( ls -l /proc/self/fd/9 9<>/dev/null
)를 열면 각각 다음 액세스 권한이 표시됩니다.
lr-x------
l-wx------
lrwx------
마찬가지로, 생성된 (이름이 지정되지 않은) 파이프를 사용하면 pipe(2)
읽기 모드의 FD 하나와 쓰기 모드의 FD 하나를 갖게 됩니다. 소켓은 양방향입니다. 읽기 전용 또는 쓰기 전용으로 "열기"라는 개념이 없으며 실제로 open(2)
시스템 호출도 없습니다. lrwx------
읽거나 쓸 수 있다는 점을 반영하는 것으로 간주됩니다 .
답변2
man chmod(1)이 말했습니다:
chmod는 기호 링크의 권한을 변경하지 않습니다. chmod 시스템 호출은 해당 권한을 변경할 수 없습니다.심볼릭 링크의 권한은 절대 사용되지 않으므로 이는 문제가 되지 않습니다.그러나 명령줄에 나열된 모든 기호 링크에 대해 chmod는 포인팅 파일에 대한 권한을 변경합니다.
기본적으로는 아무 의미가 없습니다.