Comment exécuter un programme en tant que root sans «sudo»?


10

J'ai un certain programme binaire sur OS X qui ne peut être exécuté qu'en tant que root.

Je suis fatigué de préparer à sudochaque fois que je l'invoque et de taper le mot de passe, et je voudrais qu'il s'exécute automatiquement en tant que root lorsque je l'invoque régulièrement, sans demander de mot de passe.

Le propriétaire du programme est root et son groupe est wheel.

J'ai essayé chmod ug+sde définir l'ID utilisateur et l'ID groupe lors de l'exécution sur root / wheel, mais lorsque j'exécute le programme sans sudo, il se plaint toujours qu'il ne peut fonctionner qu'avec sudo ou en tant que root.


Peut-il être exécuté à un moment particulier ou lorsqu'un événement se produit?
user151019

9
Les anciens gourous d'Unix suggèrent qu'invoquer une opération root uniquement à la main sur une base régulière signifie que vous le faites mal. Est-ce quelque chose qui peut être automatisé? Ou exécuter en tant que démon? Plus de détails pourraient apporter des suggestions de solutions d'un type différent.
dmckee --- chaton ex-modérateur

Le programme appartient-il réellement à root? Setuid / gid utilisera l'utilisateur / groupe du fichier.
Daniel Beck

2
… Où "plus de détails" inclut également des éléments tels que si le programme binaire de ce programme se trouve sur un volume monté NFS et si vous utilisez l' nosuidoption de montage ... en plus de la raison pour laquelle vous devez régulièrement exécuter un programme en tant que superutilisateur.
JdeBP

@dmckee de nombreux utilisateurs de Mac exécutent un logiciel serveur sur leur poste de travail et il est souvent configuré pour exiger root pour des choses qui ne devraient vraiment pas en avoir besoin ... mais reconfigurer une pile LAMP pour qu'elle s'exécute sans root est une douleur dans le cul. En revanche, redémarrer apache 20 fois par jour et taper sudo à chaque fois est aussi une douleur dans le cul. Ceci est une solution simple.
Abhi Beckert

Réponses:


2

Êtes-vous sûr que le programme que vous essayez d'exécuter est en fait un binaire et non un script shell. La plupart des shells ignorent les scripts suid car ils sont vraiment très difficiles à faire en toute sécurité. Un moyen simple de vérifier consiste à utiliser la filecommande sur le programme.


17

Une demi-solution à votre problème:

dans le fichier sudoers, ajoutez ce qui suit:

username ALL= NOPASSWD: /path/to/command

Ensuite, à partir de la ligne de commande, vous pouvez taper:

sudo command

et il exécutera la commande sans demander votre mot de passe. Cette commande s'exécutera en tant que root.

Remarque, vous devrez remplacer le nom d'utilisateur par votre nom d'utilisateur réel.


Étonné de trouver la meilleure réponse en bas. Je vous remercie!
CDR

Pour info, pour résoudre l'autre moitié (ne pas avoir à taper la commande sudo) créez un alias shell qui inclut sudo dans la commande (comme surm = sudo rm "$ @")
Walter

4

Si vous ne pouvez vraiment pas l'invoquer en tant que démon pour une raison quelconque (cette question serait pertinente dans ce cas) , cette méthode peut être piratée ensemble, mais elle est assez sale et pas sécurisée du tout.

Le concept est de le lancer avec un AppleScript. Vous devez d'abord savoir comment appeler le processus à partir de la ligne de commande (ce qui signifie que si vous utilisez déjà sudo, vous devez être prêt). Vous lancerez ce processus à l'aide de la do shell scriptcommande, et au lieu d'utiliser sudo, vous écrivez vos informations d'identification dans l'AppleScript:

do shell script "/path/to/your/executable/here" user name "me" password "mypassword" with administrator privileges

Je réitère la partie sur l'insécurité: CECI SIGNIFIE QUE VOS CRÉDITS ADMIN SERONT STOCKÉS EN TEXTE CLAIR. Dans la mesure du possible, vous devriez trouver un moyen d'arrière-plan en tant que LaunchDaemon.


Un moyen de "Runas" pour votre mac :) Merci
Vlueboy

2

SUR OSX supposons que le programme que vous avez se trouve dans / usr / local / bin / YourProgramName ... Pour résoudre ce problème, la commande suivante, Pour changer l'ID utilisateur / l'ID de groupe pour les hiérarchies de fichiers enracinées dans les fichiers au lieu de simplement les fichiers eux-mêmes .

sudo chown -R $(whoami) /usr/local/bin/

... puis dans Terminal, appelez votre programName, $ YourProgramName


Mon problème était que les programmes installés étaient installés sans les autorisations appropriées, j'ai donc exécuté cela sur les répertoires de ces programmes et maintenant ils fonctionnent correctement sans sudo. Merci!
atwixtor

0

Tu peux faire

sudo tcsh

ce qui vous mettra dans une coquille racine.


0

ressemble au programme lui-même vérifie s'il est en cours d'exécution avec ID = 0


1
… Ce qui, bien entendu, le sera s'il s'agit d'un superutilisateur set-UID (en laissant de côté les préoccupations exprimées ci-dessus). Qu'est - ce que vous êtes probablement en train de dire est que le programme vérifie pour réel UID 0 plutôt que efficace UID 0.
JdeBP

-1

Tu pourrais sudo chown YOUR-USERNAME-HERE BINARY-NAME-HERE.

Pourtant, je suis totalement d'accord avec le commentaire de dmckee.


Comment cela pourrait-il aider?
Scott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.