인프라 진단/주•통기반 리눅스 서버 점검

U-07. /etc/passwd 파일 소유자 및 권한 설정

sheow13 2024. 6. 27. 11:18
728x90

  주요정보통신기반시설 기술적 취약점 분석 평가

- 과학기술정보통신부 및 한국인터넷진흥원에서 발행한 가이드로, IDC, ISP 등 민간, 공공시설을 불문하고 침해사고 등이

발생할 경우 경제사회와 국가안정에 미치는 영향이 큰 시설들을 말하며, 이 시설들을 보호하기 위해 내부에 존재하는 취약점을 파악 및 조치하는 방법을 기술해놓은 가이드로, 국내 많은 기업들이 해당 가이드를 토대로 점검 및 조치를 진행하고 있다.

- 주요정보통신기반시설 기술적 취약점 분석 평가에는 주요 점검 대상으로 유닉스, 윈도우즈, 보안장비, 네트워크 장비, 데이터베이스, 웹 등을 다루고 있으며 해당 챕터에서는 유닉스(리눅스)서버를 다룰 예정

- 해당 가이드는 한국인터넷진흥원 가이드라인에서 참고

- https://www.kisa.or.kr/2060204/form?postSeq=12&page=1

 

 

  유닉스(리눅스) 서버 점검 항목

- Unix(Linux) 서버 점검 항목으로 크게 계정 관리, 파일 및 디렉터리 관리, 서비스 관리, 패치 관리, 로그 관리 등을 다루고 있다.

- 계정 관리의 경우, root 계정 원격 접속 제한, 계정 잠금 등에 대한 부분을 다루고 있으며, 파일 및 디렉터리 관리에서는 root 홈, 패스 디렉터리 권한 설정, UMASK 설정 등을 다루고 있으며, 서비스에서는 보안상 취약한 서비스(ex, finger) 비활성화 등을 다루고 있으며, 패치 관리는 최신 보안 패치 여부를 점검하며, 로그 관리는 정기적으로 로그를 검토 및 점검하고 있는지 여부를 확인하고 있다. 

- 해당 챕터에서는 CentOS 7.9 버전에서 진행하였으며, CentOS 이외에 다른 OS 점검 방법은 상기에 기재된 가이드 참고

 

 

  /etc/passwd 파일 소유자 및 권한 설정

점검 내용
- /etc/passwd 파일 권한 적절성 점검
- (양호) /etc/passwd 파일의 소유자가 root 이고, 권한이 644 이하인 경우
- (취약) /etc/passwd 파일의 소유자가 root가 아니거나, 권한이 644 이하가 아닌 경우

 

보안 위협
- 관리자(root) 외 사용자가 "/etc/passwd" 파일의 사용자 정보를 변조하여 shell 변경, 사용자 추가/삭제 등 root를 포함한 사용자 권한 획득 가능

 

점검 방법 확인 명령어

1. /etc/passwd 파일의 소유자가 root로 설정되어 있는지 확인

ls -al /etc/passwd | awk '{print $3, $4}'

 

['/etc/passwd' 파일 소유자가 root로 설정되어 있는지 확인]

 

2. /etc/passwd 파일의 권한이 640보다 높게 설정되어 있는지 확인

 - stat 명령을 사용하여 권한 상태 확인

stat -c "%a" /etc/passwd

['/etc/passwd' 파일 권한이 640보다 높게 설정되어 있는지 확인]

 

/etc/passwd 파일 소유자 및 권한 설정 스크립트 코드

 

#!/bin/bash

FILE="U-07.txt"

# /etc/passwd 에서 소유자와 그룹 값을 변수로 지정
PERM=$(ls -al /etc/passwd | awk '{print $3, $4}')
OWNER=$(echo $PERM | awk '{print $1}')
GROUP=$(echo $PERM | awk '{print $2}')

# 상태값 변수로 지정
STATUS="양호"

echo "U-07. /etc/passwd 파일 권한 적절성 점검" >> $FILE 2>&1
echo "======================================================================================" >> $FILE 2>&1
echo "" $FILE 2>&1
echo "/etc/passwd 파일의 소유자가 root 여부 및, 권한이 640 이하로 설정되어 있는지 확인" >> $FILE 2>&1
echo "======================================================================================" >> $FILE 2>&1
echo "" $FILE 2>&1

if [ "$OWNER" = "root" ] && [ "$GROUP" = "root" ]; then
	echo "/etc/passwd 파일이 640 이하로 설정되어 있는지 확인 필요합니다." >> $FILE 2>&1
	echo "======================================================================================" >> $FILE 2>&1
	echo "" $FILE 2>&1

	if [ `stat -c "%a" /etc/passwd` -le 640 ]; then
		echo "/etc/passwd 파일이 640 권한보다 낮게 설정되어 있습니다." >> $FILE 2>&1
		echo "======================================================================================" >> $FILE 2>&1
		echo "" $FILE 2>&1

	else
		echo "/etc/passwd 파일의 권한이 640보다 높게 설정되어 있습니다." >> $FILE 2>&1
		echo "======================================================================================" >> $FILE 2>&1
		echo "" $FILE 2>&1
		STATUS="취약"
	fi

else
	echo "/etc/passwd 파일의 소유자가 root로 설정되어 있지 않습니다." >> $FILE 2>&1
	echo "======================================================================================" >> $FILE 2>&1
	echo "" $FILE 2>&1
	STATUS="취약"
fi

if [ "$STATUS" == "취약" ]; then
	echo "해당 항목 취약합니다." >> $FILE 2>&1	
	echo "======================================================================================" >> $FILE 2>&1
	echo "" $FILE 2>&1

else
	echo "해당 항목 양호합니다." >> $FILE 2>&1
	echo "======================================================================================" >> $FILE 2>&1
	echo "" $FILE 2>&1
fi