Как 100% защититься от этого?
Никак. Не бывает 100% защиты.
Какие права нужны?
Какие права нужны?
В какую директорию желательно запихивать скрипты?
От какого юзера запускать nginx / php-fpm ?
Не существует рецепта на все случаи жизни, тем более, который можно было бы изложить, не в виде большой книги, а ответе на вопрос. И всё куда сложнее, чем вы вероятно, думаете.
Но есть несколько советов:
Нужен квалифицированный администратор, который настроит и будет сопровождать сервер.
Крайне желателен анализ приложения специалистом по безопасности.
Есть WAF, которые могут решить часть проблем приложения, даже если о них не известно, и в простейшем случае, можно воспользоваться, например Cloudflare, т.к. поднимать такое ПО локально, часто накладно по ресурсам.
Ну а также, там, куда можно заливать файлы, должно быть запрещено выполнения кода, на уровне конфигурации веб сервера. Т.е. надо писать нормальные конфиги. В вашем случае, вообще-то всё довольно просто - у вас же только одна точка входа - index.php в webroot, вот только он и должен выполняться через php-fpm, а не все php файлы. Ну а места, куда заливать нельзя, и это не какой-то файловый кеш, должны быть защищены на уровне прав от возможности создания файлов пользователем, от которого запущен обработчик php. Т.е. должно соблюдаться правило, если что-то не является необходимым, оно запрещено.
Также - никакого лишнего софта на сервере. Никаких phpmyadmin, дырявых панелей, ftp. Всё снаружи закрыто фаерволом. Но это всё ваш админ должен сам знать, собственно, а раз вы задаёте этот вопрос, то он вам ох как нужен.