설정:

설정:

누구나 읽을 수 있도록 만들고 싶지만 실행 불가능한 디렉터리에 여러 계층이 있는 파일이 있는 경우 파일의 전체 경로와 권한을 변경해야 합니다.

이렇게 할 수는 있지만 chmod 755 -R /first/inaccessible/parent/dir그렇게 하면 경로 디렉터리에 있는 다른 모든 파일의 권한이 변경되고 파일을 읽고 싶을 때 파일 자체가 실행 가능하게 됩니다.

Bash에서 이를 수행하는 간단한 방법이 있습니까?

답변1

한 가지 방법은 다음과 같습니다.

#! /bin/sh
fname=/full/path/to/file
dir=${fname%/*}
while [ x"$dir" != x ]; do
    chmod 0755 "$dir"
    dir=${dir%/*}
done
chmod 0644 "$fname"

답변2

통합체프너의날카로운논평카탈로그에 대해서만진짜실행 권한이 필요합니다:

설정:

$ mkdir -p /tmp/lh/subdir1/subdir2/subdir3
$ touch /tmp/lh/subdir1/subdir2/subdir3/filehere
$ chmod -R 700 /tmp/lh
$ find /tmp/lh -ls
16    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh
20    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1
21    4 drwx------   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2
22    4 drwx------   2 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3
23    0 -rwx------   1 user  group           0 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3/filehere

준비하다:

$ f=/tmp/lh/subdir1/subdir2/subdir3/filehere

이 방법:

$ chmod o+r "$f"
$ (cd "$(dirname "$f")" && while [ "$PWD" != "/" ]; do chmod o+x .; cd ..; done)
chmod: changing permissions of `.': Operation not permitted
$ find /tmp/lh -ls
16    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh
20    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1
21    4 drwx-----x   3 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2
22    4 drwx-----x   2 user  group        4096 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3
23    0 -rwx---r--   1 user  group           0 Oct 23 12:01 /tmp/lh/subdir1/subdir2/subdir3/filehere

중간 디렉토리에 추가 실행 권한도 부여하려면 chmod 명령을 chmod o+rx.

위에서 받은 오류 메시지는 루트가 아닌 사용자 ID가 /tmp내가 소유하지 않은 디렉터리에 대한 권한을 변경하려고 시도했기 때문에 발생했습니다.

루프는 하위 쉘에서 실행되어 현재 쉘의 $PWD에서 디렉토리 변경 사항을 격리합니다. 파일이 포함된 디렉터리를 입력하여 루핑을 시작한 다음, 루트 디렉터리에 도달할 때까지 chmod를 사용하여 위쪽으로 루핑합니다 /. 루프는 루트 디렉터리에 도달하면 종료됩니다. 루트 디렉터리를 chmod하려고 시도하지 않습니다.

다음과 같이 스크립트 파일이나 함수를 만들 수 있습니다.

function makeitreadable() (
  chmod o+r "$1"
  cd "$(dirname "$1")" &&
    while [ "$PWD" != "/" ]
    do
      chmod o+x .
      cd ..
    done
)

답변3

그러면 하위 폴더가 0755로 변경됩니다.

find /first/inaccessible/parent/dir -type d -exec chmod 0755 {} \;

파일을 검색하고 권한을 변경합니다.

chmod +r $(find /first/inaccessible/parent/dir -type f -name YourFileName)

도움이 되길 바랍니다. (참고: 기본 폴더에는 0755가 있어야 합니다)

답변4

덜 보호된 경로의 파일 노출

파일 시스템의 다른 경로에서 파일에 대한 심볼릭 링크를 생성할 수 있어야 합니다. 이렇게 하면 해당 파일이 있는 파일 디렉터리 주변의 다른 모든 디렉터리와 파일을 노출하지 않고 원본 파일이 가진 권한에 관계없이 액세스할 수 있어야 합니다.

물론 당신은 가지고/제공해야합니다다른대상 사용자/시스템에서 읽을 수 있습니다...

관련 정보