zu SUID

hoi

ich hock jetzt schon 2 Tage an einem Problem mit SUID dass ich einfach nicht lösen kann...

Ich hab mit in Perl ein kleines Script gechrieben, mit perlcc in Bytecode kompiliert, dem entsprechenden User gegeben und das SUID-Bit gesetzt (chmod 4755).

folgendes
Code:
#!/usr/bin/suidperl -U
print `whoami`;
print `echo \$(whoami)`;
print `./whoami.sh`;
print `whoami`;
Code:
#!/bin/bash
echo $(whoami)
(als Bytecode) ausgeführt unter dem user user1, in besitz von user2 macht folgene Ausgaben:
Code:
user2
user2
user1
user2

so wies aussieht wird also nur das aktuelle script durch dsa SUID-Bit unter anderem user ausgeführt.
Problem ist jetzt, dass ich das andere, externe Script nicht in die das Perlscript einbinden kann...

wenn ich dei datei dem user root gebe und die befehle mit su - user2 -c "befehl" bzw sudo -u user2 befehl ausführe funktioniert das ganze zwar von den Usern her, allerdings bekomme ich immer (trotz SUID:root) eine Passwortabfrage, weil su bzw sudo ja auch extere Dateien sind...

Einer ne Idee wie ich auch das externe Script als "SUID-User" (im Bsp user2) ausführen lassen kann?

[EDIT] ganz vergessen... OS ist Ubuntu 6.06
 
Ich weiß es jetzt selbst leider nicht faktisch, aber hast die Rechte am "subskript" liegen wohl bei User1? Ich schätze, das SUID-Bit wird aus Sicherheitsgründen an subalterne Dateien, die als Prozesse ausgeführt werden sollen, nicht vererbt. Also kein Bug, sondern eher (Security-)Feature
 
hmm ich glaub ich hab ne idee,
du darfst doch in dem Script weitere Rechte vergeben oder?
Wenn ja gib dem script was du ausführen willst doch auch ein SUID ohne machs hinterher wieder rückgängig!
 
Das Problem besteht darin, dass SUID nur an Binär-Dateien vergeben werden kann...

Das Subscript ist allerdings ein normales Shellscript, sprich Plaintext...

Gibt es eine Möglichkeit su bzw sudo in der genannten Datei ohne Passwortabfrage ausführen zu lassen, ohne die /etc/sudoers entsprechend bearbeiten zu müssen?

denn `su - user2 -c "befehl"` funktioniert soweit einwandfrei, bis eben auf die Passwortabfrage...

Das Script soll von jedem User gestartet werden können, was bedeuten würde dass ich jeden User in die sudoers eintragen müsste, was auch nicht gerade sicher wäre,
denn angenommen die Datei würde (wie auch immer) ausgetauscht werden, dann könnte theoretisch jeder jeden Befehl darin als root ausführen...
 
Du kannst du das Perl-Skript die UID wechseln lassen.

Code:
my $real_user_id       = $<; # original UID merken
my $effective_user_id  = $>; # original EUID merken
my $real_group_id      = $(; # original GID merken
my $effective_group_id = $); # original EGID merken
$<=$>=0;                     # zu root machen
$(=$)=0;                     # und natuerlich auch die root-GID annehmen
...
Perl-setuid-Code hier rein
...
# und die UIDs und GIDs zuruecksetzen
$< = $real_user_id;
$> = $effective_user_id;
$( = $real_group_id;
$) = $effective_group_id;

Das ganze mit setuid-perl ausfuehren und schon hast du ein setuid-Programm in Perl.
 
Zurück
Oben