보안취약점점검_요약

[리눅스 보안 점검] 서비스 관리 보안 분야 (U-54 ~ U-58) 종합 진단 및 실무 조치 가이드

보안실무자J 2026. 9. 18. 09:33
반응형

 

서비스 관리 그룹의 핵심 보안인 U-54부터 U-58까지의 항목에 대해 자동 진단 기법과 안전한 조치 및 백업 절차를 안내해 드립니다. FTP 및 SNMP 서비스의 평문 전송 위험, 쉘 제한, 접근 제어 파일 미설정 등의 보안 취약점을 점검하고 장애 없는 인프라 환경을 구축하기 위한 10년 차 엔지니어의 실무 노하우를 전달합니다.


1. 서비스 관리 및 암호화 설정 점검 항목 종합 요약

점검코드 점검 명칭 주요 점검 대상 파일 판단 기준 (양호) 위험도
U-54 암호화되지 않는 FTP 서비스 비활성화 /etc/vsftpd/vsftpd.conf
/etc/proftpd/proftpd.conf
FTP 서비스가 비활성화되어 있거나, FTPS/SFTP 등 암호화 통신이 적용된 경우 상
U-55 FTP 계정 Shell 제한 /etc/passwd ftp 시스템 계정의 로그인 쉘이 /sbin/nologin 또는 /bin/false로 설정된 경우 중
U-56 FTP 서비스 접근 제어 설정 /etc/hosts.deny
/etc/vsftpd/vsftpd.conf
TCP Wrapper(ALL:ALL) 통제 또는 FTP 자체 접근 제한(userlist_enable)이 설정된 경우 중
U-57 Ftpusers 파일 설정 /etc/ftpusers
/etc/vsftpd/ftpusers
ftpusers 파일이 존재하며 root 계정이 명시적으로 등록되어 접속이 차단된 경우 상
U-58 불필요한 SNMP 서비스 구동 점검 snmpd.service
프로세스 목록 (ps)
NMS 용도로 사용하지 않는 SNMP 서비스(snmpd)가 비활성화되어 있는 경우 중

2. 세부 항목별 진단 및 조치 가이드

2.1. [U-54] 암호화되지 않는 FTP 서비스 비활성화

① 점검 목적 및 개요

전통적인 FTP 프로토콜(21/tcp)은 계정 정보와 데이터를 평문(Plaintext)으로 전송하므로, 동일 네트워크 내의 스니핑(Sniffing) 공격으로 인해 관리자 자격 증명이 노출될 수 있습니다. 본 점검은 암호화되지 않은 FTP 통신을 차단하고 TLS/SSL을 적용한 FTPS 모드 또는 SSH 기반의 SFTP 모드로 전환되어 있는지 확인하는 것을 목적으로 합니다.

② 자동 진단 스크립트 분석

# [상세 해설] FTP 데몬 프로세스 및 systemd 서비스 활성화 상태 확인
FTP_RUNNING="FALSE"
if ps -ef | grep -E "vsftpd|proftpd|in.ftpd" | grep -v "grep" >/dev/null || systemctl is-active --quiet vsftpd 2>/dev/null; then
    FTP_RUNNING="TRUE"
fi

