2016-12-12 4 views
1

J'essaie de trouver un moyen d'exécuter une commande sur un fichier SELinux .te situé sur le serveur de marionnettes, mais pas sur le client (J'utilise le module puppet-selinux de puppetforge pour compiler le fichier .te dans le fichier du module .pp, donc je n'en ai pas besoin sur le serveur client). Mon idée de base est quelque chose comme:Exécution d'une commande BASH sur un fichier situé sur le serveur Puppet et non sur le client

class security::selinux_module { 

    exec { 'selinux_module_check': 
    command => "grep module selinux_module_source.te | awk '{print $3}' | sed 's/;//' > /tmp/selinux_module_check.txt", 
    source => 'puppet:///modules/security/selinux_module_source.te', 
    } 
} 

Bien que lorsque vous essayez de l'exécuter sur le serveur client je reçois:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter source on Exec[selinux_module_check] at /etc/puppet/environments/master/security/manifests/selinux_module.pp:3 on node client.domain.com 
Warning: Not using cache on failed catalog 
Error: Could not retrieve catalog; skipping run 

Toute aide sur ce serait grandement apprécié.

Répondre

1

Vous pouvez utiliser la fonction generate() de Puppet pour exécuter des commandes sur le maître pendant la compilation du catalogue et capturer leur sortie, mais c'est rarement une bonne chose à faire, surtout si les commandes en question sont coûteuses. Si vous avez l'intention de transférer la sortie résultante au client pour une utilisation quelconque, vous devez également veiller à ce qu'elle soit appropriée pour le client, ce qui peut ne pas être le cas si le client diffère trop du serveur.

Je suis en train de trouver un moyen d'exécuter une commande sur un fichier .TE SELinux qui est situé sur le serveur de marionnettes, mais pas le client (j'utiliser le module de marionnettes SELinux de puppetforge pour compiler le. déposer te dans le fichier du module .pp, donc je ne ai pas besoin sur le serveur client

l'approche la plus simple serait d'exécuter la commande nécessaire directement, une fois pour toutes, à partir d'un shell interactif, et pour mettre le résultat dans un fichier à partir duquel l'agent peut l'obtenir, via Puppet ou autrement, uniquement si le fichier de mise en application de type a été généré de manière dynamique aurait-il un sens de le compiler à chaque fois que vous ld un catalogue.

Je suggère, cependant, que vous construisiez un paquet (RPM, DEB, peu importe) contenant le fichier de politique selinux et tous les scripts d'installation nécessaires. Placez ce package dans votre référentiel local et gérez-le via une ressource Package.

+0

Il est peut-être intéressant de mentionner que si vous essayez de faire quoi que ce soit sur le maître lors de la compilation du catalogue, les fonctions sont à portée de main. Incertain si mentionner les problèmes avec la tentative d'utiliser 'source' avec' exec' et en utilisant des exécutables non absolus dans 'exec'. –