macOS 보안 설정 가이드 — FileVault, 방화벽, Gatekeeper

macOS 보안의 기본 구조

macOS는 여러 겹의 보안 계층으로 구성되어 있습니다. Gatekeeper가 앱 설치를 검증하고, FileVault가 디스크를 암호화하며, 방화벽이 네트워크 접근을 제어합니다. 이 보안 기능들은 기본적으로 비활성화되어 있거나 최소 수준으로 설정되어 있으므로, 개발자라면 적극적으로 활성화하는 것이 좋습니다.

이 글에서는 FileVault, 방화벽, Gatekeeper, 프라이버시 설정을 CLI와 GUI 양쪽에서 관리하는 방법을 정리합니다.

FileVault 디스크 암호화

FileVault는 macOS의 전체 디스크 암호화(FDE) 기능입니다. 활성화하면 디스크의 모든 데이터가 XTS-AES-128 방식으로 암호화됩니다. Mac이 분실되거나 도난당해도 로그인 비밀번호 없이는 데이터에 접근할 수 없습니다.

# FileVault 상태 확인
sudo fdesetup status
# 출력 예시:
# FileVault is Off.  (또는 FileVault is On.)

# FileVault 활성화
sudo fdesetup enable
# 복구 키가 표시됨 — 반드시 안전한 곳에 보관!
# 출력 예시:
# Recovery key: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX

# FileVault 활성화된 사용자 목록
sudo fdesetup list
# 출력 예시:
# 사용자이름,XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

# 암호화 진행률 확인 (활성화 직후)
diskutil apfs list | grep -A5 "FileVault"
# Apple Silicon Mac은 하드웨어 암호화로 즉시 완료
# Intel Mac은 백그라운드에서 암호화 진행 (몇 시간 소요)

FileVault 활성화 시 주의사항입니다.

  • 복구 키 보관: 복구 키를 분실하면 데이터를 영구적으로 접근할 수 없습니다
  • iCloud 복구: 복구 키를 iCloud에 저장하는 옵션도 있으나, 오프라인 보관을 병행하는 것이 안전합니다
  • 성능 영향: Apple Silicon Mac은 하드웨어 암호화 엔진이 있어 성능 영향 없음. Intel Mac도 체감 차이가 거의 없음

방화벽 설정

macOS 방화벽은 들어오는 네트워크 연결을 제어합니다. 기본적으로 비활성화되어 있으므로 수동으로 켜야 합니다.

# 방화벽 상태 확인
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# 출력 예시: Firewall is disabled. (State = 0)

# 방화벽 활성화
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
# 출력: Firewall is enabled. (State = 1)

# 스텔스 모드 활성화 (ICMP ping 응답 차단)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setstealthmode on
# 네트워크에서 Mac의 존재를 숨김

# 특정 앱의 연결 허용/차단
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/Firefox.app
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Firefox.app

# 방화벽 설정 전체 확인
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps
# 출력 예시:
# ALF : Total of 5 app rules
# 1 : /usr/libexec/rapportd - Allow incoming connections
# 2 : /Applications/Firefox.app - Allow incoming connections

개발 시 로컬 서버(localhost:3000 등)는 방화벽에 의해 차단되지 않습니다. 외부에서 접근하는 경우에만 앱별 허용 설정이 필요합니다.

# 개발 서버 관련 방화벽 설정
# Node.js를 방화벽에서 허용
sudo /usr/libexec/ApplicationFirewall/socketfilterfw \
    --add $(which node)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw \
    --unblockapp $(which node)

# 자동 허용 모드 활성화 (서명된 앱 자동 허용)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsigned on
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setallowsignedapp on

Gatekeeper 앱 검증

Gatekeeper는 **앱 설치 시 코드 서명과 공증(Notarization)**을 검증하는 보안 기능입니다. App Store 외부에서 다운로드한 앱의 실행을 제어합니다.

# Gatekeeper 상태 확인
spctl --status
# 출력: assessments enabled (활성화 상태)

# 앱 코드 서명 검증
spctl --assess --verbose /Applications/Visual\ Studio\ Code.app
# 출력 예시:
# /Applications/Visual Studio Code.app: accepted
# source=Notarized Developer ID

# 특정 앱을 Gatekeeper 예외로 추가
# 서명되지 않은 개발 도구를 실행해야 할 때
sudo spctl --add --label "DevTools" /path/to/unsigned-app.app
sudo spctl --enable --label "DevTools"

# 차단된 앱 실행 허용 (다운로드 후 첫 실행 시)
# Finder에서 앱을 Ctrl+클릭 → "열기" 선택
# 또는 CLI로:
sudo xattr -r -d com.apple.quarantine /Applications/SomeApp.app

Homebrew로 설치한 Cask 앱은 자동으로 quarantine 속성이 제거됩니다.

SIP (System Integrity Protection)

SIP는 macOS 시스템 파일을 보호하는 커널 수준 보안 기능입니다. 일반적으로 비활성화하면 안 됩니다.

# SIP 상태 확인
csrutil status
# 출력: System Integrity Protection status: enabled.

