심볼릭 링크에 대한 권한 변경


37

다음 권한이있는 심볼릭 링크가 있습니다.

lrwxrwxrwx 1 myuser myuser       38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*

심볼릭 링크는 .tar.gz 아카이브에 있습니다. 이제 maven을 사용하여 tar.gz 아카이브의 압축을 풀면 symlink가 더 이상 유효하지 않습니다. 따라서 심볼릭 링크를 재구성하려고합니다. 먼저 ln을 사용하여 심볼릭 링크를 만들지 만 원래 심볼릭 링크와 동일한 권한을 어떻게 설정합니까?

답변:


59

새로운 심볼릭 링크를 만들어 이전 링크의 위치로 옮길 수 있습니다.

ln -s <new_location> npm2
mv -f npm2 npm

링크 소유권이 유지됩니다. 또는 chown링크의 소유권을 수동으로 설정하는 데 사용할 수 있습니다.

chown -h myuser:myuser npm

대부분의 시스템에서 symlink 권한은 중요하지 않습니다. 심볼릭 링크를 사용하면 심볼릭 링크 대상 구성 요소의 권한이 검사됩니다. 그러나 일부 시스템에서는 문제가 있습니다. MacOS는에 대한 링크에 대한 읽기 권한이 필요 readlink하며 NetBSD의 symperm마운트 옵션은 읽기 및 순회에 대한 링크 권한 검사를 강제 실행합니다. 이 시스템들 (그리고 FreeBSD와 OpenBSD를 포함한 그들의 친척들)에는에 상응하는 -h옵션이 chmod있습니다.

chmod -h 777 npm

1
방금 CentOS 6.8 서버에서 심볼릭 링크에 대한 권한 문제가 발생했습니다. 심볼릭 링크에는 소유자 : 루트 : 루트 그룹이 있습니다. 이 답변에 표시된 것처럼 소유자와 그룹이 자신이 속한 디렉토리를 소유 한 사용자로 변경되면 권한 문제가 사라졌습니다.
Night Owl

설명 만 제공하면됩니다. symlink의 소유권 또는 권한을 변경하기 위해 -h 플래그는 역 참조 된 파일 대신 symlink 파일에 영향을줍니다.
울티마 무기

12

chmod링크의 권한을 설정하는 데 사용하려고 할 때 실제로는 링크 대상의 권한을 설정하는 것입니다. 링크의 권한은 의미가 없습니다.


2
누군가가 악성 코드에 대한 링크를 변경하면 어떻게됩니까? 원래 코드는 루트가 액세스 할 수있는 것일 수도 있습니다. 예를 들어 crontap 스크립트에서.
aliqandil

@aliqandil 일반적으로 사용자는 쓰기 액세스 권한이있는 디렉토리의 파일을 삭제하고 다시 만들 수 있습니다. 배쉬에서, 파일 test-rw-rw-r-- root root대한, rm test내가 묻는 메시지가 rm: remove write-protected regular empty file 'test'?이 솔루션은 사용자가 읽기 전용 액세스 한있는 디렉토리에 민감한 파일을 배치하는 것입니다.
AnOccasionalCashew

5

다음과 같은 링크가있는 경우 :

link -> foo/bar

그것을 다음과 같이 변경하고 싶습니다 :

link -> new/target

고려해야 할 두 가지 경우가 있습니다.

  1. foo/bar디렉토리가 아니거나 존재하지 않거나에 대한 검색 액세스 권한이 없습니다 foo. 그때

    ln -s new/target link
    

    link이미 존재 하기 때문에 실패 하지만 표준을 사용하여 극복 할 수 있습니다.

    ln -fs new/target link
    
  2. foo/bar디렉토리입니다 (그리고 디렉토리 foo인지 판별 할 수 있는 검색 권한 이 있습니다 foo/bar). 이 경우에는 다음을 수행하십시오.

    ln -s new/target link
    

    또는

    ln -fs new/target link
    

    그것은 디렉토리 target안에 새로운 심볼릭 링크 를 만드는 것으로 이해됩니다 link( link디렉토리에 대한 심볼릭 링크이기 때문에 foo/bar디렉토리입니다). 따라서 실제로 다음을 생성합니다.

    foo/bar/target -> new/target
    

    이를 극복하기 위해 GNU ln에는 -T링크 이름을 항상 링크 이름으로 간주하고 링크를 작성하기위한 디렉토리로 간주 할 수 있는 옵션이 있습니다 ln.

    ln -fsT new/target link
    

    작동합니다. 이전과 마찬가지로 원본 link심볼릭 링크 를 제거하고 new/target대상 (및 프로세스의 euid 및 egid를 소유자로)으로 새로 만듭니다 .

    GNU ln에는 -n옵션 도 있습니다. 실제로 실제 디렉토리 인 경우를 -T제외하고 link는 작동하지만 오류가 발생하지 않고 해당 디렉토리 내에 심볼릭 링크가 여전히 생성됩니다.

    아마도 가장 좋은 방법은 먼저 링크를 제거한 다음 다시 작성하는 것입니다.

    rm -f link && ln -s new/target link
    

대부분의 시스템에서 심볼릭 링크에 대한 권한은 무시되며 일반적으로로 고정됩니다 rwxrwxrwx.

심볼릭 링크 권한이 중요한 시스템 (예 : 대상을 확인할 수 있도록 심볼릭 링크에 대한 읽기 권한이 필요한 OS / X)에서는 일반적으로 chmod -hOS / X에서 이를 변경할 수있는 방법이 있습니다 .

소유권은 위의 대부분의 시스템에서 symlink가 가리키는 파일에 대한 액세스와 관련이 없지만 상위 디렉토리 또는 할당량 비트와 관련하여 다른 관련성을 가질 수 있으며t 변경하는 표준 명령이 있습니다.

chown -h user[:group] the-link
chgrp -h group the-link

0

심볼릭 링크 권한을 정말로 변경 해야하는 경우 (보통 다른 답변으로 작성된 의미가 없음) -R옵션을 사용하여 성공했습니다 chown.

chown -R myuser:mygroup link

-R사용하지 않은 경우 권한이 변경되지 않았습니다.


즉 GNU와 함께 작동 chown하기 때문에 -R암시 -P가의가 보장되지 그러나 것을, 그리고 몇몇 다른 대한 Chown 구현에서 작동하지 않습니다. 심볼릭 링크 소유권을 변경하는 표준 방법은 -h옵션을 사용하는 것입니다. 잘못된 답변을 업데이트했습니다.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.