2010-08-06 17 views
6

Je veux ajouter une ligne dans la crontab (sur ma machine locale) qui sera lancée toutes les cinq minutes. Mon problème est la commande que je vais utiliser nécessite sudo:Comment lancer une commande sans sudo?

sudo indexer --config /usr/local/etc/sphinx.conf --all --rotate 

Est-il possible que je peux exécuter la commande sans utiliser sudo et sans demander le mot de passe?

Merci!

+3

appartient à superuser.com – Philipp

Répondre

3

Mettez-le dans le crontab de root

sudo crontab -e 

Là, vous pouvez mettre

indexer --config /usr/local/etc/sphinx.conf --all --rotate 

Toutes les commandes dans cette crontab seront exécutés en tant que root. Si vous venez du crontab -e en tant qu'utilisateur actuel, ils seront exécutés sous les permissions de vos utilisateurs.

+0

cela semble résoudre le problème. Mais je veux savoir comment certaines commandes peuvent être exécutées sans le mot de SUDO à eux .. Un exemple en est peut-être: sudo apt-get install Comment puis-je alors faire juste apt-get install ?? Ajouter moi-même au fichier sudoers? Merci! – r2b2

+3

@ r2b2: Vous ne pouvez pas, c'est une question de sécurité de base. Afin d'exécuter des commandes comme 'root', vous devez prouver que vous êtes autorisé à le faire. 'sudo' vous permettra d'exécuter des commandes comme' root' (généralement après vous avoir demandé votre mot de passe) * car vous êtes dans le fichier 'sudoers' *. Une autre façon d'exécuter une commande comme 'root' est avec la commande' su', qui vous demande le mot de passe 'root'. Les commandes dans crontab de 'root' sont exécutées en tant que' root' puisque 'root' doit les écrire. – Gilles

0

l'exécuter en tant que racine? ou utilisateur de sphinx? essayer de savoir quel utilisateur vous avez besoin d'être exécuté comme et l'ajouter à cet utilisateur cron

1

Il est extrêmement dangereux de mettre des applications dans la crontab de la racine, sauf si la boîte est bien sécurisée contre les pirates. Si par hasard quelqu'un remplace les binaires (y compris les bibliothèques), vous êtes parti!

Une meilleure façon serait de chown tous les fichiers les accès binaires à un utilisateur non privilégié et exécuter le travail en tant qu'utilisateur non privilégié.

L'un des fichiers binaires utilisés par l'application ne doit pas être accessible en écriture à quiconque sauf root.

+0

@Nilesh: hein? tout système unix a des commandes dans le système crontab, à exécuter par 'root'. Il n'y a aucun danger particulier à le faire. Ce qui serait dangereux serait d'exécuter un programme dont le fichier binaire (ou la bibliothèque chargée) est accessible en écriture par un autre utilisateur, car cet utilisateur pourrait alors exécuter du code arbitraire en tant que root en écrasant le fichier. C'est toujours vulnérable aux utilisateurs locaux. – Gilles

+0

@Gilles: vrai. J'aurais dû dire binaires au lieu de binaire :) Edited. – Nilesh

+0

@Nilesh: Je pense que la question est claire dans les deux notre esprit, mais pas dans ce que vous avez écrit, je vous propose donc quelques changements. Tout d'abord, la partie de « garantie contre les pirates » n'est pas vraiment pertinent: le point clé est que la racine ne doit pas fonctionner (par Cron ou autrement) une application dont le fichier exécutable peut être remplacé par un autre utilisateur. En second lieu, en fait, il n'y a pas que les fichiers binaires et les bibliothèques, il est tout ce qui sera exécuté (y compris le code binaire chargé de bibliothèques, mais aussi toutes sortes de scripts). – Gilles

0

Vous pouvez configurer sudo pour qu'il ne demande pas de mot de passe. Lisez man sudoers pour savoir comment faire ça. Recherchez la chaîne NOPASSWD.

2

Ajoutez juste votre commande à la liste des fichiers sudoer en utilisant cmd visudo (ce cmd nécessite privilege racine) comme ci-dessous:

<YOUR_USER_NAME> ALL = NOPASSWD:<ABSOLUTE-PATH-TO-CMD> 

Prenez soin de l'ABSOLUTE-PATH-TO-CMD, il peut devenir trou de sécurité.

Questions connexes