Я пишу веб-приложение. У этого есть:
Мой вопрос:
Каковы правильные настройки chmod для вышеуказанных каталогов? Я знаю, что такое chmod (im работает в Linux), и я знаю, как я могу его изменить, но я не могу найти полезную информацию об этом. Только статьи, такие как «Как я могу изменить chmod на 777 …
И я не знаю, кто является владельцем, группой и другими. Моя страница будет на общем веб-сервере, поэтому я думаю, что владелец – это apache, а группа – это www-data, правильно?
Скажите, пожалуйста, какие у chmod должны быть каталоги (и файлы? Я использую -R для chmod для файлов) для безопасного веб-сайта. В основном речь идет о возможности вторжения в любой скрипт.
В WordPress есть хорошая статья, объясняющая разрешения файлов unix. Прочтите его, и вы поймете его основы. Короче (и не теоретически правильно):
Unix-системы определяют 3 разных «роли»: пользователя, группы и мира. Особенно «мир», похоже, путает людей.
Каждый файл AND и каталог (оба узла и, как таковые, не такие разные в системах Linux) назначаются пользователю и группе. Вы можете видеть пользователя и группу как «владельцев» конкретного файла / каталога (я расскажу о «узлах» дальше, потому что это не имеет большого значения). Разрешения для файлов определяют, кто может делать то, что с узлами. Пример:
Файл index.php присваивается пользователю «aso» и группе «www-data» и имеет способ доступа к файлам 644. Это означает, что пользователь (6) имеет права на чтение и запись, у группы есть только разрешения на чтение (4), как и «мир» (последние 4 из трех цифр).
Теперь сначала вы должны понимать, что каждый пользователь в системе * nix является частью группы. Название группы иногда совпадает с именем пользователя, но A GROUP – ДРУГОЙ ЭЛЕМЕНТ. Таким образом, возможно, что у вас есть пользователь, а также группа с именем «aso».
Файловые permssions строятся из «битмаски» следующим образом: разрешения чтения обозначаются цифрой 4, записываются на 2 и выполняются на 1. Любая комбинация может быть сделана из этого. В примере разрешения на запись и выполнение обозначаются как 3 (write = 2, execute = 1), а разрешения на чтение и выполнение обозначаются как 5 (read = 4, execute = 1).
Давайте посмотрим, что это значит, и я должен быть справедлив, чтобы сказать, что я не могу быть полным в этом вопросе. Пожалуйста, используйте Google, если хотите полную историю.
Если я создаю файл в моей системе * nix, он автоматически назначается мне (мой пользователь) и группе, частью которой является мой пользователь. Имея разрешения 644, это означает, что я (вошедший в систему с моим собственным пользователем) может прочитать файл и может его изменить (написать). Но у меня нет разрешений execute (x). Однако это не имеет значения, поскольку это относится только к исполняемым скриптам (сценарии оболочки, в большинстве случаев с расширением .sh). Группа, к которой принадлежит файл ('www-data'), имеет права на чтение, поэтому не может изменять файл. «Мир» также имеет разрешения на чтение.
Обратите внимание, что пользователь может быть частью нескольких групп, и поскольку такие права доступа к файлам nix ограничены: вы можете назначить права на запись для группы 1 и только разрешения на чтение для группы 2. В традиционных файловых системах это не возможное. Однако файловые системы, такие как reiserFS и Ext3, могут использовать расширенный ACL для выполнения таких вещей. Это еще одна история.
Что это значит? Это проще, чем ожидалось на самом деле, если вы понимаете, что означают назначенные права и какова разница между узлом файла и узлом каталога.
файлы
Справочники
Вернемся к вашему делу. Если у вас есть обычная настройка (Linux-сервер с Apache и PHP в качестве модуля), ваши файлы будут назначены вашему ftp-пользователю и группе «www-data» (группа Apache работает от). Вам самим нужно читать и писать разрешения (так как иногда вы хотите изменить файл), но НЕ НУЖДАЕТ разрешения на выполнение (поскольку PHP – или HTML – это не исполняемые файлы). Таким образом, для пользователя вам понадобится 6 (read = 4, write = 2, combit 6). Для пользователя группы вам нужны только разрешения на чтение, так как Apache (или модуль PHP) нужно только прочитать содержимое вашего php-скрипта. Любой другой пользователь в системе не имеет ничего общего с вашими файлами и как таковой не нуждается ни в каких разрешениях (0).
Таким образом, для ВСЕХ ваших скриптов достаточно разрешений 640 (чтение и запись для пользователя, чтение для группы и ни одного для «мира»).
Для каталогов ваш пользователь нуждается во всех разрешениях (чтение = 4, запись = 2, выполнение = 1, всего 7). Зачем? Поскольку он должен читать его содержимое (имена узлов), должен быть в состоянии определить, является ли это файлом или узлом каталога (и другими свойствами) И должен иметь возможность добавлять и удалять файлы (вы хотите иногда добавлять файлы, ты?). Таким образом, мы дадим вашему пользователю 7.
Однако группа («www-data», группа Apache работает) требует только прав на чтение и выполнение. Разрешения на чтение для перечисления содержимого (имена узлов) и выполнения permissins для отображения других свойств (тип узла, время модификации и т. Д.). Он не нуждается в разрешениях на запись, потому что обычно вы не хотите, чтобы PHP (Apache) добавлял / удалял файлы из вашего дерева приложений.
Наконец, «мир», который является любым другим пользователем системы (это НЕ то же самое, что мир в его самом широком смысле), не нуждается в каких-либо разрешениях. Зачем кому-то еще на сервере нужен доступ к вашим файлам?
Комбинированный, который составит 750 (все разрешения для пользователя, чтение и выполнение для группы, нет для других).
Обобщенный ответ на ваш вопрос, минимальный минимум:
Но всегда хороший, достаточно стандартный и достаточно безопасный:
Я использую 640
на моем сервере. Файлы принадлежат мне, поэтому мне нужно читать и писать. Группа – это www-данные, которые apache может читать. PHP-скриптам не требуется выполнение для запуска (если используется php-модуль apache, который по умолчанию. Мне кажется, что вам нужно выполнить при использовании cgi), только чтение. Никто больше не нуждается в доступе. У меня есть папка uploads, которая дает apache write, но только эту одну папку, и я обычно отказываюсь от доступа с помощью .htaccess, отключает php, чтобы предотвратить загрузку скрипта или выкладывать его за пределы webroot; в зависимости от потребностей проекта.