Wenn ich ein Shell-Skript schreibe, in dem einige, aber nicht alle darin enthaltenen Befehle Superuser-Berechtigungen benötigen, soll ich
Fügen Sie sudo zu den Befehlen hinzu, die Superuser-Berechtigungen benötigen, und führen Sie das Shell-Skript ohne sudo oder aus
Fügen Sie den Befehlen, die Superuser-Berechtigungen benötigen, kein sudo hinzu, sondern führen Sie das Shell-Skript mit sudo aus?
Auf die zweite Weise muss ich mein Kennwort nur einmal angeben, aber alle Befehle im Skript werden mit Superuser-Berechtigungen ausgeführt, einschließlich der Befehle, die nicht benötigt werden.
In erster Linie muss ich mein Kennwort möglicherweise mehrmals für verschiedene sudo-Befehle angeben, während die Superuser-Berechtigungen nur den Befehlen gewährt werden, die sie benötigen.
Aus Sicherheitsgründen ist der erste Weg besser. Der Einfachheit halber ist der zweite Weg besser.
Ich habe darüber nachgedacht, den ersten Weg einzuschlagen. Ich muss mich also mit der Unannehmlichkeit auseinandersetzen, meine Passwörter für mehrere sudo-Befehle im Shell-Skript bereitzustellen.
-
Ein gut geschriebenes Skript erkennt, ob es mit den richtigen Berechtigungen ausgeführt wird, und ruft sudo überhaupt nicht auf, aber es gibt viele schlechte Skripte
Soll ich also den zweiten Weg gehen? Wenn ja,
Wie kann ich schreiben "Skript würde erkennen, ob es mit den richtigen Berechtigungen ausgeführt wurde und sudo überhaupt nicht aufruft"?
Wie kann ich die Sicherheit verbessern, um das Problem zu vermeiden, Befehlen Superuser-Berechtigungen zu erteilen, die sie nicht benötigen, wenn das Skript mit sudo ausgeführt wird?
- Hätte dieser einfache Ansatz das Beste aus beiden Ansätzen: Fügen Sie sudo zu Befehlen hinzu, die es nur benötigen, und führen Sie das Skript mit oder ohne sudo aus, je nachdem, ob ich Komfort oder Sicherheit möchte? Hat dieser Ansatz ein Problem?
Vielen Dank.
sudo
hätte einen Standard-Cache für Anmeldeinformationen. Ist dies auf Ihrer Plattform deaktiviert?Antworten:
So beheben Sie Ihr erstes Problem:
Es gibt eine einfache POSIX-Prüfung für root:
Alternativ möchten in Bash möglicherweise leistungsorientiertere Codierer Folgendes verwenden:
Beachten Sie, dass ich den Code absichtlich in Funktionen zur Wiederverwendung eingeschlossen habe.
So beheben Sie Ihr zweites Problem:
Daran kann man nicht viel ändern. Zumindest fällt mir nichts ein. Wenn ich das Skript sehen würde, hätte ich möglicherweise Vorschläge. Aber da Sie es nicht in Ihre Frage aufgenommen haben ... Wenn Sie das gesamte Skript mit
sudo
oder als ausführenroot
, sehe ich keine Möglichkeit, dies zu kontrollieren.So adressieren Sie den Kommentar:
In meinen Skripten gehe ich normalerweise mit dem letzteren Ansatz vor, aber das bedeutet nicht unbedingt, dass ich ihn Ihnen empfehle. Weil es davon abhängt, für wen das Skript bestimmt ist -
root
nur für ; für Benutzer meistens mit Ausnahme einiger Benutzer, diesudo
Rechte haben; Sie müssten Ihr Skript buchstäblich in die Frage aufnehmen, damit ich mit jedem Wert antworten kann.quelle
sudo -u "$SUDO_USER" command...
?sudo -u "$SUDO_USER" command
hier bedeuten soll.Ich denke, ich kann das beantworten.
Es gibt keinen Grund, warum Sie hier ein Problem haben sollten. Deshalb:
Wenn es nur einen Befehl gibt, der als root ausgeführt werden muss, ist
run
Ihr Programm alsroot
odersudo
weilsudo
in Ihrem Skript der längere Weg. Haben Sie vergessen, dass Programmierer faul sind?Wenn Sie viele Befehle müssen
run
wieroot
dann führen Sie es wieroot
odersudo
.Wenn andere Benutzer
run
Ihr Programm benötigen, richten Sie essudo
für diese ein, dasudo
es sehr anpassbar ist und Ihre Anforderungen erfüllt.Hier ist ein Beispiel mit
sudo
:Immer verwenden,
visudo
wenn Sie die sudoers-Datei bearbeiten .....sudo
eignet sich auch hervorragend zum Ändern von Benutzern in Ihrem Programm / Skript. Hier ist eine Zeile aus einem meiner Skripte:https://www.cyberciti.biz/tips/shell-root-user-check-script.html
Wie kann ich feststellen, ob ein Shell-Skript mit Root-Berechtigungen ausgeführt wird?
EDIT auf Anfrage des Gentleman @terdon:
Stellen Sie sich Ihr Skript so vor ...
Ist es ein öffentliches Skript (andere Leute als Sie werden es verwenden) Was macht das Skript? Zeigt es Ihnen die Zeit? Oder aktualisiert es iptables auf 200 Systemen? Wenn Sie es nur benutzen, ist es beruflich oder beruflich oder für den persönlichen Gebrauch?
Sie müssen nur im Voraus wissen, woraus Ihre Benutzergruppe besteht, das war's.
Wenn es
written
Admins geben oder verkaufen soll, warum sollte es dann nichtscript
erlaubt sein, als zu laufenroot
? Welchen Schaden kann es anrichten?Echte Skripte / Programme werden oft als privilegierter Benutzer ausgeführt und niemand erwähnt, dass dies kein Problem ist, aber wenn Programmierer, meistens Anfänger wie ich, über diese Dinge sprechen, ist dies eine echte Sicherheitsbedrohung ... was der Typ in Ihrem Beitrag Ihnen sagt Beziehen Sie sich auf den Versuch zu sagen, während es nicht elegant ist, dass einige Leute sich die Kontrolle ansehen, die Sie über den
system
und Ihren Code haben. Stellen Sie Dateien auf mehr Berechtigungen ein, als Sie verwenden werden, haben Sie alle Überprüfungen in Ihrem Logik oder wird ein talentierter Programmierer Gefahren in Ihrem Code sehen, wenn Sie nur einen Blick darauf werfen?Wenn Sie
code needs root
verwendensudo
, und wenn es viele gibt, führen Sie es einfach alsroot.
...... meine Antwort endet hier puhquelle