User since
2005-07-25
65
Artikel
BenutzerIn
Habe ein Perl-CGI Script geschrieben, welches unter Anderem auf die /etc/shadow (Debian GNU/Linux) zugreift. Lokal, also als root angemeldet funzt die Sache, doch wenn ich das Script über den Apache 1.3 mit SuExec und Perl v5.8.4 laufen lasse (user: www-data (Apache), group: www-data), erahlte ich einen Internen Server Fehler, genauer gesagt:
'Cannot do setuid (cannot exec sperl)' aus der apache error.log
Die Dateiberechtigungen sind wie folgt gesetzt:
-rwsr-xr-x (u: root g: root) script.pl
Ein CGI, geschrieben in C++, läuft mit identischen Dateiberechtigungattributen problemlos (welches auch auf die /etc/shadow zugreift und dem user/gruppe root gehört).
Wie kann ich also das Script mit su-Privilegien ausführen, und zwar nur Dieses, ohne gleich der ganzen virtuellen Domäne jene Rechte geben zu müssen?
User since
2003-08-04
5246
Artikel
ModeratorIn
als welcher user laeuft das script? wenn es wwwrun ist, dann teste mal als root:
und du erfaehrst vielleicht mehr
User since
2005-07-25
65
Artikel
BenutzerIn
läuft als www-data, doch da setuid = root sollte es egal sein
User since
2003-08-14
2022
Artikel
BenutzerIn
Oder trage www-data als in /etc/sudoers für dieses Skript ein.
User since
2005-04-13
625
Artikel
BenutzerIn
Der wohl dem webserver am liebsten Weg wird denk ich mal suExec sein!
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
http://perl-tutor.de
User since
2005-07-25
65
Artikel
BenutzerIn
Wie bereits erklärt, läuft das Script per Apache-suEXEC und gehört user/gruppe root, sodass durch suEXEC das Script mit den Rechten des Scripts gestartet wird und nicht mit denen des Apache-HTTP-Servers. Zusätzlich habe ich auch versucht das suid-Bit zu setzen (oben gezeigt), doch das hat ebenfalls nicht geholfen.
???
User since
2004-07-19
1776
Artikel
HausmeisterIn
Unter Linux hat das setzen des SUID-Bits bei einem Skript auch keinerlei Funktion...
When C++ is your hammer, every problem looks like your thumb.
User since
2005-07-25
65
Artikel
BenutzerIn
Genau das ist ja mein Dilemma: SUID-Bit fürs Perl-Script funzt net, doch wenn das Script einem SU gehört und ich Apache mit SuEXEC laufen hab, dann müsste das Script mit den Rechten des Scriptbesitzers ausgeführt werden. Doch leider, leider lässt es suEXEC nicht zu ein CGI mit su-Rechten zu starten.
Wie kann ich also ein CGI mit su-Rechten zum Laufen kriegen, und trotzdem suEXEC einsetzen?
User since
2005-07-25
65
Artikel
BenutzerIn
Vielen Dank für die Hilfe, doch ich habe die Lösung:
1. Möglichkeit:
Kernel mit suid-Bit Fkt für Scripte backen
2. Möglichkeit:
nicht /usr/bin/perl, sondern /usr/bin/suidperl verwenden (Perl-suid)
letztere Möglichkeit habe ich verwendet und es funzt prächtig
mfg