---
name: mac-security-audit
description: Полный аудит безопасности macOS — проверка FileVault, файрволла, SSH, открытых портов, LaunchAgents/Daemons, пользователей.
version: 1.0
author: Hermes
tags: [macos, security, audit, filevault, ssh, firewall]
---

## Когда использовать

Когда пользователь просит:
- «проверь безопасность системы / компа»
- «посмотри что у меня с защитой»
- «сделай аудит безопасности»

## Порядок действий

### 1️⃣ FileVault — шифрование диска

```bash
# Проверить статус
fdesetup status
```

**Включение** (требует пароля пользователя):
1. Создать plist: `/tmp/fv_enable.plist` с Username и Password пользователя
2. Выполнить: `echo 'password' | sudo -S bash -c 'fdesetup enable -inputplist < /tmp/fv_enable.plist'`
3. **Сохранить Recovery Key!** Записать в memory и в `/opt/data/secrets/macbook-filevault.key`

**Проверка после включения:**
```bash
fdesetup status                    # FileVault is On / Off
sudo fdesetup list                 # привязанные пользователи
```

### 2️⃣ Файрволл macOS

```bash
# Статус
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
/usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode

# Список приложений с правилами
/usr/libexec/ApplicationFirewall/socketfilterfw --listapps
```

### 3️⃣ LaunchAgents и Daemons

```bash
# Посмотреть автозагрузку
ls ~/Library/LaunchAgents/
ls /Library/LaunchAgents/
ls /Library/LaunchDaemons/

# Прочитать plist
plutil -p /path/to/file.plist
```

### 4️⃣ Сетевые сервисы — открытые порты

```bash
# Слушающие TCP порты
netstat -an -p tcp | grep LISTEN | awk '{print $4}' | sort
lsof -iTCP -sTCP:LISTEN -P -n | awk 'NR>1{print $1,$3,$9}' | sort -u

# Проверить конкретный порт
lsof -i :PORT -P -n
```

### 5️⃣ SSH

```bash
# Статус Remote Login
sudo systemsetup -getremotelogin

# Конфиг
cat /etc/ssh/sshd_config
```

### 6️⃣ Screen Sharing / Remote Management

```bash
# Статус — проверить порты
netstat -an -p tcp | grep -E "5900|3283"
```

### 7️⃣ Пользователи

```bash
# Список пользователей (UID >= 500)
dscl . list /Users UniqueID | awk '$2 >= 500 && $2 < 1000 {print $1, $2}' | sort -n -k2

# Информация о пользователе
dscl . -read /Users/username RealName NFSHomeDirectory
```

### 8️⃣ Дополнительные проверки

```bash
# SIP
csrutil status

# Gatekeeper
spctl --status

# SUID root binaries
find / -perm -4000 -type f 2>/dev/null

# Версия macOS
sw_vers

# Диск
df -h /

# Память
sysctl hw.memsize
```

## Формирование отчёта

Разделить findings на:
- ✅ **Зелёное** — что работает как надо
- ⚠️ **Жёлтое** — стоит внимания, но не критично
- ❌ **Красное** — проблемы безопасности

После показа отчёта предложить исправления. После согласия («давай») выполнить. После выполнения сделать финальный чек.

## Важные моменты

1. **Пароль sudo** запрашивать у пользователя напрямую, не сохранять
2. **Recovery Key FileVault** — данные первой важности: передать пользователю + сохранить в `/opt/data/secrets/` (на сервере) + записать в memory
3. **SSH:** ставить `PasswordAuthentication no`, `ChallengeResponseAuthentication no`, `PermitRootLogin no`, `PubkeyAuthentication yes`
4. **FileVault** на High Sierra нельзя включить без пароля пользователя — использовать `-inputplist`
5. **macOS 10.13 High Sierra** не получает обновлений — legacy-система

## Типичные исправления (только с «давай»)

- **SSH:** только ключи, root запрещён
- **FileVault:** включить шифрование
- **Adobe Flash:** отключить/удалить daemon
- **Screen Sharing:** отключить (kickstart -deactivate)
- **SMB:** отключить (launchctl unload smbd)
- **Файрволл:** убрать мусорные правила
- **Старые пользователи:** удалить пустые учётки
