Schrift
[thread]540[/thread]

Cannot do setuid (cannot exec sperl): suid-bit set script



<< >> 9 Einträge, 1 Seite
pearl-man
 2005-08-01 17:18
#5352 #5352
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
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?
Strat
 2005-08-01 18:22
#5353 #5353
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
als welcher user laeuft das script? wenn es wwwrun ist, dann teste mal als root:
Code: (dl )
1
2
su - wwwrun
./script.pl

und du erfaehrst vielleicht mehr
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pearl-man
 2005-08-01 20:16
#5354 #5354
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
läuft als www-data, doch da setuid = root sollte es egal sein
Ronnie
 2005-08-01 21:02
#5355 #5355
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Oder trage www-data als in /etc/sudoers für dieses Skript ein.
J-jayz-Z
 2005-08-02 00:05
#5356 #5356
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
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
pearl-man
 2005-08-02 10:27
#5357 #5357
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
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.

???
murphy
 2005-08-02 20:25
#5358 #5358
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
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.
pearl-man
 2005-08-03 10:51
#5359 #5359
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
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?
pearl-man
 2005-08-03 13:22
#5360 #5360
User since
2005-07-25
65 Artikel
BenutzerIn
[default_avatar]
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
<< >> 9 Einträge, 1 Seite



View all threads created 2005-08-01 17:18.