Команда find — основной инструмент аудита прав. Умеет фильтровать по правам, владельцу, типу файла и времени изменения.
Набор команд, которые запускаем при аудите нового сервера:
# Файлы с правами 777 (самое опасное)
find / -type f -perm 0777 2>/dev/null | grep -v '/proc\|/sys\|/dev'
# Каталоги с правами 777
find / -type d -perm 0777 2>/dev/null | grep -v '/proc\|/sys\|/tmp\|/var/tmp'
# World-writable файлы (любые права с w у others)
find / -type f -perm -o+w 2>/dev/null | grep -v '/proc\|/sys'
# World-writable каталоги без sticky bit (уязвимость)
find / -type d -perm -o+w ! -perm -1000 2>/dev/null | grep -v '/proc\|/sys'
# SUID файлы (исполняются от имени владельца)
find / -type f -perm -4000 -ls 2>/dev/null
# SGID файлы
find / -type f -perm -2000 -ls 2>/dev/null
# Файлы без владельца
find / -nouser 2>/dev/null | grep -v '/proc\|/sys'
# Файлы без группы
find / -nogroup 2>/dev/null | grep -v '/proc\|/sys'
На свежеустановленной Ubuntu 22.04 список SUID-файлов включает около 20 позиций — это нормально. Если вы видите незнакомые исполняемые файлы с SUID root, это серьёзный повод для расследования.
Для веб-серверов проверяем права в /var/www и конфигурационных каталогах:
# Все файлы в веб-корне с развёрнутым выводом прав
find /var/www -ls 2>/dev/null | awk '{print $3, $5, $6, $NF}' | sort
# Файлы, изменённые за последние 24 часа (подозрительно на взломанном сервере)
find /var/www -mtime -1 -type f -ls 2>/dev/null
# PHP-файлы, доступные для записи всем
find /var/www -name "*.php" -perm -o+w -ls 2>/dev/null
# Проверка конфигов nginx/apache
find /etc/nginx /etc/apache2 -type f -perm -o+r -ls 2>/dev/null
# Конфиг не должен читаться www-data напрямую через others
# Проверка SSH-ключей
find /root/.ssh /home/*/.ssh -type f -ls 2>/dev/null
# Правильно: id_rsa = 600, authorized_keys = 600, .ssh/ = 700