comment effectuer des actions root à partir d'un compte non root?

15

Je veux pouvoir redémarrer les services à partir d'un script php. fonctionnant sous le compte www-user.

Quelle est la manière préférée d'effectuer ces actions?

Je reconnais que je peux placer créer un fichier avec des commandes que'd, lu par CRON, mais la solution démange.

Ce à quoi je pense, c'est un petit service, fonctionnant sous root, permettant des "méthodes" prédéfinies pour que des actions root arbitraires ne puissent pas être exécutées.

Un outil pour cela?

user65297
la source
@MadHatter, Mona Lisa envoie ses salutations ;-)
user65297

Réponses:

27

Vous pourriez réinventer la roue, mais honnêtement, j'utilise sudo sans mot de passe pour cela. Par exemple, mon système de surveillance doit pouvoir exécuter une commande pour vérifier le RAID matériel. Cela nécessite le privilège root, mais je ne veux pas exécuter tout le système de surveillance en tant que root, donc à la place, je l'ai dans sudoersune ligne qui dit

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

puis exécutez la commande en sudo /usr/lib/nagios/plugins/check_md_raidtant qu'utilisateur de surveillance, lorsque je dois vérifier le RAID.

Vous pourriez avoir une ligne sudoers qui disait

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

puis exécutez php sudo /etc/rc.d/init.d/myservice restart.

Chapelier Fou
la source
2
C'est la voie à suivre pour l'OMI. J'ai utilisé ce processus pour une tâche similaire. Il est en production depuis plus de 3 ans maintenant. Rien n'a jamais échoué et le risque de sécurité est presque inexistant tant que vous protégez le code PHP qui le déclenche correctement avec la logique de votre application.
Andrew Ensley
1
Merci, sudoers nouveau pour moi et frappe à la cible. @Andrew, merci pour les informations supplémentaires.
user65297
1
user65927, pardonnez-moi si ce n'est pas une nouvelle pour vous, mais l'étiquette locale est que lorsque vous avez une réponse satisfaisante à une question, vous l'acceptez en cliquant sur la coche à côté d'elle.
MadHatter
1
Vous devrez peut-être également commenter la ligne "Defaults requireetty" dans votre fichier sudoers. Cette étape m'a eu plusieurs fois. (Par exemple, changer "Defaults requireetty" en "#Defaults requireetty")
steve.lippert
6

Jetez un œil à sudo : il permet de spécifier des actions qui peuvent être effectuées en tant qu'autre utilisateur (root dans votre cas).

Vous pouvez par exemple ajouter à votre /etc/sudoers(ne pas modifier le fichier directement utiliser visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Voir man sudopour les détails et la syntaxe du fichier

Matteo
la source
2
soyez TRÈS prudent lorsque vous éditez le /etc/sudoersfichier. S'il est syntaxiquement incorrect, le modifier est un cauchemar b / c, vous devez y sudorevenir, mais vous ne pouvez pas b / c vous venez d'effacer sudo. Vous finissez par devoir utiliser un CD / DVD de secours et monter la partition manuellement.
puk
1
@puk En fait, pour modifier les frissons, vous avez besoin d'un accès root et si le fichier est endommagé, vous pouvez vous connecter en tant que root, puis le restaurer (à partir d'une copie de sauvegarde) ou le corriger manuellement. visudo effectue également des contrôles d'intégrité sur le fichier avant de l'écrire.
Matteo
c'est quoi shudders? C'est vrai que visudo fait des vérifications de santé mentale, mais ils n'aident pas une fois les dommages causés: P
puk