# [상세 해설] FTP 구동 시 암호화(SSL/TLS) 적용 여부 검증
if [[ "$FTP_RUNNING" == "TRUE" ]]; then
    SECURE_FTP="FALSE"
    REASON_FTP=""

    # [상세 해설] vsftpd 설정 파일 내 ssl_enable 지시어 점검
    if [ -f /etc/vsftpd/vsftpd.conf ]; then
        if grep -E -i -q "^[[:space:]]*ssl_enable[[:space:]]*=[[:space:]]*YES" /etc/vsftpd/vsftpd.conf; then
            SECURE_FTP="TRUE"
            REASON_FTP="vsftpd.conf 에 ssl_enable=YES (FTPS) 설정이 적용되어 있습니다."
        else
            REASON_FTP="vsftpd.conf 에 ssl_enable=YES 설정이 누락되어 평문 전송 위험이 있습니다."
        fi
    # [상세 해설] proftpd 설정 파일 내 TLSProtocol 지시어 점검
    elif [ -f /etc/proftpd/proftpd.conf ] || [ -f /etc/proftpd.conf ]; then
        CONF_FILE=$(ls /etc/proftpd/proftpd.conf /etc/proftpd.conf 2>/dev/null | head -1)
        if grep -E -i -q "^[[:space:]]*TLSProtocol" "$CONF_FILE"; then
            SECURE_FTP="TRUE"
            REASON_FTP="proftpd.conf 에 TLSProtocol 통신 설정이 적용되어 있습니다."
        else
            REASON_FTP="proftpd.conf 에 TLS 통신 설정이 누락되어 평문 전송 위험이 있습니다."
        fi
    else
        REASON_FTP="FTP 구동 중이나 설정 파일 위치를 찾을 수 없습니다 (수동 점검 필요)."
    fi

    if [[ "$SECURE_FTP" == "TRUE" ]]; then
        OK "FTP 서비스가 구동 중이나, 암호화된 통신(SFTP/FTPS)이 설정되어 있습니다." "$REASON_FTP"
    else
        WARN "암호화되지 않은 FTP 통신(21/tcp)이 동작 중이어서 스니핑 위험이 있습니다." "$REASON_FTP"
    fi
else
    OK "취약한 일반 FTP 서비스가 비활성화되어 있습니다. (SSH 기반의 SFTP 사용 권장)" "FTP 프로세스 미동작"
fi
FINISH "[ U-54 ] 점검완료"

③ 안전한 조치 및 백업 절차

FTP 서비스를 비활성화하고 OpenSSH 기반의 SFTP로 일원화하는 조치 절차입니다. FTPS가 반드시 필요한 경우 vsftpd.conf를 수정합니다.

  1. 설정 파일 백업
  2. cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak_$(date +%Y%m%d)
  3. FTP 서비스 완전 비활성화 (SFTP 사용 시 권장)
  4. systemctl stop vsftpd
    systemctl disable vsftpd
  5. FTPS 설정 적용 (vsftpd 사용이 필수적인 경우)
    /etc/vsftpd/vsftpd.conf 파일 하단에 다음 설정을 추가 또는 변경합니다.
  6. ssl_enable=YES
    allow_anon_ssl=NO
    force_local_data_ssl=YES
    force_local_logins_ssl=YES
    ssl_tlsv1_2=YES
    rsa_cert_file=/etc/ssl/certs/vsftpd.pem
    rsa_private_key_file=/etc/ssl/private/vsftpd.key
  7. 서비스 검증 및 재시작
  8. systemctl restart vsftpd

④ 보안실무자 J의 노하우 및 장애 방지 포인트

  • 실무 장애 사례: 기존 연동 시스템(구형 레거시 API 클라이언트 등)이 TLS를 지원하지 않거나 암호화 핸드셰이크 처리를 못 하여 파일 전송 작업이 일괄 실패하는 장애가 빈번히 발생합니다.
  • 안전 검증 방법: 조치 후 클라이언트 측에서 openssl s_client -connect [서버IP]:21 -starttls ftp 명령을 통해 인증서 및 TLS 핸드셰이크 동작 여부를 미리 확인해야 합니다.
  • 특수 환경 조언: Cloud 및 MSA/DevOps 환경에서는 FTP 데몬을 전면 배제하고 AWS S3 SDK 또는 SSH Subsystem 기반 SFTP 전용 인프라를 사용하는 것이 운영 및 보안상 유리합니다.

2.2. [U-55] FTP 계정 Shell 제한

① 점검 목적 및 개요

