* Bernd Brodesser schrieb:
* Ekkard Gerlach schrieb am 28.Feb.2002:
* Bernd Brodesser schrieb:
owner = gerlach: ^^^^^^^^^^^^^^^ rex:~ # cat /tmp/pwd gerlach (Ausgabe von whoami) ----- uid=500(gerlach) gid=100(users) (Ausgabe von id)
Mehr gibt id nicht aus? Staun.
ohhh... gar nicht bemerkt daß ein /usr/bin/id >> /tmp/pwd im Skript weit weniger ausgibt als ein "id" an der Konsole. Ein id am xterm/ Konsole: uid=500(gerlach) gid=100(users) Gruppen=100(users),5(tty),14(uucp),16(dialout)
Ich glaube, da kannst Du auch noch dazulernen, Bernd!
Nun ja, ich habe dazugelernt, daß procmail den Owner verändert. Ein Skript kann das nicht. Das geht letztendlich nur mit dem Systemaufruf setuid oder mit dem SUID-Bit, letzteres aber nicht bei einem Skript. Folglich macht procmail ein setuid.
Natürlich nicht. Ein Skript beachtet nicht das SUID-Bit, und läuft daher *nicht* unter dem Namen des Besitzers, es sei den, derjenige, der es ausführt ist zufällig im ihm identisch.
offensichtlich läuft das Skript DOCH unter dem Namen des Skript-owners!
Das macht aber nicht der Kernel, sondern procmail
... ohhh ... diese Unterscheidung habe ich noch nie gemacht ..
Mit ist eingefallen, daß procmail sich beim Aufruf von "sendmail -q -v" vom root in Bewegung setzt. Also ruft wohl root procmail auf. Oder???
Muß schon root sein, sonst führt setuid nicht zum Erfolg.
Also läuft procmail als user root! Widerspruch zu Ausgabe von ID und whoami. WER KANN HIER WEITERHELFEN ????
Wo machst Du whoami? Offensichtlich führt procmail Unterprozesse als
direkt vor "id", siehe unten
ein anderer User aus. Das kann es aber nur, wenn es root ist.
mein Skript, das von /home/gerlach/.procmailrc aus gestartet wird : #!/bin/sh /usr/bin/whoami > /tmp/pwd echo "-----" >> /tmp/pwd /usr/bin/id >> /tmp/pwd # i=0 # for j in `seq 1 20000`; do # time=`/bin/date '+%H%M'` #done echo "Hallo" > /dev/tty10 echo "Hallo" > /dev/tty11 exit 0 Das auskommentierte ist eine lange Warteschleife, die viel Zeit läßt, unter top den user des Skriptes zu erkennen.
Genauer, es macht ein fork, und wenn beim fork eine 0 zurückgegeben wird, es sich also um das Kind handelt, dann wird zuerst ein setuid und ähnliche ausgeführt, dann erst ein exec..
Mach doch mal ein ps. Wer wird dann als Owner ausgegeben?
ebenso gerlach oder egerl, wie oben unter nutzung der for-Warteschleife unter top ersichtlich.
Kann natürlich auch ganz fieß da irgendetwas fest einprogrammiert sein, kann aber nur funktionieren, wenn es als root läuft. Da aber kein SUID gesetzt ist und Du es nicht als root aufrufst kann es auch
... es ist wohl DOCH root der Initiator. Wo bitte programmiert da Suse in ihrer Distri etwas ganz "fieß" ein?
Was hat SuSE damit zu tun? Die habe es nur auf der CD gepackt. Wie habe ich oben beschrieben. Das haben die Programmierer von procmail gemacht.
.. ach so tiefgründig ist das vielleicht verankert ...
das nicht sein. Wäre aber auch sehr ungewöhnlich, sowas macht eigentlich nur init.
Offensichtlich doch nicht.
Gut, wenn von root der Start von Procmail ausgeht, dann müßte das Skript, das von procmail aus aufgerufen wird, auch unter root-Rechten laufen. Das ist aber tatsächlich nicht so. ID und whoami nennen klar den Owner des Skriptes und nicht root.
procmail setzt es halt anders.
Habe in mein Skript eine Schleife eingebaut, um das Skript lange mit sich selber zu beschäftigen:
for j in `seq 1 20000`; do time=`/bin/date '+%H%M'` done
warum machst Du nicht einfach ein sleep?
weile es dann nicht mehr unter top an oberer Stelle erscheint.
.. und prompt bekommen ich über top den owner heraus:
3108 gerlach 9 0 1772 1772 892 S 3.1 0.6 0:00 sss_fetch
und was sagt top zu procmail? Wenn was anderes als root, würde es mir stark wundern.
das "erwische" ich nicht. Es ist einfach zu schnell beendet. Gibt es da ein tool, das alle Prozesse aufzeichnet?
Eigentlich interessiert mich allgemein, unter welchem User das von procmail gestartet Skript nu wirklich läuft. Diese try-and-error erinnert mich zu sehr an M$. Ich werde langsam sauer ...
Schau Dir die Quellen von procmail an.
Also gut, procmail ist ein Sonderfall. Jetzt will ich ich aber immer noch in dem procmail-Skript eine Ausgabe auf /dev/tty11 machen und darf es nicht obwohl das Skript uid=500 (gerlach) und gerlach von einem xterm das darf. Eine Lösung? thx Ekkard