Как предотвратить изменение разрешений файлов и папок

Вопрос или проблема

У меня есть каталог с файлами и папками, которые добавляются и удаляются, и установленные мной права постоянно меняются. Как можно навсегда сохранить права на определенный путь, чтобы независимо от того, что происходит в его папках, все файлы и папки внутри этой папки рекурсивно следовали бы установленным правам.

Установленные мной права следующие:

sudo chmod 755 -R /var/www/uploads
sudo chown www-data:www-data -R /var/www/uploads

Я не уверен, какая группа пользователей используется php/apache, когда я пишу код для удаления файлов, и полагаю, что именно поэтому это не работает.

Вы можете попробовать использовать ACL, посмотрите здесь. Особенно Default ACL:

“Каталоги могут быть оснащены особым видом ACL — default ACL. Default ACL определяет права доступа, которые наследуют все объекты под этим каталогом при их создании. Default ACL влияет как на подкаталоги, так и на файлы.”

Вы боретесь с системой. Вы можете найти какой-то способ предотвратить изменения прав, но это, вероятно, приведет к ошибкам различного рода, некоторые из которых могут быть критическими. Это также может привести к неправильной настройке мер безопасности, предусмотренных приложениями.

Вам следует переключить внимание на то, почему права меняются. Основные инструменты, на которых вам нужно сосредоточиться, это настройки umask ваших процессов веб-сервера и ваших пользователей, и в зависимости от используемой вами схемы прав, вы можете использовать sticky bit для директории (например, chmod g+s). Sticky bit для директории вызывает наследование новой папкой или файлом группы родительской директории, если пользователь, создающий директорию, входит в эту группу.

Без дополнительных деталей о вашей ожидаемой схеме прав и неожиданных изменениях трудно сказать больше.

Обратите внимание, что вы, вероятно, не хотите делать ваши файлы chmod 755. Скорее всего, они должны быть установлены в 644. Например,

find /var/www/uploads -type d -print0 | xargs -0 chmod 2755
find /var/www/uploads -type f -print0 | xargs -0 chmod 644

Вы изучали использование команды umask для установки маски прав на директорию? Есть отличное объяснение umask и как она работает на Linux. Я считаю, что правильное использование umask и chmod должно решить проблему.

Ответ или решение

Управление правами доступа к файлам и папкам — критически важный аспект безопасности и организации вашего IT-окружения. Рассмотрим, как можно сохранить заданные права доступа на постоянной основе, анализируя ваше текущее окружение и элементы, которые могут влиять на состояние разрешений.

Теория

Основной проблемой, с которой вы сталкиваетесь, является факт изменения прав доступа к файлам и папкам внутри указанного каталога /var/www/uploads. Это может происходить по ряду причин: создание новых файлов с разными правами, изменение установок серверных процессов, ошибок в скриптах и т.д.

В UNIX-системах права доступа устанавливаются с помощью команд chmod для смены прав и chown для управления владельцами. Однако статическое применение этих команд не всегда дает гарантированный долговременный эффект, особенно когда файлы и папки создаются и изменяются динамически.

Пример

Вы упомянули использование команд:

sudo chmod 755 -R /var/www/uploads
sudo chown www-data:www-data -R /var/www/uploads

Эти команды устанавливают права чтения, записи и выполнения для владельца (www-data) и только чтения и выполнения для группы и всех остальных пользователей для всех файлов и директорий внутри /var/www/uploads. Также устанавливается владелец и группа владельцев www-data.

Применение

  1. Использование ACL (Access Control Lists):

    ACL предоставляет более гибкий способ управления правами доступа. С помощью ACL вы можете установить "умолчания" для всех создаваемых файлов и директорий. Это гарантирует, что новые файлы будут наследовать заданные права доступа. Команды могут выглядеть так:

    sudo setfacl -R -m d:u:www-data:rx /var/www/uploads
    sudo setfacl -R -m d:g:www-data:rx /var/www/uploads

    Эти команды зададут базовые права для всех новых объектов в каталоге.

  2. Использование umask:

    umask определяет базовые права доступа для всех создаваемых файлов и папок. Если ваш сервер или скрипт PHP изменяет файлы, убедитесь что umask настроен должным образом. Для веб-серверов, таких как Apache или Nginx, настройка umask может быть выполнена в конфигурационных файлах или скриптах запуска.

  3. Установка sticky bit:

    Установка sticky bit на каталоги обеспечивает сохранение группы родительской директории для всех создаваемых файлов и каталогов:

    chmod g+s /var/www/uploads
  4. Поиск первопричин изменения прав:

    Важно оценить процессы, которые изменяют права на файлы. Это могут быть скрипты обновления, процессы веб-сервера или даже сторонние приложения. Логи сервера или системные логи могут помочь выяснить, какие процессы внесли изменения.

  5. Перепроверка схемы прав доступа:

    Убедитесь, что схема установленных прав соответствует вашим требованиям безопасности и практическим нуждам. Если файлы не должны изменяться пользователями, отличными от владельца, следует переконфигурировать права в соответствии с рекомендациями (например, 644 для файлов и 755 для директорий).

  6. Мониторинг и Автоматизация:

    Используйте средства мониторинга для того, чтобы отслеживать изменения в правах доступа. Это могут быть скрипты, периодически запускаемые cron, или более сложные системы, такие как Tripwire, которые уведомят вас о непреднамеренных изменениях.

Подводя итоги, можно сказать, что целостность прав доступа в вашей IT-инфраструктуре требует комплексного управления и постоянного мониторинга. Используя комбинацию ACL, правильной настройки umask, sticky bit и регулярного аудита, вы сможете обеспечить стабильность настроек прав доступа и безопасность вашего приложения.

Оцените материал
Добавить комментарий

Капча загружается...