useradd: unable to lock password file

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von weor, 28.07.2006.

  1. weor

    weor Mitglied

    Dabei seit:
    14.04.2005
    Beiträge:
    42
    Zustimmungen:
    0
    Ort:
    Dresden
    hallo!
    ich hab folgendes problem und wäre für jede hilfe dankbar
    wie die überschrift schon sagt erhalte ich diese fehlermeldung wenn ich versuche über ein script einen user anzulegen

    Code:
    useradd: unable to lock password file
    das script zum anlegen sieht so aus...

    Code:
    #!/bin/bash
    
    #set -x
    
    read line
    
    AUTH=`echo $line | cut -d: -f1`
    USR1=`echo $line | cut -d: -f2`
    PASS=`echo $line | cut -d: -f3`
    USR=`echo "$USR1" | tr -d ' =_$&][}{><▒▒▒▒▒▒\-%' | tr [A-Z] [a-z]`
    
    if [ "$AUTH" != "password" ];
    
        then
        echo " Passwort Falsch! Vorgang wird abgebrochen"
    
    elif [ "$USR" == "" ];
    
        then
        echo " kein Benutzername angegeben"
    
    elif [ "$PASS" == "" ];
    
        then
        echo " kein Passwort angegeben"
    
    elif [ "$USR" == "root" ];
    
        then
        echo " Was soll das??? root ist verboten und du darfst nicht alles"
    
    elif [ "$USR" == "admin" ];  # name hauptbenutzer aendern
    
        then
        echo " Was soll das??? Du darfst nicht alles"
    
    elif [ "$USR" == "`cat /etc/passwd | cut -d: -f1 | grep "$USR"`" ];
    
        then
        echo " Benutzer ist schon vorhanden"
    
        else
        useradd -G ftpuser -m -d /var/www/"$USR" -s /bin/false "$USR"
        echo "$USR":"$PASS" | chpasswd
        echo "$USR":"$PASS" >>/home/admin/list_ftp
    fi
    
    die ausgabe von useradd -D
    Code:
    GROUP=100
    HOME=/var/www/
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/sh
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=no
    
    dazu muss ich sagen das dieses script über einen port angesprochen wird
    also über eine webseite... mit fsockopen

    eintrag in inetd.conf
    Code:
    addftp          stream  tcp     nowait  root    /usr/sbin/tcpd  /home/admin/./addftp
    
    ok das wars erst mal zu den informationen...

    kann mir jemand sagen woran das liegen könnte das diese meldung kommt wenn ich das script nutze aber nicht wenn ich den befehl einfach so eingebe?

    besten dank
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. grey

    grey -=[GHOST]=-

    Dabei seit:
    28.07.2006
    Beiträge:
    303
    Zustimmungen:
    0
    Ich würde mal stark vermuten, daß es an fehlenden Rechten liegt.
    Wahrscheinlich wird das Script nicht als User root ausgeführt.

    Bau doch einen kleinen Test in dein Script ein und lass in einem für alle schreibbaren Ordner ein File erstellen und dann prüfe dort Owner, Group und Perms.
     
  4. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Das Skript muss als root laufen oder mit sudo aufgerufen werden. Der Webserver wird ja wahrscheinlich (oder besser gesagt hoffentlich) nicht als root laufen.
     
  5. #4 weor, 28.07.2006
    Zuletzt bearbeitet: 28.07.2006
    weor

    weor Mitglied

    Dabei seit:
    14.04.2005
    Beiträge:
    42
    Zustimmungen:
    0
    Ort:
    Dresden
    ok, hab das ganze nochmal überprüft...
    scheint wirklich ein problem mit den rechten zu sein...

    aber jetzt stellt sich mir die frage warum...

    das script wird ja nicht normal aufgerufen sondern als daemon ...
    der eintrag in die /etc/services
    Code:
    addftp          9222/tcp                        # anlegen
    
    das einzige wo jetzt der fehler liegen könnte wäre der eintrag in die
    /etc/inetd.conf
    der sieht jetzt so aus
    Code:
    addftp          stream  tcp     nowait  root    /usr/sbin/tcpd  /root/./addftp
    um genauer zu werden was da eigentlich passiert...
    das php-script auf der seite sendet 3 daten an den port 9222 auf dem rechner localhost

    1. ein passwort welches der user eingeben und welches im script abgeglichen wird variable AUTH
    2. den benutzernamen der in variable USR1
    3. das passwort welches der anzulegende benutzer bekommt variable 3

    verbindung mit telnet zu dem port geht auch...

    ps: dateirechte des scritps
    Code:
    -rwx------  1 root root 1062 2006-07-28 16:57 addftp
    vergessen... die meldung kommt nicht mehr... das script scheint durchzulaufen ohne wirklich was zu tun

    im anhang ist die index.php als zip
     

    Anhänge:

  6. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Du laesst ein Programm auf einem Server per inetd als root laufen? Hast du schonmal das Wort "Sicherheit" gehoert? Kein ueber das Netzwerk erreichbarer Daemon sollte als root laufen und erst recht nicht ueber inetd. Packe dir ein kleines PHP-Skript auf einen Webserver, sichere es durch eine htaccess- und eine htpasswd-Datei und starte das Skript aus PHP mit 'exec("sudo meinskript.sh")' (Webserver muss natuerlich fuer das Skript und die im Skript verwendeten Programme sudo-Rechte haben). Selbst das ist noch sicherer als irgendwas als root ueber inetd laufen zu lassen.
     
  7. weor

    weor Mitglied

    Dabei seit:
    14.04.2005
    Beiträge:
    42
    Zustimmungen:
    0
    Ort:
    Dresden
    ja, lasse ich so laufen wie du gesagt hast..

    /ironie an/ ja, von sicherheit hab ich schon gehört... soll ja auch verdammt wichtig sein.../ironie aus/

    der server steht in einem netzwerk was KEINE verbindung nach draußen hat und ist allein für solche experimente gedacht...
    also ist es erst mal halb so wild das er nicht so sicher ist.

    aber zum schluss das wichtigste... es läuft jetzt alles so wie es soll...
    hab die inetd.conf nochmal neu geladen, inetd neu gestartet und es ging immer noch nicht... aber!! nach nem neustart... who knows...

    also danke für die hilfe...
     
  8. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Ok, dann ist das was anderes. In einem abgeschlossenen LAN kann man sowas natuerlich machen.
     
  9. weor

    weor Mitglied

    Dabei seit:
    14.04.2005
    Beiträge:
    42
    Zustimmungen:
    0
    Ort:
    Dresden
    um das ganze jetzt mal zusammen zu fassen für den fall das das jemand mal braucht oder es weiter antwickeln will...
    mir fallen da schon die verschiedensten dinge ein...
    also hier die zusammenfassung...

    das script zum anlegen von benutzern
    addftp
    Code:
    #!/bin/bash
    
    #set -x
    
    read line
    
    AUTH=`echo $line | cut -d: -f1`
    USR1=`echo $line | cut -d: -f2`
    PASS=`echo $line | cut -d: -f3`
    USR=`echo "$USR1" | tr -d ' =_$&][}{><\-%' | tr [A-Z] [a-z]`
    
    if [ "$AUTH" != "password" ];
    
        then
        echo " Passwort Falsch! Vorgang wird abgebrochen"
    
    elif [ "$USR" == "" ];
    
        then
        echo " kein Benutzername angegeben"
    
    elif [ "$PASS" == "" ];
    
        then
        echo " kein Passwort angegeben"
    
    elif [ "$USR" == "root" ];
    
        then
        echo " Was soll das??? root ist verboten und du darfst nicht alles"
    
    elif [ "$USR" == "mein benutzername" ];  # name hauptbenutzer aendern
    
        then
        echo " Was soll das??? Du darfst nicht alles"
    
    elif [ "$USR" == "`cat /etc/passwd | cut -d: -f1 | grep "$USR"`" ];
    
        then
        echo " Benutzer ist schon vorhanden"
    
        else
        useradd -G ftpuser -m -d /home/ftp/"$USR" -s /bin/false "$USR"
        echo "$USR":"$PASS" | chpasswd
        echo "$USR":"$PASS" >>/root/list_ftp
    fi
    
    das script zum userlöschen...
    delftp
    Code:
    #!/bin/bash
    
    #set -x
    
    read line
    
    AUTH=`echo $line | cut -d: -f1`
    USR1=`echo $line | cut -d: -f2`
    USR=`echo "$USR1" | tr -d ' =_$%&][}{><\-!' | tr [A-Z] [a-z]`
    PAS=`echo $line | cut -d: -f3`
    ALL=`echo ""$USR":"$PAS""`
    
    if [ "$AUTH" != "password" ];
    
        then
        echo " Passwort falsch! Vorgang wird abgebrochen"
    
    elif [ "$USR" == "" ];
    
        then
        echo " kein Benutzername angegeben"
    
    elif [ "$USR" == "root" ];
    
        then
        echo " Was soll das??? root ist verboten"
    
    elif [ "$USR" == "mein benutzername" ];
    
        then
        echo " Was soll das??? Benutzer andre ist verboten"  # in hauptbenutzernamen aendern
    
    elif [ "$ALL" == "`cat /root/list_ftp | grep "$ALL"`" ];
    
        then
        userdel "$USR"
        rm -r -f /home/ftp/"$USR"
        `sed -i -e "/$ALL/d" /root/list_ftp`
        echo " Beutzer "$USR" geloescht"
    
        else
        echo " Benutzer "$USR" nicht vorhanden "
    
    fi
    
    dann eine datei erzeugen mit dem namen list_ftp

    addftp und delftp in inetd.conf eintragen...
    Code:
    addftp          stream  tcp     nowait  root    /usr/sbin/tcpd  /root/./addftp
    delftp          stream  tcp     nowait  root    /usr/sbin/tcpd  /root/./delftp
    eintrag in /etc/services
    Code:
    addftp          9222/tcp                        # anlegen
    delftp          9223/tcp                        # loeschen
    proftpd installieren
    gruppe ftpuser anlegen
    eintrag in proftpd.conf
    Code:
    User                            ftp
    Group                           ftpuser
    <Global>
    defaultroot ~ ftpuser
    </Global>
    
    telnet installieren

    index.php siehe anderes posting...

    so, kann zu anregungen und diskussionen dienen...
    weil für verbesserungen bin ich immer zu haben und so weiter

    ps: und wer fehler findet sollte diese posten...
    ach, und was ich nicht will ist ne grundsatzdiskusion
     
  10. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Ich wuerde den Spass ja wenigstens noch mit einem Login versehen, denn so ist es ja nur in einem LAN einsetzbar und dort hat man ja die Rechner eh meist vor Ort, so dass ein Skript in diesem Umfeld wenig Sinn macht. Dann kann man ja gleich zum entsprechenden Rechner gehen und die User anlegen.
     
  11. weor

    weor Mitglied

    Dabei seit:
    14.04.2005
    Beiträge:
    42
    Zustimmungen:
    0
    Ort:
    Dresden
    ja... ist ja auch so gedacht...
    nur war ich zu faul beim testen jedes mal das passwort einzugeben
    welches mit der variablen $AUTH übergeben und am anfang das scripts verglichen wird...
    zu meiner schande muss ich eingestehen das ich das feld welches für die übergabe der variablen zuständig ist (in der index.php) nicht erstellt hab, ich had das passwort gleich ins script geschrieben...
    gut, das muss ich noch ändern...

    um zu dem rechner zu gehen bin ich zu faul... :D
    gut, man könnte die datei noch in die htaccess verschieben...
    je nach dem wie sicher man das im netzwerk braucht...
     
  12. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Wenn man es sicher im Netzwerk braucht, nimmt man kein inetd. Da wird deine Loesung nicht wirklich weiter helfen. So sind z.B. keine Ueberpruefungen der String-Laengen drin u.ae., was die Sache natuerlich sehr DOS-anfaellig macht. Und inetd gilt allgemein nicht unbedingt als sicher.
     
  13. Lumpi

    Lumpi Haudegen

    Dabei seit:
    14.06.2006
    Beiträge:
    663
    Zustimmungen:
    0
    Ort:
    Dessau
    Ich verwende folgenden Code zum Erstellen von Lehrern


    Code:
    #!/bin/bash
    
    function lehreradd()
    {
    clear;										
    echo "Bereits vorhandene Lehrer:"
    echo;
    echo `ls /home/Lehrer`
    echo;
    echo "Bitte zum Abbruch 'e' (end) eingeben!"
    echo;
        u=									
        echo -e "Bitte den neuen Lehrer eingeben : \c   "				
        read u									
    						
    	if [ -z $u ]									
    	then	
            $function lehreradd								
    	    elif [ "$u" = "e" ]
        	    then
    	    clear;
        	    $function ausgang    
    fi
    
    if [ -d /home/Lehrer/$u ]							
    	then									
    	echo "Ein Lehrer mit dem Namen '$u' existiert bereits! "		
    	$funktion ausgang
    	else
    	    useradd -m -d /home/Lehrer/$u -s /bin/false -m -g lehrer -G schueler -c Lehrer $u
    	    chmod +700 /home/Lehrer/$u
    	    passwd $u
    	    smbpasswd $u
    	    clear;
    		echo;
    		echo "Der Lehrer $u wurde wurde angelegt!"
    fi;
    }
    Das ist nur eine Auskopplung und muß entsprechend angepasst werden.
    Des weiteren Administriere ich den gesammten Server mittels "Putty" und innerhalb eines LAN´s.

    Ebenso ist eine Prüfung im Script nötig die es nur dem Root ermöglicht User anzulegen.
    aber die ist ja schnell geschrieben....

    Ich bitte nachzusehen, das für die "alten Hasen" dieser Code vielleicht zu umständlich ist.
    Aber für meine Zwecke ist das voll ausreichend und erfüllt seine Funktion. :brav:

    Gruß Lumpi
     
  14. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Nein ist es nicht, da useradd nur durch root genutzt werden kann und (normalerweise) auch nur root Schreibrechte fuer die /etc/passwd hat. Laeuft sowas allerdings als Daemon ueber inetd (was man nicht tun sollte), muss eine solche Pruefung (idealerweise ein richtiger Login) eingefuegt werden. Und dann kann man ja gleich SSH nutzen. *find*
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. Lumpi

    Lumpi Haudegen

    Dabei seit:
    14.06.2006
    Beiträge:
    663
    Zustimmungen:
    0
    Ort:
    Dessau
    Natürlich hast du recht, aber ich bin der Ansicht, das Script sollte mir schon anzeigen, was los ist. Ich bevorzuge ein "sauberes" Ende *GRINS*

    Dazu muss ich noch erklären, dass das ganze Script auch beispielsweise die Verlinkung von den entsprechenden Klassensätzen auf die default-User der einzelnen Medienräume verwaltet.

    Dieses darf auch durch ausgesuchte Lehrer mit Zugriffsrechten auf den Server geschehen.

    Ich könnte zwar die ganzen Funktionen in einzelne Scripte splitten, aber bei der Menge von Passwörtern (78 PC´s, davon etliche mit wechselnden Passwörtern) und dann den Scripten brauche ich ein Kopf wie ein Pferd.
    Aber soviele Haare habe ich dann nicht zur Verfügung. 8)

    Gruß Lumpi
     
  17. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Nun, du sprachst lediglich von einer Ueberpruefung, die es nur root ermoeglicht User anzulegen und diese ist nunmal nicht notwendig.
     
Thema:

useradd: unable to lock password file

Die Seite wird geladen...

useradd: unable to lock password file - Ähnliche Themen

  1. useradd disabled-login geht das unter suse

    useradd disabled-login geht das unter suse: Hallo, ich versucher gerade einen User unter openSUSE anzulegen der sich allerdings nicht am System anmelden können darf. Unter debian kenne ich...
  2. useradd expiredate

    useradd expiredate: Hallo zusammen, an welcher Stelle kann ich das expiredate eine Benutzers ersehen? Ich habe einen angelegt, im Format JJJJ-MM-TT das scheint...
  3. useradd...

    useradd...: hi. habe folgendes problem, bzw frage. kann ich einen user anlegen, der wie ein ftp-account user nur in seinem ordner rechte hat und im...
  4. useraddscript

    useraddscript: Hat jemand von euch ein Script, welches den Befehl "useradd" nachstellt, also praktisch die übergebenen Parametern per Hand wie eingetippt in die...
  5. useradd problem

    useradd problem: erstmal Hi bin neu hier ;-) also ich möchte auf mein linux root nen neuen user adden dazu gebe ich useradd ein doch dann kommt das...