baraboom 's 및 peth의 답변은 모두 정확합니다. 심볼릭 링크 자체의 권한 비트는 관련이 없으며 (macOS 제외; 아래 참조) 심볼릭 링크의 권한 변경 ( chmod
명령 줄 도구 또는 chmod()
시스템 호출)은 단순히 다음과 같이 작동합니다. 심볼릭 링크의 대상에 대해 수행 된 경우
symlink () 시스템 호출에 대한 SUSv4 / POSIX.1-2008 설명 을 인용하려면 다음을 수행 하십시오 .
작성된 기호 링크의 파일 모드 비트 값이 지정되지 않았습니다. POSIX.1-2008에 의해 지정된 모든 인터페이스 는 stat 구조 의 st_mode 필드에 리턴 된 파일 모드 비트의 값 이 지정되지 않은 것을 제외하고는 기호 링크의 내용을 항상 읽을 수있는 것처럼 작동 합니다 .
여기서 "지정되지 않은"은 각 구현에 대한 해석의 여지를 남깁니다. 사양 :
- Linux (ext4fs를 사용하여 테스트) 에서 심볼릭 링크를 만들 때 umask가 무엇이든 관계 없이을
stat()
반환합니다 st_mode=0777
. ls -l
따라서 항상 lrwxrwxrwx
심볼릭 링크를 표시 합니다.
- macOS (HFS) 및 FreeBSD (UFS 및 ZFS)에서 기호 링크에는 자체 권한이 있습니다.
chmod -h
위에서 언급 한 명령은이 링크 권한 (POSIX 이외의 lchown()
시스템 호출을 사용하여이를 달성하기 위해) 및 stat()
시스템을 변경할 수 있습니다. call은에 대해이 값을 반환합니다 st_mode
.
POSIX에서 지정한대로 Linux 및 FreeBSD의 기호 링크를 항상 따를 수 있습니다. 특히 FreeBSD에서 이는 심볼릭 링크의 파일 모드가 액세스 제어에 전혀 영향을 미치지 않음을 의미합니다.
반면에 macOS는 POSIX를 약간 중단합니다. 읽기 권한에 관계없이 기호 링크를 따를 수 있지만 사용자에게 읽기 권한이 없으면 (Permission denied)로 readlink()
실패합니다 EACCES
.
$ sudo ln -shf target symlink
$ sudo chmod -h 444 symlink
$ ls -l symlink
lr--r--r-- 1 root staff 1 Mar 14 13:05 symlink -> target
$ sudo chmod -h 000 symlink
$ ls -l symlink
ls: symlink: Permission denied
l--------- 1 root staff 1 Mar 14 13:05 symlink
$ echo kthxbye > target
$ cat symlink
kthxbye
( -> target
두 번째 ls -l
명령 의 출력에서 해당 부분이 누락되었으며 사용자에게에 대한 읽기 권한이없는 경우에도 파일 cat symlink
의 내용이 성공하여 인쇄 target
되었습니다 symlink
.)
NetBSD는 symperm
명시 적으로 이름 이 지정된 특수 마운트 옵션을 제공 하는데,이 옵션을 설정하면 기호 링크 읽기 / 실행 권한으로 readlink()
순회 를 제어 하고 링크 할 수 있습니다.