시스템 내 ftp 계정은 익명 접속이나 전용 FTP 데몬 관리를 위해 존재하는 시스템 계정입니다. 해당 계정에 대화형 쉘(Shell) 권한이 부여되어 있으면 대화형 로그인 공격에 악용될 수 있으므로 로그인 불가능한 쉘(/sbin/nologin 또는 /bin/false)로 제한해야 합니다.

② 자동 진단 스크립트 분석

# [상세 해설] /etc/passwd 파일에서 ftp 계정의 로그인 쉘(7번째 필드) 추출
FTP_USER_SHELL=$(grep -E "^ftp:" /etc/passwd | awk -F: '{print $7}')

# [상세 해설] ftp 계정 존재 여부 및 쉘 제한(nologin/false/sync) 검증
if [ -n "$FTP_USER_SHELL" ]; then
    if echo "$FTP_USER_SHELL" | grep -E -q "nologin|false|sync"; then
        OK "ftp 시스템 계정에 로그인 불가능한 쉘이 안전하게 부여되어 있습니다." "/etc/passwd 내 ftp 계정의 쉘: $FTP_USER_SHELL"
    else
        WARN "ftp 시스템 계정에 로그인 가능한 쉘이 부여되어 있어 로컬 접속 악용 위험이 있습니다." "현재 부여된 쉘: $FTP_USER_SHELL (권고: /sbin/nologin)"
    fi
else
    OK "시스템 내에 ftp 기본 시스템 계정이 존재하지 않습니다." "/etc/passwd 에 ftp 계정 없음"
fi
FINISH "[ U-55 ] 점검완료"

③ 안전한 조치 및 백업 절차

  1. 계정 정보 파일 백업
  2. cp -p /etc/passwd /etc/passwd.bak_$(date +%Y%m%d)
  3. 쉘 제한 조치 실행
  4. usermod -s /sbin/nologin ftp
  5. 조치 결과 확인
  6. grep -E "^ftp:" /etc/passwd

④ 보안실무자 J의 노하우 및 장애 방지 포인트

  • 실무 장애 사례: /etc/shells 파일에 /sbin/nologin 경로가 누락되어 일부 서비스 PAM 인증과의 마찰로 FTP 접속 자체가 거부되는 현상이 발생할 수 있습니다.
  • 안전 검증 방법: cat /etc/shells 명령어로 사용 중인 nologin 쉘 경로가 등록되어 있는지 확인하십시오.
  • 대안 환경 조언: FTP 데몬을 완벽히 격리하려면 OS 기본 계정이 아닌 vsftpd의 Virtual Users(가상 계정) 기능을 적용하여 DB나 별도 인증 파일로만 접속을 처리하는 방식이 안전합니다.

2.3. [U-56] FTP 서비스 접근 제어 설정

① 점검 목적 및 개요

FTP 서비스에 대한 무분별한 접근을 차단하기 위해 IP 기반 통제(TCP Wrapper) 또는 FTP 계정 기반 접근 제어 목록(userlist)을 구성하였는지 검증합니다.

② 자동 진단 스크립트 분석

