2011-02-12 5 views
2

J'ai un jsTree qui appelle un service web RESTful pour obtenir une liste de fichiers et de répertoires. Je voudrais limiter ce que ce service Web peut faire, basé sur les permissions POSIX de l'utilisateur qui fait cet appel. En d'autres termes, ce service Web spécifique doit uniquement répertorier les fichiers et répertoires auxquels l'utilisateur a accès à des autorisations POSIX.Comment limiter un appel Ajax à exécuter avec des autorisations POSIX spécifiques?

Actuellement, le service Web recherche des données cryptées dans un cookie, qui vérifie l'utilisateur qui est connecté au site Web. Une fois l'utilisateur authentifié, le service Web recrée une réponse pour un dossier spécifié par jsTree (par exemple, tous les fichiers et répertoires dans /home/userA). Le service Web est appelé à nouveau dans les sous-répertoires, et de nouveau dans les sous-sous-répertoires, et ainsi de suite.

Cependant, le service Web s'exécute avec root autorisations de niveau, et donc si un nom d'utilisateur différent était en quelque sorte spécifié par userA, par exemple. pour afficher /home/userB, puis userA pouvait voir une liste de fichiers et de répertoires qu'il ou elle pourrait ne pas avoir été autorisé à voir.

Existe-t-il un équivalent de suExec qui peut exécuter un service Web avec les autorisations d'un utilisateur spécifié? Si cela aide, mon service spécifique est un script Perl, en utilisant File::Find::Rule pour fournir une liste profonde à un niveau du contenu d'un chemin spécifié.

EDIT

Tout est transmis via une connexion cryptée SSL.

+0

Hmm. Peut-être mettre toute l'action dans un script séparé, et faire un 'sudo 'basé sur le nom d'utilisateur crypté dans le cookie? Vu que vous êtes en cours d'exécution en tant que root, vous ne devriez pas avoir de problème avec l'utilisateur réel. –

+0

Vous avez crypté l'utilisateur dans un cookie? Et envoyer des données sur http? C'est une très mauvaise idée, voir http://codebutler.com/firesheep pour une simple démonstration de ce qui peut arriver si quelqu'un utilise votre site via le wifi dans un café. – btilly

Répondre

1

Tout d'abord, vous avez un certain nombre d'erreurs de sécurité majeures. Si possible, vous devez exécuter votre service Web avec des autorisations faibles, pas des autorisations élevées. De cette façon, si quelqu'un compromet votre service Web, ils doivent travailler pour compromettre la boîte. Deuxièmement, en gardant le nom d'utilisateur chiffré dans un cookie et en envoyant des données sur HTTP, vos utilisateurs sont ouverts au piratage de session. Étant donné que vous avez accès à leur compte d'utilisateur, il s'agit d'un problème. Surtout compte tenu du nombre de personnes qui utilisent le sans fil, et combien d'enfants ont accès à des outils de piratage de session pointer et cliquer comme firesheep. Avec ces points compris, il y a quelques approches que vous pouvez prendre. En supposant que vous utilisez un serveur web prefork (plutôt que multi-thread), vous pouvez utiliser POSIX :: setuid pour vous changer temporairement à l'utilisateur que vous voulez, et ensuite l'utiliser à nouveau pour revenir à votre identité normale.

L'autre approche facile est d'avoir un script accessible à partir de n'importe quel utilisateur que le serveur web exécute comme le fait la liste. Vous pouvez utiliser sudoers pour le rendre accessible depuis le serveur Web sans mot de passe. Je préférerais cela parce que cela peut être fait sans avoir à lancer le serveur web en tant que root.

+0

Tout est fini https. –

Questions connexes