Serge E. Hallyn vorgelegt p9auth auf die Linux-Kernel-Mailingliste im April 2010, die ziemlich viel diese Funktionalität zur Verfügung gestellt hätte (wenn auch in der letzten eingereichten Form, mit einer etwas anderen Schnittstelle). Leider war es nicht im Linux-Kernel enthalten.
Das zugrunde liegende Sicherheitsparadigma in Linux ist vertikal und nicht horizontal.
Privilegien sind in capabilities unterteilt und können zur Laufzeit nur erworben werden. Zusätzliche Berechtigungen können jederzeit gelöscht werden. In der Praxis verwenden Sie Dateisystemfunktionen und das Dienstprogramm setcap
, um einer nicht privilegierten Binärdatei bei ihrer Ausführung bestimmte Funktionen zu geben, unabhängig von der Identität des Benutzers, der sie ausführt. (Mit Linux-Kernel 2.6.33 und höher ist es nicht mehr möglich, dass ein Prozess die Fähigkeiten eines anderen laufenden Prozesses ändert.)
Der entscheidende Punkt ist, dass in Linux nur ein privilegierter Prozess (ein Prozess mit Die CAP_SETUID
) kann zur Laufzeit ihre Identität ändern.
Mit anderen Worten, dem Punkt exec wird in Linux zur Erhöhung von Berechtigungen verwendet, mit dem nun privilegierten binären Wechsel in dem angegebenen Benutzer (und/oder eine Gruppe und vielleicht ergänzende Gruppen), fällt zusätzliche Privilegien. Mir ist kein Mechanismus bekannt, der es einem unprivilegierten Prozess erlauben würde, seine credentials ohne exec zu ändern.
Für das OP bedeutet dies, dass die Schnittstelle Plan 9 (/dev/caphash
, /dev/capuse
) nicht funktioniert. Eine vergleichbare Linux-Schnittstelle, die im Benutzerbereich implementiert ist, erfordert die Ausführung einer Binärdatei als Teil der Änderung der Anmeldeinformationen. Ansonsten weiß ich nicht genug über die Anwendungsfälle von OP, um Vorschläge zu machen.
Im Kernel ist eine solche Schnittstelle offensichtlich möglich (wie der erste Link in dieser Antwort zeigt), die in den Vanilla-Kernel nicht verfügbar ist.
Frage ist mehr API als CLI orientiert, aber ich werde diese Option auch überprüfen. – user3368561