Autor Thema: Herausfinden, ob ein User schon existiert  (Gelesen 3388 mal)

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Herausfinden, ob ein User schon existiert
« am: 13. Mai 2004, 01:24:50 »
Hallo

Ich bastel grad an neuen Solaris Paketen herum und möchte jetzt Abhängigkeiten und die Systemkonfiguration für das Programm mit ins Paket hineinbringen. Auf deutsch: ich will ordentliche Pakete machen.

Nun habe ich hier zum Beispiel vsftpd (der einzig wahre FTP Server) und für ihn ist es wichtig, dass der User "ftp" existiert und ein Homeverzeichnis hat. Nun muss ich mit einem Shellskript überprüfen, ob der User "ftp" schon vorhanden ist, oder neu erstellt werden muss.
Ich hab schon mit test und grep herumexperimentiert und die man-Files durchgewühlt, aber ich habe nix gefunden, was mir mit Sicherheit sagt, dass der User "ftp" existiert. Mit grep könnte man zwar testen, ob es einen User gibt, der die Zeichenkette "ftp" enthält, aber dann würde das Skript ja uch auf User reinfallen, die z.B. "web-ftp" oder so heißen.

Für Vorschläge bin ich dankbar.

Mfg. Erisch

PS: Wenn die Pakete dann alle soweit sind, stell ich sie natürlich auch online zur Verfügung ;)

sonnenblen.de - Das unabhängige Sun User Forum

Herausfinden, ob ein User schon existiert
« am: 13. Mai 2004, 01:24:50 »

SmellyCat

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #1 am: 13. Mai 2004, 02:08:21 »
Hallo,

Denkfehler meinerseits oder hast Du /etc/passwd übersehen? Existiert der User ist er darin gelistet, entweder per 'grep' oder per Datei in ein Perl Script laden kann man die Abfrage in ein Programm einbinden.

Da Du das Problem mit einer eindeutigen Definition von "ftp" hast würde ich ein Perl Script nehmen - definiere die Datei als Array:
Datei laden, /usr/passwd = @user, suche nach allen Zeilen die mit 'ftp:' beginnen, suche weiter nach ':Zahl:Zahl:Pfad' und schon weisst Du ob es der gesuchte ist, ob er sein Home hat und wo es sein sollte, das zu checken ist dann auch nicht weiter schwer.

Das letzte Perl-Script ist schon etwas her, daher kann ich Dir keinen kompletten Code liefern, mir fällt z. B. nicht mehr der Befehl ein mit dem man Dateien ausliesst, aber das ist eine Arbeit die man auch als totaler Perl Newbie in 2 - 3 h ohne weiteres schafft... im Web gibt es viele gute deutsche Tutorials - musst nur Google bemühen ;)

Keine Antwort sondern Interesse:
Wie kann man Dependencies definieren? Ich habe vlc hier und von dem hängen gut 10 libs ab... ;)

Ach ja - wenn es bald mal rennt und Du willst haben Deine Pkgs bei baking-unix.net ein zu Hause.

Ach ja (grossen Dank an Jerry Mäuschen ;D ) der anonymous Login rennt endlich:

ftp.baking-unix.net - wer sich gütlich tun will...

Das WebFTP Upload Script ist aber noch hinten angestellt, erst haben wir noch 2 anderen Sonnenblen.de bezogen Projekte abzuarbeiten, dann folgt das CMS System so wie ein WebFTP Upload für baking-unix.net

Wer schon was hochladen will soll sich melden, derjenige bekommt nen Upload FTP Account, einige haben schon einen hier.

bye
Mats
« Letzte Änderung: 13. Mai 2004, 02:08:37 von SmellyCat »

hplehner

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #2 am: 13. Mai 2004, 02:11:41 »
Hi Eirsch,

guckst du Manpage von:

auths - print authorizations granted to a user

Der meckert wenn es den User nicht gibt, was wiederum per $? abfragbar ist.

Gruß
Hans-Peter

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Herausfinden, ob ein User schon existiert
« Antwort #3 am: 13. Mai 2004, 02:16:24 »
Problem 1: Ich kann kein Perl (könnt ich aber lernen ;))
Problem 2: Das Skript was beim pkgadd audgeführt wird ist festgelegt, und es ist ein Shellskript.

Zu den Depends:

Du kennst ja sicher die Dateien für pkginfo oder post/preinstall. Ganauso gibt es eine Date "depend" in der die Dependencies aufgelistet sind.
Dann gibt es auch noch ein "checkinstall" und "request" Skript. Ersteres liest Infos aus dem system die vielleicht wichtig sind und zweiteres ist für die User Interaktion. Genau dieses möchte ich verwenden um das mit dem User "ftp" herauszufinden um dann den Insatllierenden fragen, welches Verzeichnis er gern als ftp-Verzeichnis hätte.

Eine genaue Anleitung zum Pakete-Basteln gibts hier:
http://docs.sun.com/db/doc/817-1778/6mhg3b153?a=view

Mfg. Erisch

cutoff

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #4 am: 13. Mai 2004, 16:48:54 »
hmm,

bin mit shellscripten ja garnicht bewandelt, aber ein wenig muss man sich ja immer mit auseinandersetzen  ;)

