2009-08-21 7 views
0

J'utilise un paquet Perl open source nommé "webmin" sur plusieurs serveurs. C'est surtout Perl à l'intérieur.Pourquoi webmin ne peut-il pas ouvrir les fichiers dans les répertoires qui ne sont pas exécutables dans le monde?

J'ai trouvé un comportement étrange sur un nouveau serveur 64 bits: les fichiers étaient créés vides.

Je l'ai tracée à une erreur "Permission Denied" dans la fonction intégrée de Perl open ce qui est assez inhabituel, car l'application s'exécute en tant que root. j'avais sortie perl les < $ et $> variables et ils revendiquent tous deux que je suis utilisateur 0

Ce bug semble affecter les fichiers dans des répertoires où le répertoire n'est pas exécutable monde (chmod o-x $DIR) ... et cela n'arrive que très profondément à l'intérieur de webmin, je ne peux pas le reproduire seul.

Est-ce que cela semble familier à quelqu'un?

+2

Vous pouvez appeler webmin en tant que root, mais il peut perdre des privilèges (par exemple en basculant vers un utilisateur "webmin"). Vous devriez vérifier quel userid le processus s'exécute comme. –

+0

Les autorisations sont-elles exactement les mêmes pour tous les serveurs? L'installation d'Apache est-elle exactement la même? (Ou quel que soit le logiciel serveur que vous utilisez.) Cela ressemble à un problème avec la configuration du serveur ou le logiciel. Vous pouvez essayer le wiki Webmin: http://doxfer.com/Webmin/WebHome – Telemachus

Répondre

2

ACL dans le répertoire?

SELinux activé? Le fait que vous obteniez une erreur «permission denied» sur un répertoire qui n'a pas le bit execute n'est pas surprenant - sur les répertoires, le bit d'exécution contrôle l'accès au contenu du répertoire - la question est pourquoi? le bit d'exécution n'est pas défini.

Vérifiez si un paramètre umask s'applique au processus.

+0

pas d'acls dans le répertoire.pas SELinux. Je ne devrais être affecté que par le bit d'exécution * user *, si je suis le propriétaire du répertoire (je suis). Et cela fonctionne très bien sur un serveur 32 bits – jes5199

2

Je l'ai tracé vers le bas à une "Autorisation refusée" erreur [....] * [w] * UEL est assez inhabituel, puisque l'application fonctionne en tant que root.

Etes-vous sûr que vous utilisez comme root au moment du open() échoué?

la documentation de Webmin offre la possibilité de exec commandes arbitraires autres utilisateurs et un grep rapide du code source montre un certain nombre d'instances d'une fonction nommée switch_to_unix_user() ...

+0

J'ai eu perl sortie les variables $ < and $>, et ils prétendent tous les deux que je suis l'utilisateur 0 – jes5199

+2

@ jes5199, ah, maintenant cela vaut la peine d'éditer votre message original pour clarifier ... – pilcrow

1

dans les autorisations Unix, vous avez besoin exécuter l'autorisation sur un répertoire pour accéder à tout ce qui s'y trouve (vous n'avez pas besoin d'autorisation de lecture, c'est pour lister le répertoire, vous n'avez besoin que d'une permission d'exécution pour accéder au contenu). donc quelque chose accède au fichier sous un utilisateur qui est considéré "autre", et il n'a pas la permission

0

J'ai un problème similaire, et la cause semble être la longueur du chemin pour le fichier/dir vous essayez d'ouvrir/écrire. Dans mon cas, j'essayais d'ouvrir un dossier qui existe et j'ai 777 comme permission, mais le système échoue toujours à dire que le répertoire n'existe pas. Avez-vous testé et ouvert un autre dossier au même niveau mais avec un nom plus court?

Questions connexes