Реализация входа в систему вместе с suPHP - PullRequest
7 голосов
/ 07 ноября 2011

Как можно создать функцию входа в систему, чтобы использовать права доступа к файлу suPHP.Например, если у меня есть веб-сайт по адресу www.example.com и два следующих пользователя со своими собственными домашними каталогами, каждый из которых имеет скрипт php test.php и скрипт validateUser.php, принадлежащий другому пользователю (root, www-data,apache ...) в каталоге /home.

/home/
├── validateUser.php
├── user1
│   └── test.php
└── user2
    └── test.php

user1 может получить доступ к скрипту user2's, посетив www.example.com/user2/test.php, и наоборот.Вместо этого я хочу направить все входящие запросы, используя что-то вроде mod_rewrite , на validateUser.php.Однако это приведет к выполнению всех сценариев как владельца validateUser.php, а не целевого сценария test.php.

В любом случае можно ли вызвать сценарий php до запуска suPHP, а затем либоразрешить suPHP продолжить или полностью прервать.


РЕДАКТИРОВАТЬ Это вторая награда, которую я назначаю.Сначала я дал Густаву б / к, он дал хороший частичный ответ .Я упомяну, что я пытался до сих пор, и почему ни один из них не работает для меня.

1) Я пытался использовать mod_rewrite , чтобы перенаправить URL-адрес на validateUser.php, чтобы либо войти в систему.пользователь, или вызовите любой сценарий, который они хотели вызвать.Проблема в том, что я настроил свои виртуальные хосты так, чтобы у каждого пользователя был свой виртуальный сайт (т. Е. www.user1.example.com, www.user2.example.com ... если это плохой подход к дизайну, смело указывайте на это).Поэтому, хотя ОС видит файловую структуру, как указано выше, в оперативном режиме корневые каталоги настроены так:

VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php

Естественно, я только что переместил копию validateUser.php в каталог каждого пользователя.Проблема в том, что теперь пользователь может удалить этот файл и поместить туда все, что хочет, например, вообще не требовать входа в систему.Чтобы обойти это, сделайте домашнюю папку липкой (что я бы никогда не порекомендовал сделать с домашней папкой) и сделайте validateUser.php владельцем root.Но теперь он будет работать как root, так как это suPHP.Вот где я сдался.

2) Я мог бы использовать предложение Густава mod_auth, но мне не нравится, что он требует пароль заранее (как на старых школьных веб-сайтах).

3) Я рассмотрел вариант 1), если бы я мог перенаправить между виртуальными хостами.Например, реструктурируйте виртуальные хосты следующим образом:

VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php

Затем используйте mod_rewrite для перенаправления ВСЕГО трафика от пользователей на www.admin.example.com/validateUser.php, и если пользователь вошел в систему (или если вход в систему успешен), пользовательперенаправлены обратно на сайт, на котором они первоначально пытались войти.Преимущество этого, если это возможно, заключается в том, что suPHP не будет активирован, пока пользователь не будет перенаправлен обратно на свой виртуальный хост.

1 Ответ

2 голосов
/ 15 ноября 2011

Рассматривали ли вы реализацию аутентификации пользователя с использованием mod_auth ?Если вы решите попробовать, есть руководство , которое может оказаться полезным.

Эквиваленты Apache 2.2:

Обратите внимание, что браузер сохраняет учетные данные и отправляет их в заголовке при каждом вашем запросе.

...