2008-09-15 15 views
8

Ich möchte einen Benutzer privilegierten (nicht root) Prozess, um neue Prozesse als Benutzer nobody starten. Ich habe gerade Aufruf setuid versucht, die mit -1 EPERM auf Ubuntu 8.04 versagt:Wie führe ich ein Programm als niemand?

#include <sys/types.h> 
#include <unistd.h> 

int main() { 
     setuid(65534); 
     while (1); 
     return 0; 
} 

Wie soll ich das tun, statt?

Antwort

14

Sie wird benötigen Unterstützung und viel Vertrauen von Ihrem Systemadministrator. Gewöhnliche Benutzer können die ausführbare Datei ihrer Wahl nicht im Auftrag anderer Benutzer ausführen, Punkt.

Sie kann Ihre Anwendung zu /etc/sudoers mit den richtigen Einstellungen hinzufügen, und Sie können es wie mit sudo -u nobody ausführen. Dies funktioniert sowohl für Skripts als auch für ausführbare Binärdateien.

Eine andere Option ist, dass sie chown nobody und chmod +s auf Ihrer binären ausführbaren Datei tun wird und Sie können es direkt ausführen. Diese Aufgabe muss bei jeder Änderung der ausführbaren Datei wiederholt werden.

Dies könnte auch für Skripte funktionieren, wenn Sie eine kleine Hilfsprogrammdatei erstellen, die einfach exec("/home/you/bin/your-application") tut. Diese ausführbare Datei kann suid-nobody (siehe oben) gemacht werden und Sie können your-application frei ändern.

Hoffe, dass es hilft,

+1

Vielen Dank. Ein zusätzlicher Kommentar: Es scheint, dass Sie stattdessen auch seteuid() verwenden müssen, da setuid für root reserviert ist. Ich verwalte meinen eigenen Ubuntu-Desktop, aber ich schätze die Sorge für diejenigen, die das nicht tun. – jldugger

+0

seteuid() kann auch von Nicht-Root-Benutzern nur sehr eingeschränkt verwendet werden. Man-Seiten auf Seteuid() und Setreuid() haben fast alle Details. – squadette

+0

Bitte markieren Sie die Antwort als "akzeptiert", wenn dies der Fall ist. Vielen Dank, – squadette

1

Soweit ich weiß, können Sie nicht, es sei denn, Sie sind root oder haben sudo eingerichtet, um Ihnen den Wechsel zu ermöglichen. Oder Sie können Ihre ausführbare Datei das suid-Bit darauf eingerichtet haben, und es von niemandem besitzen. Aber das erfordert auch Root-Zugriff.

0

calife ist eine Alternative zu sudo.

Calife ist ein kleines Programm, das es einem UNIX-Systemadministrator ermöglicht, root (oder ein anderer Benutzer) auf seinen Rechnern zu werden, ohne das root-Passwort zu vergeben.

0

Der 'niemand' Benutzer ist immer noch ein Benutzer. Ich bin mir nicht sicher, was deine Argumentation ist, wenn das Programm als niemand läuft, es wird keine zusätzliche Sicherheit hinzufügen. Sie öffnen sich eher für andere Probleme.

Ich würde der Empfehlung von Squadette folgen, eine Helferanwendung zu verwenden.

+0

Diese Frage wurde vom Google Chrome-Browser inspiriert, der einige merkwürdige Vista-Technologie verwendet, um die Sicherheit zu verbessern. Das Prinzip des geringsten Privilegs gilt hier; niemand ist ein Benutzer, aber hat wenig bis keine Datei Schreibberechtigungen. – jldugger

0

Ich lief heute über das setuid-sandbox Projekt beim Lesen von LWN, was tut, was ich für den richtigen Weg suche.

Verwandte Themen