2016-04-11 2 views

Antwort

2

Wie immer gibt es eine große Vielfalt an Möglichkeiten :-) Here is, wie wir pro Benutzer Zugriff auf Knoten basierend auf einem users Datenbeutel konfigurieren.

  • Alle Benutzer mit group: sysadmin werden alle Knoten mit sudo Berechtigungen automatisch zugewiesen.
  • Alle anderen Benutzer werden aufgrund ihrer Zuordnung zu bestimmten Hosts hinzugefügt. Die users Datenbeutel wird für Elemente gesucht, die einen Eintrag für node['fqdn'] im "nodes" Schlüssel des Daten Beutel enthalten:
{ 
    "id": "a-srv123-admin", 
    ... 
    "nodes": { 
      "srv123.typo3.org": { 
        "sudo": "true" 
      } 
    } 
} 

Um einen Benutzer von allen Knoten zu entfernen, können action: remove eingestellt werden auf höchstem Niveau:

{ 
    "id": "a-user-to-remove", 
    "action": "remove" 
} 

um einen Benutzer von einem bestimmten Knoten zu entfernen, kann action: removeeingestellt werdenauf der Knotenebene:

{ 
    "id": "a-user-to-remove", 
    ... 
    "nodes": { 
      "srv123.typo3.org": { 
        "action": "remove" 
      } 
    } 
} 

Die implementation of this (nicht sehr sauber in Wahrheit, leider), sucht nur für alle mit dem node[fqdn] assoziiert Benutzer:

node_attribute = "fqdn" 
log "Searching for users associated with node #{node[node_attribute]}" 
begin 
    users = search(users_databag_name, "nodes:#{node[node_attribute]}") 
rescue Net::HTTPServerException 
    Chef::Log.warn "Searching for users in the 'users' databag failed, search for users associated with node '#{node[node_attribute]}'" 
    users = {} 
end 

users.each do |u| 
    node_options = u['nodes'][node[node_attribute]] 
    Chef::Log.info "Got node options: #{node_options}" 
    if u['action'] == "remove" || node_options['action'] == "remove" 
    user u['username'] ||= u['id'] do 
     action :remove 
    end 
    else 
    # snip... 

    # Create user object. 
    user u['username'] do 
     uid u['uid'] if u['uid'] 
     gid u['gid'] if u['gid'] 
     shell u['shell'] 
     comment u['comment'] 
     password u['password'] if u['password'] 
     supports manage_home: true 
     home home_dir 
     action u['action'] if u['action'] 
    end 

    # sudo management 
    if node_options['sudo'] == "true" 
     sudo u['username'] do 
     nopasswd true 
     user u['username'] 
     end 
    else 
     sudo u['username'] do 
     action :remove 
     end 
    end 
    end 
end 

EDIT: Seien Sie gewarnt, dass jeder Benutzer mit Der Zugriff auf das Client-Zertifikat von Chef kann Daten basierend auf den Daten des Clients abfragen. Dies kann Kennwörter enthalten, die in den Attributen anderer Knoten gespeichert sind. RBAC oder Cheftresor kann dies mildern.