누구나 읽을 수 있도록 만들고 싶지만 실행 불가능한 디렉터리에 여러 계층이 있는 파일이 있는 경우 파일의 전체 경로와 권한을 변경해야 합니다.
이렇게 할 수는 있지만 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
덜 보호된 경로의 파일 노출
파일 시스템의 다른 경로에서 파일에 대한 심볼릭 링크를 생성할 수 있어야 합니다. 이렇게 하면 해당 파일이 있는 파일 디렉터리 주변의 다른 모든 디렉터리와 파일을 노출하지 않고 원본 파일이 가진 권한에 관계없이 액세스할 수 있어야 합니다.
물론 당신은 가지고/제공해야합니다다른길예대상 사용자/시스템에서 읽을 수 있습니다...