파일 형식에 따라 실행 비트를 올바르게 설정하시겠습니까?

파일 형식에 따라 실행 비트를 올바르게 설정하시겠습니까?

내 Apache 웹 서버에 대한 권한을 지우려고 합니다. 실행 비트가 있는 많은 파일은 일반적으로 실행 비트가 없거나 없어야 한다는 것을 발견했습니다.

$ sudo find /var/www/html -executable -type f | grep '.png'
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_2e83ff_256x240.png
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
/var/www/html/.../jquery.ui/themes/smoothness/images/ui-icons_cd0a0a_256x240.png
...

일반적으로 실행 비트가 있는 일반 파일(예: 프로그램, PHP 페이지, Bash 스크립트)에 대해 실행 비트를 설정하고 일반적으로 실행 비트가 없는 일반 파일(예: TXT, PNG, JPG 및 ZIP 파일)?

find어딘가에는 효과가 있을 것 같아요 -execchmod. 또한 선택 메커니즘에서 [아마도 잘못된] 실행 비트나 [아마도 누락된] 확장에 의존하기보다는 shebang 및 기타 매직 헤더를 고려하고 싶습니다. 하지만 내 검색으로는 정답이 나오지 않았습니다. 보다,Linux에서 특정 디렉터리에 있는 실행 파일만 찾는 방법은 무엇입니까?그리고재귀적으로 실행 파일 찾기.

답변1

그러면 파일을 반복하고 file파일이 실행 가능해야 한다고 생각하는지 여부에 따라 실행 가능 비트를 설정합니다.

find /var/www/html -type f -exec bash -c 'if file -b "$1" | grep -q executable; then chmod +x "$1"; else chmod -x "$1"; fi' None {} \;

명령 은 find귀하의 명령과 매우 유사합니다. 변경 사항은 bash 명령이 추가되었다는 것입니다. 다음과 같이 여러 줄에 걸쳐 표시하면 이해하기 더 쉬울 수 있습니다.

if file -b "$1" | grep -q executable
then
    chmod +x "$1"
else
    chmod -x "$1"
fi

물론 chmod특정 요구 사항에 맞게 매개변수를 수정할 수도 있습니다.

답변2

현재 귀하의 사용 사례가 무엇인지는 모르지만 웹 폴더 아래에 실행 파일이 거의 없습니다. 프로덕션 시스템에서는 대부분의 파일에 대한 쓰기 권한도 제거했습니다.

특별한 경우에는 쓰기 권한이 필요한 폴더나 다른 소유자가 필요한 모든 특정 상황을 포함하는 별도의 파일을 보관하고 이를 사용하여 기본값을 재정의합니다.

find /path/to/webroot/ -type f -exec chmod 644 -c '{}' \;
find /path/to/webroot/ -type d -exec chmod 755 -c '{}' \;
# change owner 
chmod root:www-data /path/to/webroot/ -R

bash .fix-perm

여기서 .fix-perm은 스크립트 파일일 뿐입니다.

#.fix-perm
chmod g+w cache -R
chmod g+w logs -R

관련 정보