Запись в файл в каталоге, принадлежащем другому пользователю, с помощью php - PullRequest
1 голос
/ 08 октября 2010

У меня есть сервер, на котором размещены несколько доменов.С одного из доменов, используя скрипт php, я хочу добавить несколько строк в .htaccess других доменов.

Например, с masterdomain.com Я хочу добавить несколько строк в .htaccess.из otherdomain.com.Поэтому из php-файла в / home / masterdomain / www / я хочу добавить несколько строк в .htaccess, расположенный в /home/otherdomain/www.

Для этого я написал сценарий оболочки, когдаЯ запускаю скрипт оболочки как root, он работает, но при запуске через php, exec('./write_htaccess.sh') не работает, ничего не происходит.Я проверил, и ошибок нет.

Я пытался запустить chmod u + s на write_htaccess.sh, чтобы каждый раз пытаться запустить его как root, но это тоже не сработало, возможно, я установил sхотя немного ошибочно.

Как мне этого добиться?Нужно ли давать права root root, что будет лучшим способом сделать это?

Ответы [ 6 ]

1 голос
/ 08 октября 2010

PHP, вероятно, запускается тем пользователем, под которым работает ваш веб-сервер; Я думаю, когда вы говорите сервер, вы имеете в виду веб-сервер. В Red Hat или Fedora, которая является apache (если вы не используете другой веб-сервер), другие версии linux могут использовать www или другого пользователя. Когда вы запускаете скрипт оболочки из PHP, он выполняется пользователем apache. У этого пользователя должны быть права на запись в файл .htaccess или он должен быть в группе с правами на запись в файл .htaccess.

Попробуйте изменить принадлежность группы файла .htaccess на apache (или что-то еще) и сделать его доступным для записи группой. Это позволяет избежать порчи с битами sudo или setuid. Конечно, это означает, что любой член этой группы может изменить файл .htaccess.

0 голосов
/ 10 мая 2011

Вы можете предоставить разрешение sudo пользователю apache без пароля и разрешить только одну команду, которая будет вашим write_htaccess.sh сценарием. Тогда используйте exec('sudo ./write_htaccess.sh').

Лично я, вероятно, просто открыл бы права доступа к файлам и каталогам.

0 голосов
/ 08 октября 2010

Можете ли вы сделать файл доступным для записи в группу и добавить обоих пользователей в одну группу?

0 голосов
/ 08 октября 2010

Bash (и другие оболочки) вызывают другие команды в качестве реального идентификатора пользователя, а не эффективного идентификатора пользователя, поэтому флаг 's' не имеет никакого эффекта. Запустите программу, используя sudo, и она должна работать как положено, или настройте скрипт для запуска из [x] inetd (с соответствующими элементами управления доступом).

0 голосов
/ 08 октября 2010

Вы можете подключиться к sftp / ftp / ssh с помощью php и авторизовать пользователя, какие файлы вы пытаетесь редактировать.

0 голосов
/ 08 октября 2010

Как насчет добавления php в sudoers и позволить ему делать только одно.

...