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


11

리눅스는 심볼릭 링크의 소유자 변경 (즉 lchown)을 지원하지만 심볼릭 링크 의 모드 / 권한 변경 (즉 lchmod)은 지원되지 않는 것으로 보인다. 내가 볼 수있는 한 이것은 POSIX에 따른 것입니다. 그러나 왜 이러한 작업 중 하나를 지원하지만 둘 다 지원하지 않는지 이해할 수 없습니다. 이것의 동기는 무엇입니까?


1
심볼릭 링크의 권한은 항상 lrwxrwxrwx입니다. A chmod는 여기서 의미가 없습니다. 링크를 따라 가면 대상 권한으로 연결됩니다.
ott--

2
@ott : Linux에서는 Linux가 지원하지 않기 때문에 symlink의 권한은 항상 정확하게 부여한 것 lchmod입니다. 그러나 다른 유닉스 계열 OS는이를 지원하므로 (예 : Mac OS X ) Linux가 지원하지 않는 이유는 무엇입니까 lchown?
Florian Brucker

답변:


9

Linux는 대부분의 유닉스 계열 시스템과 마찬가지로 (예를 들어 Apple OS / X는 드문 예외 중 하나임) 대상을 확인할 때 symlink에 대한 권한을 무시합니다.

그러나 다른 파일과 마찬가지로 심볼릭 링크의 소유권은 t비트 세트 가있는 디렉토리에서 항목의 이름을 바꾸거나 링크를 해제 할 수있는 권한 과 관련이 /tmp있습니다 ( 예 :) .

에서 파일을 제거하거나 이름을 바꾸려면 (symlink의 유무) /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를 전환하는 것이지만 심볼릭 링크가 추출 된 디렉토리에 대한 효율적이고 복잡한 관리는 아닙니다.


이것이 원래의 동기 부여인지 확실하지 않지만 디자인이 유용한 이유를 제공합니다. 감사!
Florian Brucker

0

posix에는 lchmod ()가 없지만 fchmodat ()는 심볼릭 링크의 권한을 설정할 수 있습니다. 이것은 여전히 ​​심볼릭 링크의 권한을 평가할 필요가 없습니다.


1
OP는 lchmodPOSIX를 준수 하지 않는다는 것을 알고 있습니다. 이 답변은 아직 질문에없는 내용을 추가합니까?
muru

op는 기능 중 하나만 지원되는 이유를 물었고 언급 한 이름이 아닌 사실상 두 가지를 모두 사용할 수 있다고 설명했습니다.
schily

1
어떻게 요? 표준에 따르면 : 일부 구현에서는 기호 링크 모드를 변경할 수 있습니다. POSIX 사양의 인터페이스에서는 지원되지 않습니다. 이러한 지원이있는 시스템은 lchmod ()라는 인터페이스를 제공합니다. 이러한 구현을 지원하기 위해 fchmodat ()에는 플래그 매개 변수가 있습니다. 이 모든 것은 구현에서 심볼릭 링크를 변경할 수있게하는 fchmodat에 대한 플래그가 있다고 말합니다. 반드시 그럴 수는 없습니다.
muru

35 년 이후 심볼릭 링크의 사용 권한이 평가되지 않으므로 모드를 변경하는 것은 의미가 없습니다. Fchmodat ()는 직교성을 위해 존재합니다. 심볼릭 링크를위한 설정 가능한 타임 스탬프가 인간이 디렉토리 트리를 이해하는 데 도움이되므로 futimensat ()만이 유일한 장점이었습니다.
schily

@schilly, OS / X는 symlink에 대한 권한을 존중합니다. 읽기 권한이 없으면 해당 대상을 확인할 수 없습니다.
Stéphane Chazelas 16:26에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.