wenn du einen user mit einem eindeutigen homeverzeichnis anlegst (z.b. /export/home/ftp), koenntest du doch mit einer typischen shellscripting bedingungspruefung das vorhandensein des users feststellen: if [-d /export/home/ftp].

oder du koenntest ja auch das command "id <username>" nutzen und den output nach dem zeichen "=" durchsuchen.
ist dies true, existiert dieser user.

ich hoffe ich habe mich jetzt nicht auf die knochen blamiert
;D

so long
cutoff

chaos

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #5 am: 13. Mai 2004, 17:01:27 »
Was spricht gegen ein grep auf /etc/passwd, oder hab ich irgendetwas verpasst?

dr._hotte

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #6 am: 13. Mai 2004, 19:18:27 »
Zitat

Was spricht gegen ein grep auf /etc/passwd, oder hab ich irgendetwas verpasst?



Nichts. Im uebrigen ist grep "^ftp:" /etc/passwd > /dev/null 2>&1
ein guter Start, um via $? herauszubekommen, ob so ein
User existent ist.

Ausser, es existiert beispielsweise eine Userauthentifikation via pam und ldap.


doc hotte
« Letzte Änderung: 13. Mai 2004, 19:29:27 von dr._hotte »

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Herausfinden, ob ein User schon existiert
« Antwort #7 am: 13. Mai 2004, 23:14:29 »

Zitat




Nichts. Im uebrigen ist grep "^ftp:" /etc/passwd > /dev/null 2>&1
ein guter Start, um via $? herauszubekommen, ob so ein
User existent ist.

Ausser, es existiert beispielsweise eine Userauthentifikation via pam und ldap.


doc hotte


Perfekt, Danke!

Genau das hab ich gesucht. Ich bin nicht so bewandert im Shell-Skripting.
Für alle die jetzt nicht wissen wies funktioniert (wie ich, bevor ichs ausprobiert habe):
wird die Zeichenkette "ftp:" gefunden, die am Zeilenanfang steht, wird $? = 0, ansonsten 1.

Was mich wundert, im man-File von grep stand, dass man nen Zeilenanfang mit "\<" definiert, aber wahrscheinlich hab ich das falsch verstanden.

Auf diese Spezialfälle mit PAM und ldap werde ich mal verzichten, man muss es ja nicht übertreiben.

Mfg. Erisch

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Herausfinden, ob ein User schon existiert
« Antwort #8 am: 14. Mai 2004, 00:36:03 »
Manometer ;D

Ich hab mich jetzt durch ne awk Anleitung gewühlt und hab jetzt zwar Kopfschmerzen, kann aber jetzt auch das home-Verzeichnis des ftp-Users auslesen. Somit kann ich dem Installierenden sogar anbieten, ein evtl. vorhandenes ftp-Verzeichnis zu benutzen. Folgender Befehl gibt mir das home-Verzeichnis von ftp:

grep "^ftp:" /etc/passwd | awk -F: '{print $6}'

Mfg. Erisch

PS: Wer zu Hölle hat sich dieses awk ausgedacht ... ;)

mvsparky

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #9 am: 14. Mai 2004, 01:20:29 »
Zitat

PS: Wer zu Hölle hat sich dieses awk ausgedacht ... ;)

A. V. Aho, B. W. Kernighan, P. J. Weinberger  ;D

gruß
yves
« Letzte Änderung: 14. Mai 2004, 01:20:46 von mvsparky »

sonnenblen.de - Das unabhängige Sun User Forum

Re: Herausfinden, ob ein User schon existiert
« Antwort #9 am: 14. Mai 2004, 01:20:29 »

Offline erisch

  • Moderatoren
  • Sobl Guru
  • *****
  • Beiträge: 758
  • TurboSPAAAAAG
    • erisch.homeunix.net
Re: Herausfinden, ob ein User schon existiert
« Antwort #10 am: 14. Mai 2004, 02:12:32 »

Zitat


A. V. Aho, B. W. Kernighan, P. J. Weinberger  ;D

gruß
yves



Wenn, dann schon in der richtigen Reihenfolge: heißt ja nicht akw ;D ;)

Mfg. Erisch

PS: War ne rethorische Frage

dr_hotte

  • Gast
Re: Herausfinden, ob ein User schon existiert
« Antwort #11 am: 14. Mai 2004, 03:31:02 »

Zitat

Manometer ;D

grep "^ftp:" /etc/passwd | awk -F: '{print $6}'

PS: Wer zu Hölle hat sich dieses awk ausgedacht ... ;)


Kernighan war an der Unix Ur-Implementation und an C beteiligt, von Aho gibt es ein bekanntes Buch zum Compilerbau. Also keine so ganz unbekannten ;-))

Dein Konstrukt laesst sich etwas schoener formulieren:

awk -F: -v suser="${suser}" '/$1==suser/ { print $6 } ' /etc/passwd

Dabei wird die AWK-Variable suser mit der Shell-Variable belegt. Der Ausdruck /.../ ersetzt den grep. Du sparst eine Subshell ein.

doc hotte

P.S. im O'reilly verlag gibt mit "effektive awk programming" ein
gutes Buch zum Thema awk.