Mit folgendem Module kann ein User incl. Gruppe und Gruppenzugehörigkeit angelegt werden. Außerdem wird ihm direkt ein ssh-key hinterlegt:
Zuerst muss der entsprechende Ordner angelegt werden:
class user_shellmann { group { 'shellmann': ensure => present, gid => 1000 } user { 'shellmann': ensure => present, require => Group['shellmann'], gid => 'shellmann', groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',], shell => '/bin/bash', home => '/home/shellmann', purge_ssh_keys => true, } ssh_authorized_key { 'private': user => 'shellmann', type => 'ssh-rsa', key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', } }
Damit man dem Benutzer z.B. eigene Config Dateien zur Verfügung zu stellen, sollte vorher der Fileserver in Puppet konfiguriert werden.
# This file consists of arbitrarily named sections/modules # defining where files are served from and to whom # Define a section 'files' # Adapt the allow/deny settings to your needs. Order # for allow/deny does not matter, allow always takes precedence # over deny [dotfiles] path /mnt/puppet_dotfiles allow puppetclient.home [plugins] # allow *.example.com # deny *.evil.example.com # allow 192.168.0.0/24
Über die allow Direktive kann man den Zugriff reglementieren. Bisher habe ich noch keine Möglichkeit gefunden ganze Netze frei zugeben. Im Netz taucht hier oft allow_ip auf. Dies funktionierte bei meinen Tests aber genau so wenig wie allow.
Die Manifest wird dann wie folgt erweitert:
class user_shellmann { group { 'shellmann': ensure => present, gid => 1000 } user { 'shellmann': ensure => present, require => Group['shellmann'], gid => 'shellmann', groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',], shell => '/bin/bash', home => '/home/shellmann', purge_ssh_keys => true, } ssh_authorized_key { 'private': user => 'shellmann', type => 'ssh-rsa', key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', } file {'/home/shellmann/.vimrc': ensure => 'file', mode => '0660', owner => 'shellmann', group => 'shellmann', source => 'puppet:///dotfiles/user_shellmann/.vimrc', } }
In meiner persönlichen vim config sind ein paar Ordner definiert, die noch nicht existieren. Auch dabei kann uns puppet helfen.
class user_shellmann { group { 'shellmann': ensure => present, gid => 1000 } user { 'shellmann': ensure => present, require => Group['shellmann'], gid => 'shellmann', groups => ['sudo', 'cdrom', 'floppy', 'audio', 'dip', 'video', 'plugdev', 'netdev', 'bluetooth',], shell => '/bin/bash', home => '/home/shellmann', purge_ssh_keys => true, } ssh_authorized_key { 'private': user => 'shellmann', type => 'ssh-rsa', key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDSNp/edM111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111', } file {'/home/shellmann/.vimrc': ensure => 'file', mode => '0660', owner => 'shellmann', group => 'shellmann', source => 'puppet:///dotfiles/user_shellmann/.vimrc', } file { '/home/shellmann/.vim': ensure => 'directory', owner => 'shellmann', group => 'shellmann', mode => '0660', } file { '/home/shellmann/.vim/backup': ensure => 'directory', owner => 'shellmann', group => 'shellmann', mode => '0660', } file { '/home/shellmann/.vim/swap': ensure => 'directory', owner => 'shellmann', group => 'shellmann', mode => '0660', } }