1 votes

Problèmes de sudo et chef-solo

Je fais face à un problème étrange lors de l'exécution des commandes chef-solo sur Ubuntu 10.04.

Si j'exécute ceci (en tant que root):

# chef-solo -c /opt/mycorp/mycorp-chef-code/config/solo.rb -j /opt/mycorp/mycorp-chef-code/config/run_mycorp-config.json
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: Setting the run_list to ["recipe[mycorp-config]"] from JSON
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: Starting Chef Run (Version 0.9.12)
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: Chef Run complete in 0.47172 seconds
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: cleaning the checksum cache
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: Running report handlers
[Tue, 16 Nov 2010 15:28:49 +0100] INFO: Report handlers complete

Cependant, si j'exécute la même commande exacte avec sudo (soit en tant que root, soit en tant que sudoer), j'obtiens ceci :

# sudo chef-solo -c /opt/mycorp/mycorp-chef-code/config/solo.rb -j /opt/mycorp/mycorp-chef-code/config/run_mycorp-config.json
[Tue, 16 Nov 2010 15:28:37 +0100] INFO: Setting the run_list to ["recipe[mycorp-config]"] from JSON
[Tue, 16 Nov 2010 15:28:37 +0100] INFO: Starting Chef Run (Version 0.9.12)
[Tue, 16 Nov 2010 15:28:38 +0100] ERROR: Running exception handlers
[Tue, 16 Nov 2010 15:28:38 +0100] ERROR: Exception handlers complete
/opt/mycorp/mycorp-chef-code/chef-repo/cookbooks/tomcat6/attributes/default.rb:45:in `from_file': undefined method `[]' for nil:NilClass (NoMethodError)
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:578:in `load_attributes'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:576:in `each'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:576:in `load_attributes'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:575:in `each'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/node.rb:575:in `load_attributes'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/run_context.rb:74:in `load'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/run_context.rb:55:in `initialize'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/client.rb:155:in `new'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/client.rb:155:in `run'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:190:in `run_application'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:181:in `loop'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application/solo.rb:181:in `run_application'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/application.rb:62:in `run'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/chef-solo:25
    from /usr/bin/chef-solo:19:in `load'
    from /usr/bin/chef-solo:19

Une idée ? Je suis vraiment perdu, pourquoi l'utilisation de sudo causerait un problème, même si l'utilisateur lançant la commande est root.

Merci d'avance.

0 votes

Plonger dans la recette "tomcat6" a montré qu'elle avait besoin de Java pour fonctionner. Ce dernier n'était pas situé dans le chemin par défaut utilisé par sudo, c'est pourquoi l'opération a échoué. Ajouter une ligne personnalisée "Defaults secure_path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bi‌​n:/opt/local/bin:/op‌​t/my_java/" au fichier sudoers a permis de résoudre le problème.

2voto

snuggles Points 196

C'est un peu étrange mais Sudo modifie les variables d'environnement donc peut-être que chef-solo est perturbé par cela.

En tant que root, exécutez : env et ensuite exécutez sudo env

Vous verrez que les variables sont complètement différentes.

Autres réflexions

Voici quelques informations de la page de manuel :

Si sudo est exécuté par root et que la variable d'environnement SUDO_USER est définie, sudo utilisera cette valeur pour déterminer qui est l'utilisateur réel. Cela peut être utilisé par un utilisateur pour enregistrer des commandes à travers sudo même lorsque un shell root a été invoqué. Cela permet également à l'option -e de rester utile même lorsqu'elle est exécutée via un script ou un programme lancé avec sudo. Notez cependant que la recherche des sudoers est toujours effectuée pour root, pas pour l'utilisateur spécifié par SUDO_USER.

Votre SUDO_USER est-il défini avant d'exécuter sudo ? Vérifiez avec echo $SUDO_USER.

La table des sudoers est toujours consultée même si vous êtes root, donc vérifiez votre fichier sudoers.

0 votes

Merci pour votre réponse. En fait, cela était lié à la variable $PATH qui est différente à l'intérieur de l'environnement sudo.

0 votes

Le problème actuel est que le fichier sudoers par défaut dans Ubuntu fait "env_reset". Le meilleur choix est d'utiliser chef pour remplacer la configuration par défaut cassée. Ce n'est pas plus sécurisé :).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X