"changepassword" auf FBSD portieren

hobby

#man women
hallo gemeinde :)

es gibt ein sehr nettes tool, welches die änderung von squid- (ncsa) und sambapasswörtern über ein cgi-script für user über http erlaubt:

http://changepassword.sourceforge.net/

leider passiert beim versuch es unter FreeBSD 5.3-RELEASE-p2 zu installieren folgendes...

ich kopiere euch mal die mail:

Hello Vinicius,
>
> i am really be sold on this great tool, but unfortunately it wont be
> work on my FreeBSD 5.3-RELEASE-p2 Sytem, with samba-3.0.9,1.
>
> After the following configure command:
> ---------------------------------------------------------
> ./configure --enable-cgidir=/usr/local/www/cgi-bin
> --enable-language=Deutsch
> --enable-smbpasswd=/usr/local/private/smbpasswd
> --enable-squidpasswd=/usr/local/etc/squid/proxy_users
> --enable-logo=server.jpg
> ----------------------------------------------------------
>
>
>
> i got the following make error:
> ----------------------------------------------------------
> [hobby@server]/usr/local/etc/test/changepassword-0.9# make
> gcc -c -o smbencrypt/SMBPasswdGen.o smbencrypt/SMBPasswdGen.c
> gcc -c -o smbencrypt/encrypt.o smbencrypt/encrypt.c
> gcc -c -o smbencrypt/md4.o smbencrypt/md4.c
> gcc -c -o smbencrypt/smbencrypt.o smbencrypt/smbencrypt.c
> gcc changepassword.c -o changepassword.cgi smbencrypt/SMBPasswdGen.o
> smbencrypt/md4.o smbencrypt/smbencrypt.o smbencrypt/encrypt.o -lcrypt
> -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\"
> -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DHAVE_LIBCRYPT=1
> -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1
> -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1
> -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1
> -DHAVE_UNISTD_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_STDIO_H=1
> -DHAVE_STRING_H=1 -DHAVE_STDLIB_H=1 -DHAVE_PWD_H=1 -DHAVE_ERRNO_H=1
> -DHAVE_SIGNAL_H=1 -DHAVE_TIME_H=1 -DDeutsch
> -DSMBPASSWD=\"/usr/local/private/smbpasswd\"
> -DSQUIDPASSWD=\"/usr/local/etc/squid/proxy_users\" -DLOGO=\"server.jpg\"
> -L./smbencrypt -ldes
> In file included from changepassword.c:46:
> defs.h:12:20: shadow.h: No such file or directory
> changepassword.c: In function `main':
> changepassword.c:182: warning: assignment makes pointer from integer
> without a cast
> changepassword.c:188: error: dereferencing pointer to incomplete type
> changepassword.c:188: error: dereferencing pointer to incomplete type
> changepassword.c:226: error: dereferencing pointer to incomplete type
> changepassword.c:229: error: dereferencing pointer to incomplete type
> changepassword.c:232: error: dereferencing pointer to incomplete type
> changepassword.c:235: error: dereferencing pointer to incomplete type
> changepassword.c:247: error: dereferencing pointer to incomplete type
> changepassword.c:260: error: dereferencing pointer to incomplete type
> changepassword.c: In function `clean_up':
> changepassword.c:332: error: dereferencing pointer to incomplete type
> changepassword.c:333: error: dereferencing pointer to incomplete type
> changepassword.c:334: error: dereferencing pointer to incomplete type
> changepassword.c:335: error: dereferencing pointer to incomplete type
> changepassword.c:336: error: dereferencing pointer to incomplete type
> changepassword.c:337: error: dereferencing pointer to incomplete type
> changepassword.c:338: error: dereferencing pointer to incomplete type
> changepassword.c:339: error: dereferencing pointer to incomplete type
> changepassword.c:340: error: dereferencing pointer to incomplete type
> changepassword.c: In function `changesmbpass':
> changepassword.c:429: error: dereferencing pointer to incomplete type
> *** Error code 1
>
> Stop in /usr/local/etc/test/changepassword-0.9.
> 2.01s real 1.57s user 0.25s sys
> Exit 1
> ----------------------------------------------------------
>
>
> It would be very very great of you, if you be able to help me?
> Maybe a error with wrong (freebsd) variables, that are set/required from
> your tool, but based on linux systems???
>
>
>
> Nice greetings and best regards from the actually sunny germany ;)
>
> Bye

und hier die antwort des developers oder supporters:

Hello Hobby, changepassword doesn't works on bsd systems because there
are no file /etc/shadow like linux. Passwords file of bsd is a little
different. Changepassword works only in Linux systems, I don't have any
bsd in my machine, so I can't develop a patch or write it to be
compatible with bsd.

Regards

Vinicius


meint ihr, das wäre zu schaffen?

mir fehlt leider das wissen dazu (noch), aber ich denke, dass an einem patch dafür, um es in die ports mit aufzunehmen, eine menge leute maybe auch interessiert sein dürften???

freue mich auf euer feedback
:-)

bye
 
Wo ist das Problem? Die master.passwd ist ausführlich dokumentiert.

Mal davon abgesehen kann man das auch ganz schnell selbst programmieren.
 
@p.h.

erstmal danke für deinen post, aber sehr produktiv ist er nicht finde ich;
ist ja schon mal gut zu wissen, dass deiner meinung nach "ganz schnell programmiert" ist, aber sehr viel weiterhelfen tut mir das leider nicht
:-(

wenn es so schnell geht, kannst du mir dann nicht ein wenig genauer helfen???

würde mir zumindest sehr nützen und ich wäre dir auch sehr dankbar ;-)
 
Der Hinweis auf master.passwd beantwortet deine Frage, wie du changepassword auf FreeBSD portieren kannst, vollständig. Was gibt es da also zu meckern?

Das selbstprogrammiert bezieht sich darauf, daß smbpasswd schon mit dem Schalter -s auf diesen Fall vorbereitet ist, und man das Ganze sogar mit einem Shell-Skript lösen könnte. Ich dachte, du hättest dich zumindest mal grundlegend über das Thema, an dem du herumpatchen willst, informiert!?
 
ok...der schalter -s ist klar, wg script, ohne output...

wg dem master.passwd man hast du recht, damit ich mich nicht bisher beschäftigt, weil mir leider der ansatzpunkt fehlte...

ich werde mich damit beschäftigen und bei eventuellen fragen mich nochmal melden...

danke trotzdem ersteinmal..

gute nacht
:)
 
Hmm, ich wußte doch, daß auf meiner Platte irgendwo noch ein Skript rumlag... Wenn man folgendes Skript als Login-Shell auf dem Server einträgt, muß sich der Anwender nur noch mittels ssh SERVERNAME verbinden und kann seine Paßwörter nach Belieben ändern:
Code:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

while /usr/bin/true
do
  echo -e "\nWählen Sie aus, welches Paßwort Sie ändern möchten:\n"
  echo "   1   UNIX-Paßwort"
  echo "   2   SAMBA-Paßwort"
  echo -e "\nJede andere Eingabe beendet die Anwendung."
  echo -e "\n===>   \c"
  read -e CHOICE

  echo

  case "$CHOICE" in
    1)  /usr/bin/passwd  ;;
    2)  /usr/local/bin/smbpasswd  ;;
    *)  exit  ;;
  esac
done
Das ist zwar jetzt mal total uncool, weil nicht über eine prollige Weboberfläche mit so einem tollen Logo, erfüllt seinen Zweck aber vielleicht eher noch besser: Kein Gefummel an der master.passwd, kein Parsen an smbpasswd(8), kein Geflicke in anderleuts C-Code. Warum man seine Paßwörter unbedingt über eine Weboberfläche ändern will, verstehe ich sowieso nicht wirklich.
 
Ich gehe doch schwer davon aus, daß das CGI-Skript nur über eine SSL-Verbindung erreichbar wäre. Alles andere wäre dermaßen fahrlässig, dafür müßte man erschossen werden.
 
@p.h.:

danke für deine mühe...aber leider nützt mir das nichts, da

1) meine samba user keinen zugang zum server haben
2) meine user auch nunja...so eine weboberfläche ist "einfacher" finde ich

allerdings möcjte ich nur sehr ungerne an der master.passwd rumspielen und werde denke ich mal die finger davon lassen...

trotzdem danke!

fröhliches schwitzen =)
 
hobby schrieb:
1) meine samba user keinen zugang zum server haben
Wenn du damit vollständigen Shell-Zugriff meinst, dann haben die das auch hinterher nicht. Die Login-Shell ist das Skript zum Paßwortändern, sonst können die auf dem Server nichts machen. Wenn du was anderes meinst, erkläre das bitte, denn Zugang zu einem Server hat man schon, wenn man z.B. per CIFS drauf zugreifen kann. Und das ist ja üblicherweise der Sinn eines Samba-Servers. Und wenn man per CIFS drauf zugreifen kann, kann man meistens auch vom Client sein Paßwort ändern (z.B. über das Fenster "Windows-Sicherheit").

Das UNIX-Paßwort, das z.B. für einige Proxies verwendet wird, kann man so natürlich nicht ändern. Entweder, man hat einen NIS-Client, oder man macht das üblicherweise mittels einer SSH-Sitzung. Naja, oder eben über ein CGI-Skript, aber ich würde wirklich davon abraten (s.u.).
hobby schrieb:
2) meine user auch nunja...so eine weboberfläche ist "einfacher" finde ich
Wieso sollte eine Weboberfläche einfacher sein? Kann ich gerade nicht wirklich nachvollziehen. Nur, weil man da was mit der Maus anklicken kann (obwohl TAB und ENTER in dem Formular auch ausreichend wären), wird das nicht automatisch "einfacher" oder gar "benutzerfreundlicher" (ein oft anzutreffender Trugschluß).

Mal ganz davon abgesehen muß das CGI-Skript mit root-Rechten laufen, die Sicherheitsprüfungen liegen alleine beim CGI-Skript - wenn man nicht höllisch aufpaßt, hat man einen offenen Server. Gerade ein C-Programm ist mal notorisch anfällig für Buffer Overflows, wenn man nicht genau weiß, was man da tut. Shell-Skripts sind nur eine Makrosprache, die man auch sehr leicht manipulieren kann, wenn man die Benutzereingaben nicht vorher separat auf Plausibilität überprüft. Schnell hat man mal was übersehen. Daher nimmt mein Shell-Skript auch keine sicherheitsrelevanten Eingaben entgegen, sondern überläßt das alles den bewährten, externen Anwendungen.
hobby schrieb:
allerdings möcjte ich nur sehr ungerne an der master.passwd rumspielen
Eben, würde ich auch nicht machen, deswegen verwendet man ja auch die altbewährten Programme zu diesem Zweck. Die funktionieren halt nur über eine interaktive Session - aber wo ist das Problem, dazu SSH und ein klitzekleines Shell-Skript als Login-Shell zu verwenden?
 
@p.h.:

nein, sorry, habe mich recht "kindergarten"-artig ausgedrückt ;-) richtig...meine user haben /nologin... aber habe das ganze nun anders gemacht...habe dein script ein wenig erweiter, damit ich dieses doofe cgi für das squid passwort net brauche....damit jetzt alle drei passwörter via ssh zu ändern sind:

Code:
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin

while /usr/bin/true
do
  echo -e " \n\n"
  echo -e "Bitte auswählen, welches Paßwort geändert werden soll:\n"
  echo -e "--> Hinweis: NIE nur ein Paßwort ändern, IMMER alle drei!\n"
  echo "   1   UNIX-Paßwort"
  echo "   2   SQUID-Paßwort"
  echo "   3   SAMBA-Paßwort"
  echo -e "\nJede andere Eingabe beendet die Anwendung."
  echo -e "\n===>   \c"
  read -e CHOICE

  echo

  case "$CHOICE" in
    1)  /usr/bin/passwd  ;;
    2)  htpasswd /usr/local/etc/squid/proxy_users $USER ;;
    3)  /usr/local/bin/smbpasswd  ;;
    *)  exit  ;;
  esac
done

allerdings geht der 2. punkt mit squid bzw htpasswd nicht....

habe ich was falsch gemacht, kann man das mit der $USER variable dort nicht so machen?

weil in einer shell normal geht es ja...dort allerdings nicht...!?!?!?

gute nacht allerseits.

:)
 
$USER ist definitiv gesetzt, kann also verwendet werden. Gibt mal den kompletten Pfad zum htpasswd-Binary an. Funktioniert es denn, wenn du dich als Nutzer (nicht root!) mittels einer interaktiven Shell auf dem Server anmeldest und genau diesen Befehl ausführst? Nicht, daß es an einem Rechteproblem liegt. Daneben müßte das Skript aber auf jeden Fall eine Fehlermeldung ausgespuckt haben?!

Übrigens kannst du deinen Squid auch gegen deinen PDC, sofern einer läuft, authentifizieren lassen. Deine Samba-Nutzer mußt du eh anlegen, aber du sparst dir das Anlegen der Squid-Nutzer und vor allem das Squid-Paßwort - es wird einfach das Samba-Paßwort verwendet. Wäre IMO mal eine Überlegung wert, da eine Vereinfachung für Admin und Anwender.
 
das problem ist, ich glaube squid kann sich nur gegen den PDC authentifizieren...nicht "nur" gegen einen sambauser, da man bei dem entsprechenden eintrag in der squid.conf dann den pdc namen angeben muss....
und da ich hier hauptsächlich xp home habe und imho auch keinen pdc wirklich brauche...doof das :-/

so, es lag daran, dass mein ncsa-auth file in /usr/local/etc/squid lag...(wg keinen zugriff auf die datei in dem verz.)

habe die auth datei jetzt nach /etc verschoben und alles läuft....

anscheinend habe ich gestern abend die fehlermeldung in meiner müdigkeit überlesen oder sowas in der art...

jetzt läuft alles!

ganze lieben dank an p.h. an dieser stelle!!!!
 
hobby schrieb:
das problem ist, ich glaube squid kann sich nur gegen den PDC authentifizieren...nicht "nur" gegen einen sambauser, da man bei dem entsprechenden eintrag in der squid.conf dann den pdc namen angeben muss....
Authentifizierung gegen einen PDC heißt, daß der Squid mittels des PDC die Berechtigung eines jeden einzelnen Benutzers überprüft. Die eingegebene Benutzername-Paßwort-Kombination wird nicht mehr gegen die eigene htpasswd-Datenbank geprüft, sondern die Korrektheit der Kombination wird vom PDC bestätigen lassen. In der Praxis erlaubst du damit den Netzzugang allen Benutzern, die ein gültiges Konto auf dem PDC haben und sich mit diesem und ihrem zugehörigen Samba-Paßwort beim Squid anmelden. Einzelne Benutzer kannst du dann immer noch mittels denyusers /usr/local/etc/squid/wir_müssen_drausen_bleiben aussperren.

hobby schrieb:
und da ich hier hauptsächlich xp home habe und imho auch keinen pdc wirklich brauche...doof das :-/
Du könntest trotzdem mal überlegen, ob ein PDC nicht doch sinnvoll wäre. Zwar kann das XP-Home-Gemurkse nix mit einem PDC anfangen, aber du ersparst dir zumindest die eigene Squid-Nutzerdatenbank - die Samba-Nutzer brauchst du so oder so. Und selbst bei XP Home solltest du die Samba-Paßwörter vom Client aus ändern können, oder? Dann sparst du dir mal direkt das komplette Skript, es gibt keinen Grund mehr, irgendwelche Paßwörter auf dem Server zu ändern.

Naja, ich mein, wenn's jetzt läuft, dann laß laufen ;)
 
p.h. schrieb:
In der Praxis erlaubst du damit den Netzzugang allen Benutzern, die ein gültiges Konto auf dem PDC haben und sich mit diesem und ihrem zugehörigen Samba-Paßwort beim Squid anmelden. Einzelne Benutzer kannst du dann immer noch mittels denyusers /usr/local/etc/squid/wir_müssen_drausen_bleiben aussperren.
danke erstmal auf jeden fall...ich werde das mal prüfen...aber glaube, es gab damals ein problem damit bei mir


Und selbst bei XP Home solltest du die Samba-Paßwörter vom Client aus ändern können, oder?


wie soll das gehen? Wenn, dann doch nur das lokale windows passwort. er ist ja nicht am pdc angemeldet, dann kann man vom (nichtangemeldetem) client auch glaub ich kein pw ändern...

Dann sparst du dir mal direkt das komplette Skript, es gibt keinen Grund mehr, irgendwelche Paßwörter auf dem Server zu ändern.

NIX! das script läuft jetzt super! und naja ok...das die user 3 pw ändern müssen...pff! ;-) bissl schwund is überall gell? ;)

aber ich werde trotzdem mal schauen....auf jedenfall gefällt mir das ganze jetzt sehr gut...ich fühle mich auch gleich viel sicherer, als mit der cgi geschichte...dem ganzen habe ich so oder so (zu recht) nicht ganz getraut...

ich melde mich, wenns mit samba auth. klappt ;)

ich schreibe gleich erstmal ein kl. howto über squid pools in bezug auf auth. user...
:)
 
Zurück
Oben