Wenn Sie wirklich möchten, dass Ihr Code für eine Vielzahl von Linux-Konfigurationen robust ist, sollten Sie die Eckfälle berücksichtigen, in denen möglicherweise jemand SELinux oder Dateisystem-ACLs verwendet, oder die Funktionen des Linux-Kernels seit v. 2.2 oder so. Ihr Prozess wird möglicherweise unter einem Wrapper ausgeführt, der SELinux verwendet hat, oder unter einer Linux-Funktionsbibliothek wie libcap2 libcap-ng oder fscaps oder elfcap über etwas Exotischeres wie das wunderbare und leider unterschätzte Systrace- System von Niels Provos .
Auf all diese Arten wird Ihr Code möglicherweise als Nicht-Root ausgeführt, und Ihrem Prozess wurde möglicherweise der erforderliche Zugriff übertragen, um seine Arbeit ohne EUID == 0 auszuführen.
Daher würde ich vorschlagen, dass Sie erwägen, Ihren Code pythischer zu schreiben, indem Sie Vorgänge einschließen, die aufgrund von Berechtigungen oder anderen Problemen mit Ausnahmebehandlungscode fehlschlagen können. Wenn Sie verschiedene Vorgänge ausführen möchten (z. B. mithilfe des subprocess
Moduls), können Sie allen solchen Aufrufen sudo
ein Präfix voranstellen (z. B. als Befehlszeilen-, Umgebungs- oder RC-Dateioption). Wenn es interaktiv ausgeführt wird, können Sie anbieten, alle Befehle, die berechtigungsbezogene Ausnahmen auslösen , erneut auszuführen sudo
(optional nur, wenn Sie sie sudo
in der Datei os.environ ['PATH'] finden).
Insgesamt ist es richtig, dass die meisten Linux- und UNIX-Systeme den größten Teil ihrer Verwaltung noch von einem Benutzer mit Root-Berechtigung durchführen lassen. Es ist jedoch alte Schule und wir als Programmierer sollten versuchen, neuere Modelle zu unterstützen. Wenn Sie versuchen, Ihre Vorgänge auszuführen und die Ausnahmebehandlung ihre Arbeit erledigen zu lassen, kann Ihr Code unter jedem System ausgeführt werden, das die von Ihnen benötigten Vorgänge transparent zulässt. Es sudo
ist eine nette Geste , sich dessen bewusst und einsatzbereit zu sein (da dies bei weitem am weitesten verbreitet ist) Tool zur kontrollierten Delegierung von Systemberechtigungen).