Comment faire pour exécuter un script à la racine de l'autorité dans Linux
Je dois développer un site Web écrit en CGI.
Je voudrais savoir comment faire pour exécuter un script à la racine de l'autorité de CGI.
Disons que le nom du script est hello
, je le lance à partir de CGI comme système("pathToTheFile/bonjour").
Maintenant, je voudrais que ce bonjour fichier en tant que root; quelqu'un peut-il m'aider?
- une bonne raison pour cela?
- Maintenant que j'ai pour écrire un fichier dans mon système à l'aide d'un script, mais j'ai besoin de la racine de l'autorité de l'écriture d'un fichier.
- BTW, vous devriez penser à la ramification de permettre à une page web pour obtenir un accès root.
- Normalement, le serveur web que vous exécutez pour accéder à votre script CGI doit être exécuté sur un système d'utilisateur annonce pas sous root (par exemple, un utilisateur de calles
apache
exécution d'apache httpd); après que vous venez de donner à l'utilisateur l'accès lecture et exécution du script.
InformationsquelleAutor kevin | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
Généralement le moyen le plus sûr pour faire ce genre de chose est d'utiliser le setuid fonction de l'os UNIX-like. Si vous définissez le propriétaire de la
hello
programmeroot
, puis définissez le bit setuid:Alors peu importe qui exécute le programme, il sera exécuter en tant que root. Cela fonctionne pour des exécutables natifs, mais pas pour interpréter des scripts. Si "bonjour" doit être un script, alors cela ne fonctionne pas pour vous.
Maintenant, je dois dire qu'en général, les programmes setuid root ne sont pas une bonne idée. Souvent, vous pouvez créer un utilisateur spécial pour propre le script, et donnent à l'utilisateur des privilèges nécessaires, et ensuite faire le script setuid à cet utilisateur.
sudo
est plus sûr puisque vous pouvez définir plus fine de contrôler qui peut l'exécuter (par exemple, l'UID du serveur web uniquement).Une méthode beaucoup plus sûr de faire les choses en tant que root à partir d'une page web est de déconnecter l'exécution du programme à partir de la page web. Au lieu de cela, utilisez Unix local sockets, des canaux nommés ou un répertoire des travaux en file d'attente.
Le répertoire est probablement le plus facile à manipuler. Configurer un répertoire que votre page web peut écrire des fichiers dans. Lorsque votre page doit quelque chose, écrire un fichier décrivant la tâche. Ensuite, vous avez un programme qui s'exécute en tant que root en attente pour de nouveaux emplois. Il peut fonctionner en continu, si elle a besoin d'une réponse rapide ou il peut exécuter toutes les minutes ou toutes les quelques minutes à l'aide d'une entrée crontab.
La méthode normale serait d'avoir le fichier exécutable fichier appartenant à l'utilisateur que vous souhaitez exécuter en tant que, puis définissez la SUID peu.
La méthode d'utilisation de
sudo
nécessite généralement la saisie de l'utilisateur le mot de passe (il y a des façons de contourner cela, mais ils sont affreusement complexe).Je suppose que je n'ai pas besoin de mentionner que la définition du bit SUID est une chose très dangereuse à faire, oui? Si il y a tout autre façon de faire ce que vous voulez, vous devez l'utiliser.
Une chose que vous pourriez envisager est de poser la question, non pas dans la solution dont vous avez besoin, mais en termes du problème que vous souhaitez résoudre. Exécute en tant que root est un solution et pas forcément bonne. Post ce que vous essayez d'atteindre plutôt que de comment, et nous pouvons vous aider beaucoup moins dangereux.