사용자의 홈 디렉터리에 있는 모든 파일을 확인하고 750보다 낮은 권한을 가진 파일이 발견되면 결과는 1이 되는 STIG 규칙을 작성해야 합니다.
이것이 제가 지금까지 한 일입니다.
egrep ":[0-9]{4}:" /etc/passwd | cut -d: -f6 |
while read line; do
if [ ! -e "${line}" ];then
exit 1
else
if [ `stat -c "%a" "${line}"` -gt 750 ];then
exit 1
fi
fi
done
단, 권한이 557과 같은 숫자인 경우에는 작동하지 않습니다. 적어도 내 기술 수준으로는 그것을 작동시키는 방법을 생각할 수 없습니다.
내 홈 디렉터리의 모든 파일을 확인하고 750보다 낮은 권한을 가진 파일이 발견되면 어떻게 1을 반환할 수 있습니까?
예: 751,757, 551, 501, 001, 770, 570..은 모두 실패해야 합니다. 내 스크립트는 이 모든 것을 포착하지 못합니다.
밝히다:홈 디렉토리의 모든 파일에 "기타" 속성이 없는지 확인해야 합니다. "other"에 r, w 또는 x가 있으면 실패해야 합니다. 또한, "그룹"에는 w가 포함되지 않는 한. "그룹"이 쓴 파일이나 "기타"가 읽거나 쓰거나 실행한 파일을 찾을 수 없는 한 통과해야 합니다. 이를 찾으면 실패합니다.
루트가 소유한 파일이 제외되도록 수정할 수도 있다면 도움이 될 것입니다.
답변1
750 이하의 라이선스가 발견된 경우
권한 비트가 이면 0750
에 해당합니다 rwxr-x---
. "기타" 그룹에 비트가 설정된 모든 것은 (기본적으로 정의에 따라) 더 느슨합니다. 다시 말하지만, 이와 유사한 것은 0700
덜 허용적입니다(그룹에 대한 액세스를 제공하지 않음).
그러나 0644
/와 같은 것은 rw-r--r--
"다른 사람"에 대한 읽기 액세스를 허용하지만 누구에게도 실행 액세스를 허용하지 않기 때문에 어느 정도 허용됩니다.
명확히 하자면, 홈 디렉토리의 모든 파일에 "기타" 속성이 없는지 확인해야 합니다.
물론 위의 정의와는 다릅니다. 그러나 특정 권한 비트 집합이 있는 파일을 검색하는 것이 더 쉽기 때문에 특정 권한 비트 집합의 하위 집합만 있는 파일을 찾는 대신 검색을 수행해 보겠습니다.
조건부 GNU find가 있다고 가정합니다. 이는 "모든 권한 비트"를 의미합니다.-perm /mode
모델파일에 대해 설정합니다. " (보다매뉴얼 페이지). 따라서 find -type f -perm /027
임의의 비트가 설정된 일반 파일을 찾을 수 있습니다 ----w-rwx
. 예를 들어, FreeBSD의 유사한 조건부 찾기는 -perm +027
(매뉴얼 페이지).
따라서 다음 방향으로 갈 수도 있습니다.
x=$(find "$dir" -type f -perm /027 -print -quit)
if [ "$x" != "" ]; then
echo "some files were found"
fi