Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Mit "newusers" mehr als eine Gruppe pro Nutzer zuweisen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    Mar 2015
    Beiträge
    18

    Mit "newusers" mehr als eine Gruppe pro Nutzer zuweisen?

    Hallo,

    ich muss über 50 Nutzer erstellen, von denen jeder mehreren Gruppen angehört. Dies wollte ich gerne mit dem Befehl newusers und einer entsprechenden Nutzerliste automatisiert ablaufen lassen. Dies scheint aber nur mit einer Gruppe pro Nutzer zu funktionieren. Die Auflistung mehrerer Gruppen mit Komma getrennt führt zu einer Fehlermeldung.
    Kennt vielleicht jemand einen Weg, um newusers auch für mehr als eine Gruppe pro Nutzer zu verwenden, oder einen anderen Befehl, mit dem ich diese Aufgabe automatisieren kann?

    Grüße.
    Geändert von luminox (22.05.15 um 12:37 Uhr)

  2. #2
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    newusers kann das nicht. Es kennt nur eine (Default)group.
    Ich kenne auch kein Tool, das das direkt macht.

    Ein Miniscript erledigt sowas.
    man 5 group spuckt das benötigte Format aus.

    Code:
    # Die Steuerdatei von newusers lesen.
    IFS=':' while read user_name dummy_passwd dummy_uid group_list  dummy_restofdata; do
        IFS=',' groups=(  $group_list )   # split groups into array "groups"
        for g in ${groups[*]}; do
            sed -i -r 's/(^'$g'.*$)/\1,'$user_name/'  /etc/group
        done
    done < $steuerdatei
    Der sed Befehl soll -inline arbeiten (also direkt in der Eingabedatei angewendet werden (mittels eines temporären Files)) mit -r eingeschalteten "Rexgexextended" (womit wir gruppierenden Klammern nicht \( schreiben müssen, sondern ein () genügt) und sed soll das sed Kommando substitute ausführen.
    s/suche/ersatz/
    Die Suche beginnt mit einer Gruppierungsklammer ( and am Anfang ^ der Zeile suchen wir die aktuelle Gruppe. Dazu escapen wir das sed Progrämmchen mit ' und lassen von der Bash den Variableninhalt von $g (also die aktuelle Group) einsetzen. Und springen wieder mit ' in den sed Befehl s///. Am Anfang der Zeile muss also der Gruppenname stehen. Und alles .* was danach bis zum Ende der Zeile $ kommt, gehört noch zur Gruppierung, weil jetzt erst die Gruppierung mit ) endet.
    Die Suche hätten wir damit definiert: Die komplette Zeile in /etc/groups, die mit unserer im aktuellen Schleifenlauf gefundender Gruppe beginnt.
    Die Suche /suche/ ist abgeschlossen und wir ersetzen die Zeile in /etc/group mit der gefundenen Gruppe Nummer \1 (also die ganze Zeile), fügen ein , ein und hängen noch den Usernamen an. Wozu wir erst wieder sed escapen ' die bash wieder den Inhalt der Variablen $user_name einsetzen lassen.
    Im Endeffekt haben wir den Usernamen einfach an die Gruppenzeile mit Komma angefügt.

    (Es ist übrigens falsch $user_name eine Variable zu nennen, das $ ist die Expansion der Variablen user_name. Nur der Lesbarkeit wegen so geschrieben.)

    Falls man das script öfter verwenden will, sollte man prüfen, ob die Gruppenzeile den Usernamen schon beinhaltet.
    Das Zeuchs nur runtergeschrieben, nicht getestet. Have fun.

    Nachtrag: Trotz des korrigierten Fehlers würde das Script laufen, da das ^$g eine Zeichenverkettung in der bash wäre, sed also dennoch das korrekte Suchmuster erhalten würde.
    Zwar ist in der Mathematik minus mal minus plus. Aber in der IT ist alles anders, als der gesunde Menschenverstand und Mathematik meinen. Da ergibt minus mal minus einen Fehler²
    Geändert von BetterWorld (28.05.15 um 12:33 Uhr) Grund: Fehler s/('^$g korrigiert zu s/(^'$g

  3. #3
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    evtl. wäre in dem Fall das Anlegen des Users mit der gewünschten "default"-Gruppe und direktes erweitern / ergänzen der Gruppen über usermod am sinnigsten.

    Mit obigem Script wäre ich vorsichtig, je nach dem, wie die Usernamen aussehen kann das böse in die Hose gehen.
    Ich bin root - ich darf das.

  4. #4
    Universaldilletant Avatar von fork
    Registriert seit
    Dec 2001
    Ort
    Frankfurt/Main
    Beiträge
    1.175
    Die Gruppen mit usermod nachzuziehen ist IMHO für Dich die beste Variante.

    Zum anlegen kannst Du auch alternativ noch useradd verwenden. Da musst Du Dir allerdings dann ein Script drum herum basteln. Das unterstützt sowohl das setzen der Primärgruppe, als auch die Angabe von Sekundärgruppen.
    Geändert von fork (28.05.15 um 00:02 Uhr)

  5. #5
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    Zitat Zitat von marce Beitrag anzeigen
    Mit obigem Script wäre ich vorsichtig, je nach dem, wie die Usernamen aussehen kann das böse in die Hose gehen.
    Da $user_name lediglich im "replace" des sed Befehls verwendet wird, ist es ziemlich egal, wie die Usernamen aussehen.
    Gültig sollten sie eh sein.
    Code:
    user@computer:/etc> man 8 useradd | sed -n '/Usernames must/,/32/p'
           Usernames must start with a lower case letter or an underscore, followed by lower case letters, digits,
           underscores, or dashes. They can end with a dollar sign. In regular expression terms:
           [a-z_][a-z0-9_-]*[$]?
    
           Usernames may only be up to 32 characters long.
    Was sollte da schiefgehen können?

    Code:
    echo "ein_User-Name?" |  sed -r 's/(^.*$)/\1b}la[bl{u\/ \bb*e.r/'
    ein_User-Name?b}la[bl{u/ bb*e.r
    Lediglich der "/" ist zu escapen, da er syntaktisch zum "s" Befehle gehört. Darf aber auch nicht Bestandteil eines Usernamens sein.
    Geändert von BetterWorld (28.05.15 um 11:58 Uhr)

  6. #6
    Registrierter Benutzer
    Registriert seit
    Dec 2003
    Ort
    Dettenhausen
    Beiträge
    22.061
    *argl* stimmt. Steht nur im Replace, nicht im Match. 4 Dinge parallel machen ist wohl doch nicht immer eine gute Idee.
    Ich bin root - ich darf das.

  7. #7
    Banned
    Registriert seit
    Feb 2005
    Beiträge
    1.151
    War trotzdem gut. Ich hab mein Script nochmal gelesen und prompt einen ziemlich üblen Fehler korrigieren können.

  8. #8
    Registrierter Benutzer
    Registriert seit
    Mar 2015
    Beiträge
    18
    Mal wieder "meld". Viel zu tun. Danke euch für die Ratschläge. An die Verwendung von newusers mit usermod hatte ich letztlich auch gedacht. Nur leider ärgert newusers bei einer Nutzerdatei mit mehr als einer Zeile, bzw. wenn davon mehr als einer nicht schon als Nutzer auf dem System eingerichtet sind, herum.

    Dann bekomme ich bei Verwendung von newusers das zu lesen:

    *** Error in `newusers': double free or corruption (!prev): 0x00007ff3c5a0d040 ***
    Abgebrochen


    Laut meiner Recherche scheint das ein Bug unter Debian 8 (Jessie) zu sein, der ca. seit Sommer 2014 bekannt ist.

    Kennt vielleicht jemand eine Lösung? Vom Schreiben eines eigenen "newusers" mal abgesehen.
    Geändert von luminox (19.06.15 um 17:59 Uhr)

Ähnliche Themen

  1. Suse 9.1 und "newusers"
    Von abeule im Forum Linux Allgemein
    Antworten: 7
    Letzter Beitrag: 18.03.11, 17:02
  2. Was machen wenn "Strg"+"Alt"+"F Tasten" auch nicht mehr funktioneren
    Von Commander Keen im Forum System installieren und konfigurieren
    Antworten: 2
    Letzter Beitrag: 01.05.05, 21:38
  3. irssi mehr als eine "autosendcmd" nachricht
    Von Dr. Scream im Forum Anwendungen Allgemein, Software
    Antworten: 3
    Letzter Beitrag: 17.02.05, 18:23
  4. An Nutzer des Mainboards "Elitegroup K7s5a"
    Von Malekith im Forum stationäre Hardware
    Antworten: 34
    Letzter Beitrag: 16.10.02, 10:56
  5. mal eine anfängerfrage zu den "routinen", "ix" 9 sep 2002, " debian gnu/li
    Von gizmo im Forum System installieren und konfigurieren
    Antworten: 3
    Letzter Beitrag: 22.08.02, 09:57

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •