# Setuid

Setuid (Set User ID, manchmal auch suid) ist ein erweitertes Unix-Dateirecht für Dateien oder Verzeichnisse des Unix-Betriebssystems. Ausführbare Programme, bei denen dieses Bit gesetzt ist, werden zusätzlich zu den Rechten desjenigen Benutzers, der die Datei ausführt, auch mit den Rechten des Benutzers ausgeführt, dem die Datei gehört (das heißt mit den Rechten des Besitzers der Datei, des „Owners“). Auf den meisten Systemen funktioniert dies nur für ausführbare Binärdateien, nicht jedoch für interpretierte Scripts.
Dieses Vorgehen ermöglicht unprivilegierten Benutzern und Prozessen einen kontrollierten Zugriff auf privilegierte Ressourcen.
Im Falle von FreeBSD bewirkt Setuid auf Verzeichnissen, dass darin angelegte Dateien dem Eigentümer des Verzeichnisses gehören und nicht demjenigen Benutzer, der sie anlegt.

## Setzen des SUID-Bits

Mit klassischen Unix-Kommandos wie chmod kann das Bit mit einem Aufruf wie
    chmod u+s datei
gesetzt werden, wobei datei für mindestens eine Datei bzw. Verzeichnis steht.
Die Rechte zeigt ein ls dann z. B. folgendermaßen an:
    -rwSrwxrwx user group datei
    Ein großes „S“ repräsentiert hierbei das reine SUID-Bit, ohne execute Bit. Ist auch das execute Bit gesetzt wird ein kleines „s“ angezeigt. Das execute Bit kann über
    chmod u+x datei
    gesetzt werden.
Auch moderne grafische Dateimanager bieten Möglichkeiten, das Bit grafisch per Checkbox zu aktivieren/deaktivieren.

## Vor- und Nachteile

Vorteil dieses Vorgehens ist seine Einfachheit. Im Kernel muss nur wenig Funktionalität vorhanden sein, um eine große Bandbreite an Zugriffsteuerungen durch externe Programme zu implementieren. Es genügt in vielen Fällen, Funktionalität nach „privilegiert“ und „nicht privilegiert“ zu trennen, und die Zugriffsteuerung den setuid-Programmen zu überlassen. Programme können des Weiteren in den Rechten beschnitten werden, wenn das Programm einem eingeschränkten Anwender zugeordnet wird.
Klarer Nachteil ist, dass diese setuid-Programme, die einem höher berechtigten Anwender wie root gehören, aufgrund ihrer Privilegien ein Sicherheitsrisiko darstellen. Ein Fehler in einem dieser Programme kann leicht das ganze System kompromittieren. Sie sind daher auch häufig das Ziel von lokalen Angriffen. Daher werden im Allgemeinen Mechanismen bevorzugt, die ohne setuid auskommen.

## Klassische setuid-Programme

Unix-Programme, für die das setuid-Bit zur korrekten Funktion gesetzt sein muss, sind zum Beispiel su sowie sudo, welche mit den ihnen damit zur Verfügung stehenden Root-Rechten den zu startenden Prozess unter einer anderen Benutzerumgebung starten. Auch mount und sein Pendant umount benötigen üblicherweise Root-Rechte. Unter Linux wird aber auch normalen Benutzern das Ein- und Aushängen von Laufwerken erlaubt, die in der Datei /etc/fstab mit der Option user markiert sind.
In allen diesen Fällen muss den Dienstprogrammen jeweils die Möglichkeit zur Verfügung stehen, Aktionen mit Root-Rechten auszuführen. Die Entscheidung, ob dies erlaubt sein soll oder nicht, muss allerdings einer privilegierten Instanz obliegen. Sie wird meist anhand von Konfigurationsdateien gefällt, die von normalen Benutzern nicht bearbeitet werden können.