2010-08-05 7 views
4

Je tente de créer une interface Web très simple pour modifier certains paramètres système sur une appliance réseau. Je suis assez novice en PHP et je suis douloureusement conscient de la facilité avec laquelle je fais les choses de manière hacky, alors j'essaye d'écrire tout ce qui est dans les meilleures pratiques. Cela dit, quelle serait la meilleure pratique pour éditer des fichiers appartenant à root/un autre compte d'administrateur? Serait-ce pour créer un shell/perl/script protégé qui est exécuté par PHP? L'utilisation de setuid était une autre option qui est apparue, mais cela ne semble pas avoir un moyen de restreindre les utilisateurs.Modification de fichiers système avec autorisations élevées et PHP

J'espère que ce n'était pas trop vague, laissez-moi savoir si vous avez besoin de plus de détails et je serai heureux de partager. Plus de détails: Juste pour clarifier - par éditer des fichiers système, je veux dire spécifiquement ifcfg et certaines informations de licence propriétaires. Donc, par souci de simplicité, disons juste une simple interface web pour modifier les paramètres ip/subnet/gateway/dns sur une appliance réseau basée sur linux.

+0

Restreint le serveur Web/routeur derrière 1 adresse MAC, le vôtre. Une fois que le code est robuste et analysé par un programmeur soucieux de la sécurité, vous pouvez penser à rendre un peu plus accessible. –

Répondre

2

Quelques petites choses. Faites d'abord une sauvegarde. Ecrire dans un fichier temporaire suivant. Ensuite, validez ce fichier (relisez-le pour vous assurer qu'il est valide sur le plan syntaxique et que vous pensez que c'est le cas). Seulement alors, déplacer (mv ou rename()) le fichier sur le dessus de l'original. De cette façon, vous ne pouvez jamais se retrouver coincé dans une position où un autre processus essaie de lire pendant que vous êtes encore à écrire, ou d'une erreur d'écriture provoque une erreur de syntaxe, etc ...

Edit:

Il sont quelques choses que vous pouvez faire pour les autorisations escaladées.

Un serait d'écrire un script (shell) pour valider le fichier et faire le déménagement. Vous pouvez ensuite définir ce fichier. Alors, vous écrivez le fichier temporaire en utilisant PHP, validez-le en PHP (après tout, vous ne pouvez jamais trop valider). Puis appelez le script pour déplacer le fichier temporaire en position (avec les privilèges dégressifs).

Un autre serait d'ajouter un compte avec la permission d'écrire dans ces fichiers seulement (soit via sudo ou normalement). Ensuite, utilisez PHP pour su newuser -c "mv tmpfile finalfile". Vous devez utiliser l'authentification, mais c'est mieux que d'exécuter PHP comme escilated ...

L'autre option, serait d'utiliser l'extension SSH pour retourner dans la boîte (en utilisant une clé privée), télécharger le fichier et copiez-le à la destination finale.

Mais de toute façon que vous le faites, si PHP est piraté, ils ont accès à ces fichiers depuis PHP a une façon de ...

+0

Merci, j'essayais plus précisément de comprendre quelle est la meilleure façon de s'interfacer entre une opération comme celle que vous décrivez et PHP. Évidemment, je ne veux pas exécuter PHP avec des autorisations élevées, mais c'est un peu un piège 22 – HurnsMobile

+0

Oh, désolé. Je pensais que vous étiez à la recherche de meilleures pratiques générales. Je vais éditer ma réponse ... – ircmaxell

+0

Merci, c'est exactement l'information que je cherchais. – HurnsMobile

3

Ne pas

C'est la meilleure pratique.

Raison? Vous êtes nouveau sur PHP. Cela laisse d'abord tout ce que vous écrivez très suspect à une variété d'embûches.

Votre question était un peu vague. Élaborez un peu plus sur ce que vous essayez de changer, pourquoi cela doit être changé, qui gère cela, quelle est la portée de l'application, etc. et de meilleurs conseils peuvent être offerts.

Certaines choses à garder à l'esprit sont les sauvegardes du système. Toujours faire des copies de fichiers avant de les éditer. N'écrivez pas directement dans le fichier. Copiez le fichier existant dans un fichier de sauvegarde et un fichier temporaire. Editez le fichier temporaire, puis replacez-le (renommez-le) en le renommant. Cela le rend facile à restaurer (si vous devez) et vous empêche de visser le fichier pendant une écriture si elle échoue.

+0

Ajout de plus d'informations pour clarifier un peu la question. – HurnsMobile

0

J'utiliser un script shell pour la modifier comme vous dites et il suffit d'utiliser PHP en tant qu'interface web. De cette façon, vous pouvez aussi utiliser le script vous-même depuis la ligne de commande si vous en avez besoin (peut-être un job cron ou quelque chose comme ça). Le script shell pourrait aussi bien être écrit en PHP CLI que perl, python ou bash donc la solution pourrait être entièrement PHP si vous le souhaitez.

Josh K et ircmaxell fait également une très bonne sauvegardes re-fichier de points etc.

Questions connexes