Да, это можно сделать через php. Обычные правила разрешений linux применяются, однако, так как вы ищете сценарии chmod, не принадлежащие пользователю apache (никто), а пользователь apache не имеет разрешений на запись, тогда один метод - дать разрешение apache на использование sudo
Будьте осторожны - это потенциально огромная дыра в безопасности !!!
Вы можете дать apache разрешение на использование sudo, отредактировав файл sudoers. Рекомендуется не редактировать этот файл напрямую, так как из-за ошибки вы можете быть полностью испорчены, поэтому в моей (Ubuntu) системе я печатаю
sudo visudo
Затем вам нужно добавить строку для вашего пользователя "nobody". Вы можете ограничить разрешения sudo определенным сценарием или папкой, поэтому я бы порекомендовал написать сценарий оболочки для изменения разрешений, а затем поместить его в папку отдельно от любых других сценариев. В этом случае apache не имеет полных привилегий root в вашей системе (что довольно страшно). Вы также можете поместить некоторый код в сценарий оболочки, чтобы ограничить, какие файлы могут быть изменены.
Вам также нужно разрешить apache sudo без пароля, поскольку у вас нет возможности ввести пароль через php. Поэтому строка, которую вы бы добавили, выглядит примерно так:
nobody ALL=(ALL)NOPASSWD:/path/to/my/script
Тогда в php вы просто добавляете команду к команде sudo
passthru ("sudo /path/to/my/script ...");
(есть несколько других функций, которые вы можете использовать вместо passthru (), это было только первое, что пришло в голову)
Как я уже говорил, это потенциально очень опасно, и хотя вышеприведенное сработает, раньше я использовал его только в своей собственной частной системе, а не на общедоступном производственном сервере. Я уверен, что многие люди будут комментировать безопасность этого, поэтому мне было бы интересно услышать, какие другие потенциальные подводные камни и дыры в безопасности могут быть с этим методом. Я знаю, что подобное можно сделать с помощью SuExec, но я не очень знаком с ним, поэтому, если у кого-то есть плюсы или минусы SuExec по этому методу, мне было бы интересно их услышать.
Последнее замечание: я бы изменил пользователя apache с никем на что-то вроде «apache» или «www» - возможно, просто глупо, но мне не нравится идея давать права root пользователю, называемому никем !!!
Надеюсь, это поможет!