구체적으로 말하자면 chmod -R 755. 이제 모든 파일이 실행 가능하므로 원하지 않습니다. 에 대한 각 파일의 처음 2 바이트를 봐야한다고 생각 #!하지만 모든 것을 다룰 것입니까? 대신 file모든 것을보고 그 결정에 근거하여 사용해야합니까? 아니면 더 좋은 방법이 있습니까?
'실행 가능하지 않은'파일에 대해 재귀 적으로 디렉토리를 탐색하고 -x를 설정하는 선호되는 방법은 무엇입니까?
/, 내가 완전히 소유 한 디렉토리.
구체적으로 말하자면 chmod -R 755. 이제 모든 파일이 실행 가능하므로 원하지 않습니다. 에 대한 각 파일의 처음 2 바이트를 봐야한다고 생각 #!하지만 모든 것을 다룰 것입니까? 대신 file모든 것을보고 그 결정에 근거하여 사용해야합니까? 아니면 더 좋은 방법이 있습니까?
'실행 가능하지 않은'파일에 대해 재귀 적으로 디렉토리를 탐색하고 -x를 설정하는 선호되는 방법은 무엇입니까?
/, 내가 완전히 소유 한 디렉토리.
답변:
여기에 마법의 총알이 없습니다. 권한에는 항상 중복되는 정보가 없습니다.
시스템 디렉토리에서이 작업을 수행했다면 setuid 및 setgid 비트와 세계가 읽을 수없는 파일 및 파일에 대해 걱정해야하므로 시스템 상태가 매우 나빠질 수 있습니다. 그룹 또는 세계 쓰기 가능해야합니다.
사용자 별 디렉토리에서는 세계가 읽을 수없는 파일에 대해 걱정해야합니다. 아무도 당신을 도울 수 없습니다.
실행 가능성과 관련하여 좋은 경험 규칙은 실행 불가능한 것처럼 보이지 않는 모든 것을 실행 불가능하게 만드는 것입니다. 커널은 그 처음 두 바이트 스크립트를 실행할 수있는 #!, 그 제 4 바이트이다 ELF 바이너리 값 12, 몇 희소 파일 형식 (a.out을, 아무것도 등록과 바이트이다 ). 따라서 다음 명령은 권한을 적절한 상태로 복원해야합니다 (bash 4 또는 zsh를 가정하고 그렇지 않으면 디렉토리 트리를 탐색하는 데 사용 합니다 (경고는 브라우저에 직접 입력)).\x7fELF\x7fbinfmt_miscfind
for x in **/*; do
if ! [ -f "$x" ]; then continue; fi # skip all but regular files
case $(head -c 4 "$x") in
"#!"??) :;; # skip script
"\x7fELF") :;; # skip ELF executable
*) chmod a-x "$x";;
esac
done
Linux 및 디렉토리 지원 ACL이있는 다른 유니스에서 디렉토리 트리의 권한을 백업하고 복원하는 간단한 방법이 있습니다.
getfacl -R >saved-permissions
setfacl --restore=saved-permissions
**/*해야합니다 globstar.
find는 글로브 스타보다는 사용 하십시오. 둘째, 머리 file를 보지 않고 명령을 사용하여 머리 를보고 거기에서 분기합니다.
find보다 신뢰성 globstar, globstar거의 모든 경우에 바람직하다.
나는 당신이 같은 것을 원할 것이라고 믿습니다.
find dir -type f -exec chmod ugo-x '{}' +
dir에서 재귀 적으로 모든 일반 파일을 찾고 (디렉토리 및 장치는 제외) 실행 파일을 제거합니다.
여기서 시작한 다음 실행 가능하고 실행 가능한 파일을 만들기 위해 노력합니다.
다음은 요청 한대로 정확하게 작동해야합니다 (모든 일반 파일을 찾고 #!를 grep 한 다음 x 비트를 찾지 못하면 제거하십시오)
find . -type f | xargs grep -L #! | xargs chmod ugo-x
아마도 위의 더 나은 버전 (파이프가 적음)
find . -type f -exec grep -L #! '{}' + | xargs chmod ugo-x
grep -L '^#!'(따옴표가 필요하고, 적어도를 ^제한하는 줄의 시작 부분에 매칭)하지만 일치로 아직도 너무 관대의 #!모든 줄에. xargs공백이나 인용 문자가 포함 된 파일 이름에는 사용 이 실패합니다. 사용 xargs -d '\n'(GNU 필요 xargs).
shebang 줄이 없으면 파일은 명목상으로 셸 스크립트로 실행됩니다 /bin/sh. 당신은 좋은 출발이라고 생각합니다. 문제의 디렉토리에 미션 크리티컬 파일이 포함되어 있지 않다고 가정하면 일부 grep및 chmod콤보 를 실행할 위험이 거의 없습니다 . 허위 긍정 (예 : 실행 비트가 설정되어 있지 않지만 디렉토리에있는 목적에 대한 추가 정보를 알지 못하는 shebang 행이있는 파일)이 발생할 수 있습니다. 시스템 및 / 또는 데이터.
#!.
/다른 디렉토리 에서 했습니까 ?