задача решена"? после возврата туда, где сначала заканчивается разрешение, отказ в разрешении внезапно исчез без причины.
Я создаю веб-страницу, на которой пользователь должен иметь возможность отправлять ввод, выбирая определенные предопределенные имена в локальной базе данных. (пользовательский ввод - это либо форма html, либо импортированный файл .txt)
Из php я хочу иметь возможность вызывать скрипты python, которые дополнительно получают другую информацию из базы данных. С этой информацией мне нужно иметь возможность создавать файлы, которые будут отправлены обратно пользователю.
как я могу выполнять вызовы сценария, не открывая для пользователя дыры в безопасности, как настроить apache?
я использую apache 2.2.3 как веб-сервер
Прямо сейчас у меня проблемы с разрешениями от apache, когда я пытаюсь записать в файл из моего скрипта python? В разрешении на запись отказано, даже если я даю полное разрешение скрипту, текстовому файлу и каталогам (777). Сам apache должен иметь некоторую конфигурацию безопасности, которая запрещает запись веб-пользователю?
Traceback (most recent call last):
File "python/pythonscript.py", line 6, in ?
f = open("/var/www/(path)/textfile.txt", "w")
IOError: [Errno 13] Permission denied: '/var/www/(path)/textfile.txt'
Могу ли я настроить свой веб-сервер так, чтобы сценарии могли читать и записывать файлы локально, но не позволяя пользователям Интернета иметь такую возможность? Если да, то какой способ сделать это наиболее безопасно?
Хорошо; Я не эксперт в этом, но заметьте, что ваш вопрос:
Могу ли я настроить свой веб-сервер так, чтобы сервер мог запускать сценарии и записывать файлы локально, но не позволяя пользователям иметь такую возможность
Это вводит в заблуждение - по умолчанию все действия, выполняемые на вашем компьютере, будут выполняться веб-сервером от имени пользователя. Нет никакой пользовательской концепции для удаленных пользователей, обращающихся к вашей веб-странице, что бы они ни делали, это будет пользователь, запускающий веб-сервер.
После успешного запуска вашего скрипта Python концепция конфигурации веб-сервера больше не применяется; теперь вы просто запускаете любой скрипт Python (обычно как пользовательские www-данные), и применяются обычные правила доступа. Для того, чтобы рассматриваемый сценарий мог записывать в файл, пользователь, запускающий веб-сервер, должен иметь доступ для записи в соответствующий каталог.
Я настоятельно рекомендую писать в другое место, кроме / var / www, например. / tmp. Возможно, вам потребуется ограничить размер записываемых файлов? Убедитесь, что вы только читаете (и записываете) байты, которые вы загружаете, и не пытайтесь выполнить что-либо из них.
Ключевым моментом является очистка пользовательского ввода - нет необходимости делать какие-либо специальные настройки, кроме как сделать скрипты исполняемыми. Пользователь может выполнять только те действия, которые выполняет ваш код, а вы контролируете, что именно делает ваш код. Для обеспечения безопасности нет серебряной пули. Есть несколько очень важных моментов, на которые следует обратить внимание:
Будьте абсолютно уверены, что пользователь не имеет возможности повлиять на пути исполняемых / читаемых скриптов / файлов. Например, f=open("/tmp/myfiles/"+some_path_from_user,"w")
было бы ОЧЕНЬ ПЛОХО и позволяло бы пользователю писать любой файл, который он хотел (этот apache имеет разрешения для)
Это применяется дважды при выполнении скриптов. По возможности, все пути к сценариям должны быть заранее определены, и пользователь не должен иметь возможность изменять эти сценарии.
Храните свои сценарии отдельно от других файлов.
Используйте принцип наименьших привилегий при установке прав доступа к файлам / скриптам.