Perl/CGI-Skript, das /root-Rechte hat

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Perl/CGI-Skript, das /root-Rechte hat

Beitrag von Columbus » 09.03.2006 15:34:29

Hallo zusammen, ich bin gerade dabei ein CGI-Skript zu schreiben, mit dem es möglich sein soll webseitig adminstrative Aufgaben auf dem Host durchzuführen. Z.B soll es möglich sein für OpenX-change einen User hinzuzufügen und Ähnliches. Also das Problem, ich komme als User www-data und möchte Skripte ausführen ( z.B. Shell oder eben andere Perl-Skripte) die die UID von /root oder einem anderen User haben. Wie mache ich das am besten auf debianisch?

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 09.03.2006 15:50:33

Ein CGI Skript als root klingt gefaehrlich. Ich wuerde einen kleinen Daemon schreiben, der als root laeuft und die Tatsaechliche Arbeit, die root Rechte erfordert erledigt sowie ein CGI Skript, welches ein Webfrontend dazu darstellt und mit dem daemon auf irgend eine Weise, zum Beispiel XML-RPC, kommuniziert.

-Flo

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 09.03.2006 16:22:23

Klingt interessant, sollte man annehmen daß es sowas schon gibt, oder zumindest ein Template für sowas? Zumindest klingt mir das als die logischste Lösung bislang, was ich sonst so gehört habe. Ich dachte aber schon für so eine Problematik gäbe es irgend eine Musterlösung oder ein Modul? Aber wahrscheinlich bauen solche Tools wie confixx genau auf so einer Lösung auf?

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Re: Perl/CGI-Skript, das /root-Rechte hat

Beitrag von meandtheshell » 09.03.2006 16:26:02

Columbus hat geschrieben:webseitig adminstrative Aufgaben auf dem Host durchzuführen
mit ssh auf die maschine zu gehen ist keine Alternative?

Ich schließe mich Godsmacker an - ein perlscript mit gesetztem SUID Bit - und zwar dem für root - ist ein Alptraum. Ich meine das script mit neuen perl commands zu füllen ist ja wenn man irgendwie code auf die maschine bringt nicht sehr schwer - den Rest überlasse ich deiner Phantasie.

Wenn du das unbedingt durchziehen willst dann mach wenigstes ein

Code: Alles auswählen

chattr +i <file>
markus

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 09.03.2006 16:46:14

Um Gottes Willen, nein. Ich will es weder mit der Brechstange noch mit der heisen Nadel machen, deswegen frage ich ja hier! Nein, ich werde wohl so einen Demon erzeugen wie Godsmaker vorschlägt, den werde ich wahrscheinlich immer mal wieder gebrauchen und erweitern.

chattr ist doch nur für ext-FS oder?

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

ToPeG
Beiträge: 437
Registriert: 14.04.2004 00:42:06

Beitrag von ToPeG » 09.03.2006 17:53:59

Du könntest auch suso so einrichten, das das Webfrontend-Script über sudo ein root-script aufrufen kann, welches die Befehle umsetzt.
Aber beachte dabei folgende Dinge:

- Niemals generische Befehle erlauben! Allso das Rootscript mit sowas ausführbar machen:

Code: Alles auswählen

/root/rootsript exec="ls -la /*"
- Alle übergenen Parametter auf Plausibilität prüfen. Dabei lieber etwas zu vorsichtig sein und z.B. nicht alle möglichen Zeichen zulassen.
- Wenn es "gefährliche" allso potentiell zerstörerische Befehle gibt, die das Rootscript ausführen soll, so sichere sie zusätzlich über ein Passwort ab, das im Script überprüft wird. Speichere das Passwort nicht im Klartext sondern z.B. md5 verschlüsselt.
- Nummeriere die Befehle im Rootscript durch. Das ist zwar kein echter Schutz, erhöt aber die Sicherheit ein wenig.
- Das rootscript sollte nur für root selber ausführbar und lesbar sein.

Ähnliches gilt auch für ein Deamonscript mit rootrechten.

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 10.03.2006 01:07:50

Columbus hat geschrieben:Klingt interessant, sollte man annehmen daß es sowas schon gibt, oder zumindest ein Template für sowas? Zumindest klingt mir das als die logischste Lösung bislang, was ich sonst so gehört habe. Ich dachte aber schon für so eine Problematik gäbe es irgend eine Musterlösung oder ein Modul?
Nun, genau genommen nicht. Aber wie will man das auch machen? Was Du willst ist ein Daemon, der ueber irgend einen RPC Mechanismus zu erreichen ist. Sowas gibt es zur Genuege. RPC::XML::Server zum Beispiel. Ein passender Client waere RPC::XML::Client.

Dich um die Implementierung der einzelnen Methoden kuemmern bleibt Dein Job. Etwas ausreichend generisches um alles abzudecken ist einfach nicht sicher.

Btw, Du solltest uebrigens auch den tainted mode fuer sowas verwenden. Das kann Dich oftmals davor retten nicht ueberpruefte Eingaben an irgend etwas Kritisches weiterzugeben.
Aber wahrscheinlich bauen solche Tools wie confixx genau auf so einer Lösung auf?
Keine Ahnung, aber ich hoffe es.

-Flo

Antworten