Sebastian Mogilowskis Blog

Just another blog about administration, linux and other stuff

Servermanagement with puppet – Part 2

Nun soll eine übersichtlichere Struktur aufgebaut werden. Als Beispiel soll auf jeden Server ein User  “sebastian” und ein weiterer Benutzer “demo” angelegt werden.
Beide Benutzer sollen in die Gruppe ‘admins’ und mit einem bekannten Passwort versehen werden.

1. Templates ”/etc/puppet/manifests/templates.pp”:

In dieser Datei werden verschiedene Klassen von Serverkonfigurationen erstellt. Diese Klassen fassen Konfigurationen zusammen und werden später den Servern (nodes) zugewiesen.

#
# templates.pp
#

class baseclass {
    include user::admins
}

2. Modules ”/etc/puppet/manifests/modules.pp”:

Für verschiedene Softwarekonfigurationen können in Puppet Module verwendet werden. Es existieren bereits Module für viele Anwendungen. Eine kleine Auswahl findet man hier:

http://git.puppet.immerda.ch oder
http://reductivelabs.com/trac/puppet/wiki/PuppetModules

#
# modules.pp
#

import "common"
import "user"

3. Nodes ”/etc/puppet/manifests/nodes.pp”:

Hier werden die einzelen Server definiert, welche durch Puppet verwaltet werden sollen. Der Node “default” würde alle Server ansprechen.

#
# nodes.pp
#

node default {

}

node 'puppetmaster.domain.local' {
    include baseclass
}

node 'pc1.domain.local' {
    include baseclass
}

node 'pc2.domain.local' {
    include baseclass
}

4. Site ”/etc/puppet/manifests/site.pp”:

In der Hauptkonfigurationsdatei von Puppet muss man nun nur doch die einzelnen Dateien importieren.

#
# site.pp
#

import "modules.pp"
import "templates.pp"
import "nodes.pp"

5. Installation / Download der Puppet Module:

In der “modules.pp” Datei werden bereits 2 Module importiert. Diese müssen nun installiert werden:

aptitude install git-core
git clone git://git.puppet.immerda.ch/module-common.git /etc/puppet/modules/common
git clone git://git.puppet.immerda.ch/module-user.git /etc/puppet/modules/user

6. Benutzer anlegen

“/etc/puppet/modules/user/manifests/admins.pp”:

#
# admins.pp
#

class user::admins inherits user::virtual {

realize (
    User["sebastian"],
    User["demo"]
)
User["sebastian"]{ groups => admin }
User["demo"]{ groups => admin }

}

“/etc/puppet/modules/user/manifests/virtual.pp”:

#
# virtual.pp
#

class user::virtual {

    @user { "sebastian":
        ensure          => present,
        uid               => 1000,
        gid               => "users",
        comment       => "Sebastian",
        home            => "/home/sebastian",
        shell             =>"/bin/bash",
        managehome => true,
        password       => 'ENCRYPTED PASSWORD',
    }

    @user { "demo":
        ensure          => present,
        uid               => 1001,
        gid               => "users",
        comment       => "Demo",
        home            => "/home/demo",
        shell             => "/bin/bash",
        managehome => true,
        password      => 'ENCRYPTED PASSWORD',
    }

}

Das “ENCRYPTED PASSWORD” kann man zum Beispiel aus einem bestehenden Eintrag in “/etc/shadow” entnehmen.

Alternativ findet man hier einen Blogeintrag, mit dessen Hilfe man das verschlüsselte Passwort ohne ‘passwd‘ erzeugen kann:

http://www.raskas.be/blog/2007/09/15/manual-encrypting-your-shadow-password

Hier nur der Vollstänigkeit halber:

echo "CLEAR PASSWORD" | perl -nle 'print crypt($_, "\$1\$".join "", (".", "/", 0..9, "A".."Z", "a".."z")[rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64]);'

, , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.