Hallo Bernd, * Bernd Brodesser schrieb:
unter welchen Rechten läuft ein von procmail gestartetes Skript? Okay, unter dem Namen des Owner des Skriptes,
Wie kommst Du darauf?
Weil whoami -> gerlach ausgibt, siehe unten.
Mach mal id, der gibt mehr aus.
das gibt den gleichen User aus! Siehe unten.
Kann ja sein, daß der Prozeß und die Datei die gleiche UID haben. Aber das rührt nicht daher, sondern ist mehr oder weniger Zufall.
Glaube ich nicht. WEnn ich den Skript-owner auf egerl statt gerlach setze, bekomme ich die enstsprechenden Ausgaben: owner = gerlach: ^^^^^^^^^^^^^^^ rex:~ # cat /tmp/pwd gerlach (Ausgabe von whoami) ----- uid=500(gerlach) gid=100(users) (Ausgabe von id) owner = egerl: ^^^^^^^^^^^^^ rex:~ # cat /tmp/pwd egerl ----- uid=501(egerl) gid=100(users) soviel Zufall gibt's nicht! Ich glaube, da kannst Du auch noch dazulernen, Bernd!
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 Skript läuft unter dem, der es ausführt. In diesem Falle also unter dem gleichen, wie derjenige, der auch procmail ausführt.
Und wer ist procmail ? Welcher user? Habe Suse 7.2, weiß Du es?
Nö, woher soll ich wissen, wer bei Dir procmail aufruft. Ich mache das per fetchmail.
Mit ist eingefallen, daß procmail sich beim Aufruf von "sendmail -q -v" vom root in Bewegung setzt. Also ruft wohl root procmail auf. Oder??? Also läuft procmail als user root! Widerspruch zu Ausgabe von ID und whoami. WER KANN HIER WEITERHELFEN ????
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?
das nicht sein. Wäre aber auch sehr ungewöhnlich, sowas macht eigentlich nur init.
(Die Frage mag dumm klingen, aber ich weiß es wirklich nicht! Irgendein Howto, man-Seite oder so parat ? Man sudo kenne ich und verstehe es halbwegs. Allerdings stehen da keine Zusammenhänge mit Skripten, die von ?? getartet wurden.)
So funktioniert sudo. Da muß ein sudo davor, wie sonst könnte sudo funktionieren?
Woher weiß sudo dann, daß er die Superuserrechte, die nur gerlach
Das Skript wird immer als denjenigen ausggeführt, der es gestartet hat. Genauer, die shell, die das Skript ausführt, hat den gleichen realen und effektiven UID wie der aufrufende Prozess.
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.
aber die REchte des Owners hat es wohl nicht:
Doch.
warum gibt dann whoami -> gerlach aus? Wenn ich den Owner des Skriptes auf einen anderen user "Testuser" setze, dann ist whoami -> "Testuser". Deshalb habe ich darauf geschlossen. Habe mich allerdings auch schon gewundert, wie ein procmail Prozess einfach so die Rechte von gerlach oder Testuser ergreifen kann.
Das wäre der typische Fall, wenn das SUID-Bit des Skriptes gesetzt wäre, nur bei Skripten funktioniert das SUID-Bit nicht. Also auch wenn es gesetzt ist, nutzt es nichts. Vielleicht macht whoami ja Mist.
ID gibt den gleichen "Mist" aus.
procmail startet in /home/gerlach/.procmailrc
:0 H * Subject: test | /usr/local/bin/myskript
das Skript myskript: (-rwxr-xr-x 1 gerlach users 613 Feb 25 19:02 myskript)
Darf jeder ausführen, also auch procmail, egal unter welchem User.
#!/bin/sh /usr/bin/whoami > /tmp/pwd ^^^^^^^--- das gibt den Namen des owners des Skriptes aus.
/usr/bin/id >> /tmp/pwd
echo "Hallo" > /dev/tty10 sudo /usr/sbin/isdnctrl dial ippp0
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 .. 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 Also tatsächlich gerlach. Wenn das Skript dem owner egerl bekommt, dann ist unter top "egerl" angezeigt! hier ahne ich mittlerweile auch warum ein "sudo" erforderlich ist und sonst nicht: ich habe bei isdnctrl schon seit Wochen das SUID gesetzt. Deshalb ist es von beliebigen user-Shells aus isdnctrl nutzbar. Da das Skript mit der ID des owner "gerlach" ausgeführt wird, aber im Skript nicht mit vollständigen Rechten von gerlach ausgeführt wird, muß sudo her um das irgendwie zu bekräftigen. Ohne sudo ist isdnctrl im Skript nicht startbar, auch wenn isdnctrl das SUID-Bit gesetzt hat. Und wenn isdnctrl dann mit sudo startbar ist, dann ist zusätzlich das SUID5 erforderlich, weil isdnctrl auf /dev/isdninfo zugreift. Dazu reicht sudo offenbar nicht aus (die Rechte gelten nur für den Befehl isdnctrl und sind keine Identität "root" wie das das SUID macht. ($:~ > ls /dev/isdninfo -l cr--r--r-- 1 root root 45, 255 Mai 12 2001 /dev/isdninfo) JEtzt würde mich noch interessieren, wie ich im Skript eine Ausgabe auf /dev/tty11 machen kann. User gerlach darf das von einem xterm aus, nicht aber im Skript, obwohl das unter seinem Namen läuft. 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 ...
Woher weiß sudo dann, daß er die Superuserrechte, die nur gerlach an isdnctrl hat, benutzen darf? Davon, daß gerlach der owner des Skriptes ist?
Nein, weil es so im /etc/sudoers eingetragen hast. Vielleicht hast Du auch ALL eingetragen Ja und der User darf dann alle Superuserbefehle mit einem sudo davor ausführen. Nein! getestet:
gerlach@rex:$ sudo /sbin/fdisk Sorry, user gerlach is not allowed to execute '/sbin/fdisk' as root on rex. Erst wenn in sudoers steht: gerlach ALL=(ALL) NOPASSWD: /sbin/fdisk dann darf user gerlach fdisk benutzen. ALL ist *KEIN* Freibrief für alle root-Kommandos.
Ein NOPASSWD wirst Du ihm auch mitgegeben haben, sonst hätte er ja nach dem Passwort gefragt. Ja.
Hat nichts damit zu tun, wem die Datei gehört. Wem eine Datei gehört ist irrelevant, außer das SUID-Bit ist gesetzt und für wem welche Rechte zählen, aber wenn so wie so alle ausführen dürfen, ist es für die Ausführung irrelevant. Es wird immer mit der UID dessen ausgeführt, der es aufruft. Besser gesagt des Prozesses, der aufruft.
Diese Aussage stimmt bisher nicht. Vielleicht auch weil *doch* root der Initiator ist. Da wüßte ich gerne wie das funktioniert, dafür würde ich gerne mal ein Tutorial, HowTo, .. lesen. Aber scheinbar gibt es so etwas nicht. thx Ekkard