# [상세 해설] FTP 동작 시 접근 제어 정책 적용 여부 점검
if [[ "$FTP_RUNNING" == "TRUE" ]]; then
    ACL_SAFE="FALSE"
    REASON_ACL=""

    # [상세 해설] 1. TCP Wrapper(/etc/hosts.deny)의 ALL:ALL 정책 유무 확인
    if [ -f /etc/hosts.deny ] && grep -E -q "^[[:space:]]*ALL[[:space:]]*:[[:space:]]*ALL" /etc/hosts.deny; then
        ACL_SAFE="TRUE"
        REASON_ACL="/etc/hosts.deny에 ALL:ALL 정책이 적용되어 기본 접근이 통제됨."
    # [상세 해설] 2. vsftpd 사용자 목록 접근제어(userlist_enable=YES) 확인
    elif [ -f /etc/vsftpd/vsftpd.conf ] && grep -E -i -q "^[[:space:]]*userlist_enable[[:space:]]*=[[:space:]]*YES" /etc/vsftpd/vsftpd.conf; then
        ACL_SAFE="TRUE"
        REASON_ACL="vsftpd.conf에 userlist_enable=YES 가 설정되어 인가된 계정만 통제됨."
    else
        REASON_ACL="TCP Wrapper 통제(ALL:ALL) 또는 FTP 자체 접근 제한(userlist)이 명시되어 있지 않습니다."
    fi

    if [[ "$ACL_SAFE" == "TRUE" ]]; then
        OK "FTP 서비스에 대한 접근 제어(IP 제한 또는 계정 통제)가 설정되어 있습니다." "$REASON_ACL"
    else
        WARN "FTP 서비스에 대한 명시적인 접근 통제 설정이 미흡합니다." "$REASON_ACL\n  => 참고 내용: 방화벽/iptables를 통한 IP 통제 시 양호 처리 가능"
    fi
else
    OK "FTP 서비스가 구동되지 않으므로 접근 제어 점검에 해당하지 않습니다 (N/A)." "해당 데몬 미사용"
fi
FINISH "[ U-56 ] 점검완료"

③ 안전한 조치 및 백업 절차

  1. 설정 파일 백업
  2. cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak_$(date +%Y%m%d)
  3. vsftpd 자체 접근 통제 적용
    /etc/vsftpd/vsftpd.conf 내에 관련 옵션을 반영합니다.(참고: userlist_deny=NO 설정 시 user_list 파일에 명시된 계정만 접속이 허용됩니다.)
  4. userlist_enable=YES
    userlist_deny=NO
    userlist_file=/etc/vsftpd/user_list
  5. 허용 계정 파일 작성 및 서비스 리로드
  6. echo "authorized_user" > /etc/vsftpd/user_list
    systemctl reload vsftpd

④ 보안실무자 J의 노하우 및 장애 방지 포인트

  • 실무 장애 사례: RHEL 8 이상 시스템에서는 TCP Wrapper(tcp_wrappers)가 공식 폐지되어 /etc/hosts.deny 설정이 동작하지 않습니다. 오직 vsftpd.conf나 방화벽(firewalld)으로 제어해야 합니다.
  • 안전 검증 방법: userlist_deny=NO 설정 적용 시 정상 접속 계정이 user_list 파일에 포함되지 않아 모든 사용자의 FTP 접근이 차단되는 사고가 다수 발생하므로 리로드 전 목록을 반드시 재검증하십시오.

2.4. [U-57] Ftpusers 파일 설정

① 점검 목적 및 개요

ftpusers 파일은 FTP 접근을 거부할 계정 목록을 지정합니다. 최고 관리자 계정인 root가 누락될 경우, 외부에서 FTP를 통해 root 자격 증명으로 접속을 시도할 수 있어 심각한 위협이 됩니다.

② 자동 진단 스크립트 분석

# [상세 해설] FTP 구동 중일 때 ftpusers 경로 파악 및 root 계정 포함 여부 확인
if [[ "$FTP_RUNNING" == "TRUE" ]]; then
    FTPUSERS_FILE=""
    [ -f /etc/ftpusers ] && FTPUSERS_FILE="/etc/ftpusers"
    [ -f /etc/vsftpd/ftpusers ] && FTPUSERS_FILE="/etc/vsftpd/ftpusers"

    if [ -n "$FTPUSERS_FILE" ]; then
        # [상세 해설] 주석이 아닌 root 설정 구문 검사
        if grep -E -q "^[[:space:]]*root" "$FTPUSERS_FILE"; then
            OK "ftpusers 파일에 root 계정이 등록되어 있어 FTP를 통한 root 직접 접속이 차단되어 있습니다." "파일 경로: $FTPUSERS_FILE"
        else
            WARN "ftpusers 파일이 존재하나 root 계정이 누락되어 FTP를 통한 root 직접 접속이 가능할 수 있습니다." "root 등록 필요 ($FTPUSERS_FILE)"
        fi
    else
        WARN "ftpusers 파일(/etc/ftpusers 등)이 존재하지 않아 주요 관리자 계정의 접속 통제가 불가능합니다." "ftpusers 설정 파일 누락"
    fi
