Я делаю системный вызов с php, который
`sudo /usr/bin/perl -pi -e 's/foo/bar/g' /tmp/newxml.xml`;
который отлично работает в php cli. Но не будет работать в php через браузер, потому что apache не имеет необходимых разрешений на выполнение. Как мне сделать apache sudoer, чтобы разрешить запуск только / usr / bin / perl?
Я понимаю, что для этого придется отредактировать / etc / sudoers, но я не уверен, как это сделать. Есть указатели?
Я использую RHEL 5.5
Я не думаю, что предоставление прав sudo пользователю apache было бы разумным с точки зрения безопасности. Рассматривали ли вы изменение владельца этого файла на уровне группы, чтобы apache мог писать в него без необходимости использования sudo?
visudo
Добавить
nobody ALL=(ALL)NOPASSWD:/usr/bin/perl
не замените никого тем, кем является ваш пользователь apache.
Но тебе не следует этого делать. Предоставление apache sudo доступа к perl, по сути, дает любому пользователю мгновенный root-доступ к вашему ящику, который скомпрометирует ваше приложение php.
Вы должны проверить маску на наличие /tmp/newxml.xml
и убедитесь, что он доступен для записи вашим пользователем apache.
Во-первых, вы можете делать то же самое из PHP без необходимости вызова perl.
Во-вторых, поскольку вы запускаете rhel, вам, вероятно, мешает SELinux. Попробуйте запустить setroubleshooter, он предоставит вам необходимую информацию о том, как это исправить.
В-третьих: не давайте root ни apache, ни sudoers, ни тому подобному.