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 키는 삭제하고, 키에 패스프레이즈를 반드시 설정