Privates Block Device

Hi,

folgende Situation: Ich habe ein Block Device /dev/vg1/data-crypt, welches ich mit lukscrypt verschlüsselt habe. Ich möchte nun, dass ein normaler User in der Lage ist, das Block Device zu entschlüsseln und das dabei entstandene "entschlüsselte" Block Device _ohne root Rechte und ohne sudo_ mounten kann.

Was muss man dafür tun?

ciao
serow
 
Schreib einfach ein kleines Skript, das sich die root-Rechte via setuid holt. Als Eigentümer 'root' festlegen, suid-Bit setzen und schon können User die Befehle im Skript als root ausführen.

Code:
#!/usr/bin/perl

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

my $cmd = 'befehl zum mounten';
my $out = `$cmd`;
print $out;

# und die UIDs und GIDs zuruecksetzen
$< = $real_user_id;
$> = $effective_user_id;
$( = $real_group_id;
$) = $effective_group_id;
 
korrigiert mich wenn ich mich irre, aber "SUID + interpreted executable"

ist das nicht eine ziemlich unsichere idee ?

die meisten *NIX implementationen die ich kenne ignorieren SUID für scripts
 
Perl hat einige Sicherheitsfunktionen, die SetUID und SetGID betreffen.
Beispielsweise sind Variablen, die Benutzerparameter enthalten "tainted" und können nicht für einige kritische Operationen (z.B. Dateisystemzugriff) verwendet werden, bis sie explizit untainted werden. Dadurch sollen offensichtliche und dumme Fehler vermieden werden.
Trotzdem sollte man sich natürlich genau überlagen, was man tut.
http://www.cs.cmu.edu/afs/cs/user/rgs/mosaic/pl-suid.html

mfg, metax.
 
In dem Moment, wo das Skript lediglich einen Mount-Befehl ausführt, sehe ich keine Sicherheitsrisiken.

@GrafZahl: Theoretisch bringt das SUID-Bit bei Skripten nicht viel, da die meisten Skript-Sprachen es nicht einmal ermöglichen, dass man den User-Kontext wechselt, in dem das Skript läuft. Üblicherweise richten sich die Skripte dabei nach den Programmen, die sie ausführen und überlassen diesen das User-Handling. Perl stellt da neben einigen anderen Skript-Sprachen eine Ausnahme dar. Ausserdem muss der Perl-Interpreter mit SUID-Skripten umgehen können, also explizit dafür kompiliert sein, was er aber meiner Erfahrung nach auf den meisten Distros ist.
 
Zurück
Oben