Как ограничить вызов Ajax для запуска с определенными разрешениями POSIX? - PullRequest
2 голосов
/ 12 февраля 2011

У меня есть jsTree, который вызывает веб-сервис RESTful, чтобы получить список файлов и каталогов. Я хотел бы ограничить возможности этого веб-сервиса на основе разрешений POSIX пользователя, который делает этот вызов.

Другими словами, этот конкретный веб-сервис должен перечислять только те файлы и каталоги, к которым у пользователя есть права доступа POSIX.

В настоящее время веб-служба ищет зашифрованные данные в файле cookie, который проверяет пользователя, который вошел на веб-сайт. Как только пользователь аутентифицирован, веб-служба выдает ответ для папки, указанной в jsTree (например, все файлы и каталоги в /home/userA). Веб-служба вызывается еще раз для подкаталогов, и снова для подкаталогов и т. Д.

Однако веб-служба работает с разрешениями root -уровня и, таким образом, если другое имя пользователя было каким-либо образом указано в userA, например, чтобы просмотреть /home/userB, userA может увидеть список файлов и каталогов, которые ему или ей не были предоставлены права на просмотр.

Существует ли какой-нибудь эквивалент suExec, который может запускать веб-службу с разрешениями указанного пользователя?

Если это поможет, моя конкретная служба - это скрипт на Perl, использующий File::Find::Rule для одноуровневого глубокого перечисления содержимого указанного пути.

EDIT

Все передается по SSL-зашифрованному соединению.

1 Ответ

1 голос
/ 12 февраля 2011

Прежде всего, у вас есть ряд серьезных ошибок безопасности.Если это вообще возможно, вы должны запустить свой веб-сервис с низкими разрешениями, а не с высокими.Таким образом, если кто-то скомпрометирует ваш веб-сервис, ему придется работать, чтобы скомпрометировать коробку.

Во-вторых, сохранение имени пользователя в зашифрованном виде в cookie и отправка данных через http оставляет ваших пользователей открытыми для перехвата сеанса.Учитывая, что вы получаете доступ к своей действительной учетной записи пользователя, это проблема.Особенно с учетом того, сколько людей используют беспроводную связь и сколько детей имеют доступ к инструментам угона сеанса «укажи и щелкни», например, firesheep.

После того, как вы поймете эти моменты, вы можете воспользоваться несколькими подходами.Предполагая, что вы используете веб-сервер prefork (а не многопоточный), вы можете использовать POSIX :: setuid, чтобы временно изменить себя на пользователя, которого вы хотите, а затем использовать его снова, чтобы вернуться к своей обычной личности.

Другой простой подход - это иметь скрипт, доступный любому пользователю, который запускает веб-сервер, который выполняет листинг.Вы можете использовать sudoers, чтобы сделать его доступным с веб-сервера без пароля.Я бы предпочел это, потому что это может быть сделано без запуска веб-сервера от имени пользователя root.

...