Linux/POSIX에 lchown은 있지만 lchmod는 없는 이유는 무엇입니까?

Linux/POSIX에 lchown은 있지만 lchmod는 없는 이유는 무엇입니까?

Linux는 심볼릭 링크 소유자 변경을 지원하는 것으로 보입니다(예:lchown) 그러나 심볼릭 링크의 모드/권한을 변경하는 것(예: lchmod)은지원하지 않음. 내가 아는 한 이것은 POSIX와 호환됩니다. 그러나 왜 사람들이 두 가지 작업 대신 둘 중 하나를 지원하는지 이해가 되지 않습니다. 이것의 동기는 무엇입니까?

답변1

대부분의 Unix 계열 시스템(Apple OS/X는 몇 가지 예외 중 하나)과 마찬가지로 Linux는 대상을 확인할 때 심볼릭 링크의 권한을 무시합니다.

그러나 다른 파일과 마찬가지로 심볼릭 링크의 소유권은 비트가 설정된 디렉터리와 동일합니다( t예: /tmp.

파일을 삭제하거나 이름을 바꾸려면(심볼릭 링크 유무에 관계없이) /tmp파일의 소유자여야 합니다. 이것이 심볼릭 링크의 소유권을 변경하려는 이유 중 하나입니다(링크를 해제하거나 이름을 바꿀 수 있는 권한을 부여하거나 제거하기 위해).

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

또한 Mark Plotnick이 그의 책에서 언급했듯이답변은 현재 삭제되었습니다lchown(), 백업 및 보관 애플리케이션은 원래 소유자에 대한 기호 링크를 복원 해야 합니다 . 또 다른 옵션은 심볼릭 링크를 생성하기 전에 euid와 egid를 전환하는 것입니다. 그러나 이 방법은 작동하지 않으며 심볼릭 링크가 추출되는 디렉터리의 권한 관리를 복잡하게 만듭니다.

답변2

posix에는 lchmod()가 없지만 기호 링크에 대한 권한 설정을 허용하는 fchmodat()가 있습니다. 여전히 평가할 심볼릭 링크의 권한이 필요하지 않습니다.

관련 정보