# SIP가 보호하는 디렉토리
# /System, /usr (단 /usr/local 제외), /bin, /sbin
# 이 디렉토리의 파일은 root 권한으로도 수정 불가

# SIP 비활성화가 필요한 경우 (권장하지 않음)
# Recovery Mode로 부팅 (전원 버튼 길게 누르기)
# 터미널 열기 → csrutil disable
# 작업 완료 후 반드시 csrutil enable로 재활성화

프라이버시 설정

macOS는 앱별로 카메라, 마이크, 위치, 파일 시스템 등의 접근 권한을 관리합니다. 개발자라면 터미널과 IDE의 권한 설정을 확인해야 합니다.

# 전체 디스크 접근 권한이 부여된 앱 확인
# System Settings → Privacy & Security → Full Disk Access

# 터미널/iTerm2에 전체 디스크 접근 권한 부여 필요한 경우:
# System Settings → Privacy & Security → Full Disk Access → "+" → iTerm 추가

# 개발자 도구 권한 확인
# System Settings → Privacy & Security → Developer Tools
# Terminal, iTerm2를 활성화하면 보안 제한이 완화됨

# TCC (Transparency, Consent, Control) 데이터베이스 확인
# 앱 권한 기록이 저장된 위치
ls ~/Library/Application\ Support/com.apple.TCC/
# TCC.db 파일에 권한 정보가 저장됨

# 특정 앱의 권한 초기화
tccutil reset All com.googlecode.iterm2
# iTerm2의 모든 권한을 초기화 (다시 권한 요청이 표시됨)

로그인 보안 설정

# 자동 로그인 비활성화 (보안 강화)
sudo defaults write /Library/Preferences/com.apple.loginwindow autoLoginUser -bool false

# 화면 보호기 비밀번호 설정
defaults write com.apple.screensaver askForPassword -int 1
defaults write com.apple.screensaver askForPasswordDelay -int 0
# 화면 잠금 즉시 비밀번호 요구

# 비활성 후 화면 잠금 시간 설정 (5분)
defaults -currentHost write com.apple.screensaver idleTime -int 300

# 원격 로그인(SSH) 상태 확인
sudo systemsetup -getremotelogin
# 출력: Remote Login: Off

# SSH 활성화 (필요한 경우만)
sudo systemsetup -setremotelogin on
# 비활성화
sudo systemsetup -setremotelogin off

보안 감사 스크립트

현재 Mac의 보안 설정 상태를 한 번에 확인하는 스크립트입니다.

#!/bin/bash
# security-audit.sh — macOS 보안 설정 감사

echo "=== macOS 보안 감사 ==="
echo ""

# FileVault
echo -n "FileVault: "
fdesetup status | head -1
# 출력 예시: FileVault is On.

# 방화벽
echo -n "방화벽: "
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate 2>/dev/null | head -1
# 출력 예시: Firewall is enabled. (State = 1)

# Gatekeeper
echo -n "Gatekeeper: "
spctl --status 2>/dev/null
# 출력 예시: assessments enabled

# SIP
echo -n "SIP: "
csrutil status | head -1
# 출력 예시: System Integrity Protection status: enabled.

# 원격 로그인
echo -n "SSH: "
sudo systemsetup -getremotelogin 2>/dev/null
# 출력 예시: Remote Login: Off

# 자동 업데이트
echo -n "자동 업데이트: "
defaults read /Library/Preferences/com.apple.SoftwareUpdate AutomaticCheckEnabled 2>/dev/null
# 출력 예시: 1 (활성화)

# 스텔스 모드
echo -n "스텔스 모드: "
/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode 2>/dev/null | head -1
# 출력 예시: Stealth mode enabled

echo ""
echo "=== 감사 완료 ==="

자동 업데이트 설정

보안 패치를 빠르게 적용하려면 자동 업데이트를 활성화합니다.

# 자동 업데이트 확인 활성화
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticCheckEnabled -bool true

# 자동 다운로드 활성화
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate AutomaticDownload -bool true

# 보안 업데이트 자동 설치
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CriticalUpdateInstall -bool true

# 시스템 데이터 파일 자동 설치
sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate ConfigDataInstall -bool true

# 현재 업데이트 설정 확인
softwareupdate --schedule
# 출력: Automatic check is on

실전 팁

  • FileVault 필수: 노트북 사용자는 반드시 활성화. 분실/도난 시 유일한 데이터 보호 수단
  • 방화벽 + 스텔스 모드: 공용 Wi-Fi 사용 시 특히 중요. 카페, 공항 등에서 Mac을 네트워크 스캔으로부터 보호
  • Gatekeeper 유지: 비활성화하지 말고, 필요한 앱만 개별 예외 처리
  • SIP 절대 비활성화 금지: 커널 확장이 필요한 극히 드문 경우 외에는 유지
  • 정기 보안 감사: 위의 감사 스크립트를 월 1회 실행하여 설정이 변경되지 않았는지 확인
  • 복구 키 관리: FileVault 복구 키를 비밀번호 관리자(1Password, Bitwarden 등)에 안전하게 보관
  • SSH 키 관리: 사용하지 않는 SSH 키는 삭제하고, 키에 패스프레이즈를 반드시 설정

이 글이 도움이 되었나요?