Я использую PHP на веб-сервере Apache, но PHP не имеет права на запись и не может создавать новые файлы или изменять существующие, несмотря на то, что файл, который необходимо изменить, установлен на обычный 644 (а папки – 755) ,
Мое первое предположение заключалось в том, что проблема заключалась в том, что PHP работал как другой пользователь, чем владелец файла, и запустив «posix_getpwuid (posix_geteuid ()); Я обнаружил, что PHP работает как «www-data», в то время как файл имеет владельца и группу, установленную в «company123». Так что, может быть, мне просто нужно изменить владельца файла на «www-data»?
Но потом я решил проверить некоторые другие веб-серверы, с которыми я работал. На первом я попробовал, у меня не возникло проблем с созданием или модификацией 644 файлов с PHP, и тем не менее, владелец и группа были названы «600», а PHP выполнялся как пользователь «wse253421». По-видимому, нормально, что PHP работает как один пользователь и записывается в 644 файла, принадлежащих другому пользователю. Как это работает?
Что здесь происходит, и что мне делать с PHP, не имеющим права на запись на первом сервере?
644 – это разрешение на чтение / запись владельцу и разрешение только на чтение для группы и мира. Поэтому, если файл не принадлежит тому же пользователю, что и веб-сервер, PHP не сможет писать ему, независимо от группы. Если (как вы говорите), похоже, что это делает, то пользователь веб-сервера является псевдонимом владельца файла, то есть у них одинаковый uid.
Для записи группы файл должен быть 664, а группа должна быть такой же, как и группа, которой работает веб-сервер (часто www-data, но не гарантируется!). Если файл принадлежит другой группе, 664 не поможет. 666, но не рекомендуется, так как это позволяет кому-либо писать файл.
Для создания новых файлов важными факторами являются разрешения на каталог. 755 – чтение / запись / выполнение для владельца и чтение / выполнение для группы и мира. Если вам нужна групповая запись, вам нужно 775, и снова группа должна быть той же группой, что и веб-сервер.
Изменить: если вам нужно временно / временно проверить пользователя / группу веб-сервера chmod на каталог до 777 и записать файл. Затем проверьте владельца файла и группу. Просто не забудьте вернуться к более безопасной настройке
Лучшим решением для вашего первого сервера, вероятно, будет chgrp файлы и каталоги, которые вам нужно записать, группе вашего веб-сервера (вероятно, www-data), chmod файлы для 664 и chmod каталоги до 775
См. https://www.ics.uci.edu/computing/linux/file-security.php
См. Также ответ Томаса Раттера здесь: https://askubuntu.com/questions/386928/default-permissions-for-var-www