so bin jetzt dahinter gekommen
be der Eingabe von "last" habe ich gesehn, dass die Einträge mit
gone - no logout gecancelt wurden.
somit war mir dann auch klar, warum der befehl nur mit . bzw. source funktioniert hatte: die laufente Shell-Umgebung blieb ja durch source bestehen!!
somit habe ich das Server script mit einer Endlosschleife versehen und vola. Hier nochmals die Scripts:
Auf dem Server (wo who die Anmeldungen anzeige soll)
/etc/inetd.conf anpassen
Code: Alles auswählen
9101 stream tcp nowait root /usr/local/bin/netlogon-server.pl netlogon-server.pl
wobei der port 9101 frei gewählt werden kann, der war bei mir frei.
führe
aus.
/usr/local/bin/netlogon-server.pl
Code: Alles auswählen
#!/usr/bin/perl
use IO::Socket::INET;
#Erstelle eine Zufallsdatei
$file=int(rand(1000000000)).".sh";
# Lese Übergabe
open(J,">/tmp/$file");
print J "#!/bin/sh\n\n";
while (<STDIN>) {
print J "$_";
}
# Melde User als angemeldet
print J "/usr/bin/sessreg -\$RMODUS -w /var/log/wtmp -u /var/run/utmp -x \$RX_SERVER -h \$RHOST -l \$RDISPLAY \$RUSER\n";
#Prüfe ob parameter d übergeben wurde, dann erstelle eine User-Datei und beende
print J "if [ \$RMODE == \"d\" ]; then touch /tmp/\$RUSER.rlogin; exit 0; fi\n";
# Solange bis User-Datei erstellt wurde, dann beenden
print J "while [ ! -f /tmp/\$RUSER.rlogin ]; do sleep 0.1; done \n";
print J "rm /tmp/\$RUSER.rlogin\n";
close J;
# Datei handling
system("chmod u+x /tmp/$file");
system("/tmp/$file");
# Lösche schrott
unlink("/tmp/$file");
exit 0;
Auf den Clients
/usr/local/bin/netlogon-client.pl
Code: Alles auswählen
#!/usr/bin/perl
use IO::Socket::INET;
# lese Parameter ein
$RSERVER=@ARGV[0];
$RPORT=@ARGV[1];
$RMODUS=@ARGV[2];
$RUSER=@ARGV[3];
$RX_SERVER=@ARGV[4];
$RHOST=@ARGV[5];
$RDISPLAY=@ARGV[6];
$ERROR=0;
$CLIENTSOECKET=new IO::Socket::INET->new(PeerPort=>$RPORT,Proto=>'tcp',PeerAddr=>$RSERVER) or $ERROR=1;
# Wenn Fehler breche ab
if ($ERROR > 0)
{
print "NO ACCESS to $SERVER:$PORT\n";
exit 1;
}
# Sende Daten an Server
$CLIENTSOECKET->send("RMODUS=$MODUS\n".
"RUSER=$USER\n".
"RX_SERVER=$X_SERVER\n".
"RHOST=$HOST\n".
"RDISPLAY=$DISPLAY\n");
exit 0;
/etc/gdm/PreSession/Default
suche nach
füge danach oder davor folgende Zeile ein
Code: Alles auswählen
/usr/local/bin/netlogon-client.pl meinserver 9101 "a" "$USER" "$X_SERVERS" "REMOTE_HOST" "$DISPLAY"
/etc/gdm/PostSession/Default
suche nach
füge danach oder davor folgende Zeile ein
Code: Alles auswählen
/usr/local/bin/netlogon-client.pl meinserver 9101 "d" "$USER" "$X_SERVERS" "REMOTE_HOST" "$DISPLAY"
Restarte gdm
melde Dich in der X an.
Das ganze kann matürlich auch für KDE oder andere Logon-Manager machen. Habe aber überall GDM drauf. Die shell wird von den anderen nicht genutzt daher habe ich das auch nicht in die bashrc eingetragen, ginge aber auch.
Wenn jetzt noch einer meint, warum ich nicht gleich xdmc benutze, möchte ich Ihm gesagt haben, dass wenn da mehre User dran Arbeiten, das kein Spass mehr macht. Nomachine hat das recht gut hinbekommen, aber die Lizenz erlaubt nur 2 oder 3 User, das ist zuwenig und für mehr zu teuer.
Ich werde jetzt, bevor ich das in betrieb nehme noch einige Sicherheitshürden einbauen, damit da mit Netzwerk-sniffern nichts passieren kann.