Bash 스크립트는 파일 및 디렉터리 권한을 반복적으로 가져와 필요한 권한과 비교하고 올바른 경우 반환합니다.

Bash 스크립트는 파일 및 디렉터리 권한을 반복적으로 가져와 필요한 권한과 비교하고 올바른 경우 반환합니다.

파일 및 디렉터리 집합의 권한을 검색하는 스크립트를 작성하려고 합니다. 그런 다음 각 권한이 올바르게 설정되었는지 확인하세요.

권한이 잘못 설정된 경우 권한이 잘못 설정된 디렉터리나 파일 그룹을 에코할 수 있기를 원합니다.

지금까지는 "find"를 사용하여 디렉터리 내의 모든 파일과 디렉터리를 재귀적으로 찾은 다음 통계를 실행하여 현재 권한을 반환했습니다. 그런 다음 반환된 권한 목록에서 if-then 문을 사용하여 파일이나 디렉터리에 예상과 다른 권한이 있는지 확인합니다. 이는 != 연산자와 패턴 일치를 통해 수행됩니다. 따라서 모든 파일의 권한은 444로 설정되고 디렉터리의 권한은 555로 설정되어야 합니다. 아무것도 반환되지 않으면 권한이 잘못된 것입니다.

for site in $(echo /var/www/*)
do
    permcheckfile=$(find $site -type f -exec stat -c '%a' '{}' +)
    permcheckdir=$(find $site -type d -exec stat -c '%a' '{}' +)

    if [[ $permcheckfile != *444 ]]
    then
        echo "$site file permissions are wrong"
    else
        echo "$site file permissions are correct"
    fi

    if [[ $permcheckdir != *555 ]]
    then 
        echo "$site directory permissions are wrong"
    else
        echo "$site directory permissions are correct"
    fi
 done

위 스크립트에서 발견된 문제는 때때로 거짓 긍정을 반환하는데 그 이유를 모르겠습니다.

내가 어디로 잘못 가고 있는지 아는 사람이 있습니까? 내가 달성하려는 것을 달성하는 더 좋은 방법이 있습니까? 어떤 도움이나 조언이라도 대단히 감사하겠습니다. 시간을 내어 도움을 주셔서 감사합니다.

답변1

permcheckfile 및 permcheckdir 배열을 반복해야 합니다.

for site in $(echo /var/www/*)
do 
    for file in $(find $site -type f -exec stat -c '%a' '{}' +)
    do
        if [[ $file != *444 ]]
        then
            echo "$site/$file permissions are wrong"
        else
            echo "$site/$file permissions are correct"
        fi
    done

    for dir in $(find $site -type d -exec stat -c '%a' '{}' +)
    do
        if [[ $dir != *555 ]]
        then
            echo "$site directory permissions are wrong"
        else
            echo "$site directory permissions are correct"
        fi
    done
 done

답변2

아래와 같이 필요한 모든 기능을 얻으려면 "find"를 한 번만 호출하면 됩니다. 더 최적화할 수 있지만 명확성은 희생됩니다.

#!/bin/sh
p=$(type -P printf)
site='/var/www'
cd "$site" && \
find . \
   \( -type f             -perm 444 -exec $p "$site/%s file permissions are correct.\n"      {} + \) -o \
   \( -type f           ! -perm 444 -exec $p "$site/%s file permissions are wrong.\n"        {} + \) -o \
   \( -type d ! -name . ! -perm 555 -exec $p "$site/%s directory permissions are wrong.\n"   {} + \) -o \
   \( -type d ! -name .   -perm 555 -exec $p "$site/%s directory permissions are correct.\n" {} + \)

관련 정보