Правка прав в Linux: как сделать все папки 755, а файлы 644 через find
Ошибка массового применения chmod -R 777
Новички в попытке решить проблемы с записью файлов на сайте (например, в WordPress или Bitrix) часто выполняют опасную команду chmod -R 777 /var/www/site. Это открывает критическую уязвимость: любой сторонний скрипт может изменить системные файлы. При этом попытка исправить права обратной командой chmod -R 644 приводит к тому, что папки перестают открываться (так как для перехода в папку в Linux требуется флаг исполнения +x, то есть 755).
Правильный стандарт прав для веб-серверов:
| Тип объекта | Правильные права | Буквенный вид | Почему именно так |
|---|---|---|---|
| Директории (Папки) | 755 | drwxr-xr-x | Разрешает чтение и вход в папку, запись только владельцу. |
| Файлы | 644 | -rw-r--r-- | Разрешает чтение всем, запись владельцу, запуск скриптов заблокирован. |
Идеальный способ раздельной установки прав через find
Шаг 1. Переходим в корневую директорию сайта
cd /var/www/my_siteШаг 2. Делаем ВСЕ папки 755
Утилита
findнайдет только объекты с типом «директория» (-type d) и применит к ним chmod 755:sudo find . -type d -exec chmod 755 {} +Шаг 3. Делаем ВСЕ файлы 644
Утилита найдет только обычные файлы (
-type f) и установит им права 644:sudo find . -type f -exec chmod 644 {} +Шаг 4. Устанавливаем корректного владельца (www-data)
sudo chown -R www-data:www-data /var/www/my_site
Частые вопросы (FAQ)
Почему после chmod 644 на папки сайт полностью ломается с ошибкой 403 Forbidden?
В Linux бит исполнения x (Execute) на директориях отвечает за возможность войти внутрь папки (перечислить файлы). Права 644 лишают веб-сервер бита x, поэтому папка становится недоступной.
В чем разница между {} + и {} \; в конце команды find?
Конструкция {} + работает в сотни раз быстрее, так как передает сразу пачку из сотен файлов в один вызов chmod, а {} \; вызывает команду chmod отдельно для каждого файла.
Какие права должны быть у конфигурационного файла с паролями базы (.env / wp-config.php)?
В целях максимальной безопасности файлам с секретными паролями баз данных выставляют еще более жесткие права: 600 или 640 (sudo chmod 600 .env).
Как сделать конкретный .sh скрипт исполняемым?
Используйте флаг добавления исполнения: chmod +x script.sh.