else
    OK "FTP 서비스가 구동되지 않으므로 ftpusers 설정 점검에 해당하지 않습니다 (N/A)." "해당 데몬 미사용"
fi
FINISH "[ U-57 ] 점검완료"

③ 안전한 조치 및 백업 절차

  1. 설정 파일 백업
  2. [ -f /etc/vsftpd/ftpusers ] && cp -p /etc/vsftpd/ftpusers /etc/vsftpd/ftpusers.bak_$(date +%Y%m%d)
    [ -f /etc/ftpusers ] && cp -p /etc/ftpusers /etc/ftpusers.bak_$(date +%Y%m%d)
  3. root 계정 접속 차단 등록
  4. if [ -f /etc/vsftpd/ftpusers ]; then
        grep -q "^root" /etc/vsftpd/ftpusers || echo "root" >> /etc/vsftpd/ftpusers
    fi
    if [ -f /etc/ftpusers ]; then
        grep -q "^root" /etc/ftpusers || echo "root" >> /etc/ftpusers
    fi
  5. 설정 등록 결과 검증
  6. grep -E "^root" /etc/ftpusers /etc/vsftpd/ftpusers 2>/dev/null

④ 보안실무자 J의 노하우 및 장애 방지 포인트

  • 실무 장애 사례: PAM 설정 파일(/etc/pam.d/vsftpd)에서 pam_listfile.so 모듈이 참조하는 파일 경로가 /etc/vsftpd/ftpusers로 지정되어 있는데, 엔지니어가 /etc/ftpusers만 수정하여 root 차단 정책이 정상적으로 동작하지 않는 사례가 빈번합니다.
  • 안전 검증 방법: /etc/pam.d/vsftpd 파일을 열어 file= 구문에 지정된 실제 억제 목록 경로를 직접 대조 확인해야 합니다.

2.5. [U-58] 불필요한 SNMP 서비스 구동 점검

① 점검 목적 및 개요

SNMP(Simple Network Management Protocol)는 네트워크 장비 및 서버 상태 모니터링에 사용됩니다. NMS 환경이 구축되지 않은 서버에서 SNMP 데몬(snmpd)이 방치될 경우 커뮤니티 스트링 스니핑 및 시스템 인벤토리 정보 유출로 이어지므로 비활성화를 권장합니다.

② 자동 진단 스크립트 분석

# [상세 해설] snmpd 서비스 활성화 여부 및 프로세스 구동 확인
SNMP_RUNNING="FALSE"

if systemctl is-active --quiet snmpd 2>/dev/null || ps -ef | grep -E "snmpd" | grep -v "grep" >/dev/null; then
    SNMP_RUNNING="TRUE"
fi

if [[ "$SNMP_RUNNING" == "TRUE" ]]; then
    WARN "SNMP 서비스가 동작 중입니다. 네트워크 관리(NMS) 용도로 사용하지 않는다면 비활성화가 필요합니다." "snmpd 프로세스 발견"
    INFO "SNMP 사용이 필수적인 경우, 다음 항목(U-59~U-61)의 보안 설정을 반드시 점검하십시오." "운영 필요성 수동 검토 요망"
else
    OK "불필요한 SNMP 서비스가 안전하게 비활성화되어 있습니다." "snmpd 미동작"
fi
FINISH "[ U-58 ] 점검완료"

③ 안전한 조치 및 백업 절차

  1. SNMP 미사용 시 서비스 차단 절차
  2. systemctl stop snmpd
    systemctl disable snmpd
  3. 프로세스 완전 중지 확인
  4. ps -ef | grep snmpd | grep -v grep

