Я пишу установщик для своего веб-приложения PHP. Пользователь должен изменить права доступа для нескольких файлов и каталогов (config.php, cache, uploads, .htaccess) на 777 (чтобы он был доступен для записи). Я видел во многих приложениях, что установщик требует, чтобы пользователь вернул разрешения (для config.php и т. Д.) Обратно на 644.
Почему это так важно? Почему я не могу просто оставить его с 777? Я предполагаю, что это какая-то проблема безопасности, но что именно может случиться, если я оставлю эти файлы доступными для записи?
Скрипты PHP запускаются на веб-сервере. Если вы оставите разрешения таким образом, ваш веб-сервер станет пользователем (www-data
или apache
) может писать в эти файлы. Если в вашем скрипте есть ошибка или уязвимость, эти разрешения позволят веб-серверу (и, следовательно, внешним агентам) изменять содержимое файлов и файловой системы. Что может случиться:
Так что да, оставлять разрешения для этого состояния - ужасная идея.
777 особенно плох. Это означает, что любой может удалять файлы, а также создавать их. Я создаю файл, а вы удаляете этот файл.
если ты должен используйте 777, затем используйте 1777 - это говорит ОС разрешить только владельцу файла удалить его.
В остальном это именно то, что сказано в coredump - ошибка в скрипте, которая позволяет мне записывать новые файлы или перезаписывать существующие файлы, позволяет мне делать с вашим веб-сервером все, что я хочу, потому что я перезаписываю / создаю файлы как apache / nobody / www- data, то веб-сервер будет обслуживать мой вредоносный контент вместо исходного контента.
В идеале процесс веб-сервера не может писать в каталоги, из которых он читает, чтобы избежать таких проблем.
Другие пользователи на этом сервере / рабочей станции могут изменять файл. Например, используя настольную Ubuntu, сделайте / home 777, и он может быть удален или изменен любым пользователем.
777 представляет особую угрозу безопасности, когда вы находитесь на общем хостинге.
любой, кто имеет доступ к этому каталогу (например, через ftp), может читать, писать и выполнять их. вы, как разработчик, должны пройти через сценарии намерения использования и закрыть потенциальные дыры в безопасности ...