④ 보안실무자 J의 노하우 및 장애 방지 포인트

  • 실무 장애 사례: 관제/관측 가능성(Observability) 도구(예: Datadog, Zabbix, PRTG 등)에서 SNMP를 통해 CPU/Memory/Disk 메트릭을 수집하던 서버에서 사전 협의 없이 snmpd를 비활성화하여 대규모 모니터링 임계치 알람 장애가 발생한 경우가 있습니다.
  • 안전 검증 방법: 조치 전 NMS 담당 부서에 타겟 서버의 SNMP 수집 여부를 질의하거나, netstat -nap | grep 161 명령을 통해 UDP 161 포트로 수신 패킷이 인바운드되는지 먼저 트래픽을 관찰하십시오.

3. 그룹 스크립트 한계점 및 예외 처리 종합 제안

1) 진단 스크립트의 기술적 한계점 분석

  • 분할 설정 디렉터리(*.d/*.conf) 미인식:
    최신 OS 패키지(예: RHEL 9, Ubuntu 24.04 등)의 vsftpd 또는 snmpd 설정은 단일 conf 파일이 아닌 /etc/vsftpd/conf.d/*.conf 디렉터리에 분할 설정 방식을 채택하는 경우가 늘어났습니다. 현 스크립트는 주 설정 파일만 점검하므로 오진이 일어날 수 있습니다.
  • Systemd Socket Activation 인식 미흡:
    vsftpd가 독립 데몬이 아닌 vsftpd.socket 형태로 동작할 경우 ps -ef 조건절을 회피하여 실제 서비스가 동작 중임에도 미동작(OK)으로 잘못 판정할 수 있습니다.
  • TCP Wrapper 폐지에 따른 U-56 오탐:
    RHEL 8+ 시스템에서는 /etc/hosts.deny가 제거되었으므로, 해당 파일만 체크할 경우 firewalld나 nftables로 안전하게 통제되어 있어도 취약(WARN)으로 판정될 위험이 있습니다.

2) 개선을 위한 스니펫 코드 (Snippet)

# [개선 스니펫] socket 상태 및 include 분할 설정 디렉터리까지 통합 진단하는 로직
IS_FTP_ACTIVE="FALSE"
if ps -ef | grep -E "vsftpd|proftpd" | grep -v "grep" >/dev/null || \
   systemctl is-active --quiet vsftpd 2>/dev/null || \
   systemctl is-active --quiet vsftpd.socket 2>/dev/null; then
    IS_FTP_ACTIVE="TRUE"
fi

# [개선 스니펫] Include 디렉터리 포함 주석 제거 설정값 추출 함수
check_ftp_param() {
    local param="$1"
    grep -r -E -i "^[[:space:]]*${param}" /etc/vsftpd/ 2>/dev/null | grep -v "#"
}

 

안내문 및 면책조항

  • 본 포스팅에서 제공하는 스크립트 상세 설명 및 조치 가이드는 리눅스 시스템 보안 강화를 목적으로 작성되었습니다. 시스템의 특성, 운영 서비스의 종류 및 배포판 버전에 따라 설정을 적용한 후 로그인 불가 등의 영향도가 발생할 수 있으므로 반드시 테스트 환경에서 사전 검증을 거친 후 적용하시기 바랍니다.
  • 리눅스 서버 진단 전체 자동화 스크립트 원본을 공유받기 원하시는 분은 하단의 비밀 댓글로 이메일 주소를 남겨 주시면 확인 후 일괄 송부해 드리겠습니다. 본 가이드의 코드를 활용하여 발생하는 시스템 장애 및 불이익에 대한 책임은 사용자 본인에게 있습니다.

 

2026.07.28 - [보안취약점점검/보안취약점점검_리눅스] - [리눅스 보안취약점 점검] 자동화 스크립트 공통 함수 및 환경 설정

반응형