Ich habe ein Skript, mit dem ich die Helligkeit der Hintergrundbeleuchtung genau steuern kann und sudo
das ausgeführt werden muss. Es ist im Wesentlichen das:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | tee $backlight
und lebt bei ~/bin/backlight-adjust
. Das Skript benötigt sudo
Berechtigungen, da tee $backlight
an einen privilegierten Speicherort geschrieben wird. Also wird es scheitern, wenn es nicht läuft sudo
.
Dieser Ansatz hat ein Problem, weil ich nicht einfach laufen kann sudo backlight-adjust
, weil ~/bin
nicht $PATH
in der sudo
Umgebung, sondern nur in meiner Umgebung. Also müsste ich rennen sudo env "PATH=$PATH" backlight-adjust
oder so ähnlich.
Alternativ hätte ich es so schreiben können:
backlight="/sys/class/backlight/acpi_video0/brightness"
echo $1 | sudo tee $backlight
und fordern Sie mich auf, das Passwort einzugeben.
Der zweite Ansatz funktioniert bei mir besser, da ich mich nicht daran erinnern muss, sudo einzugeben. es wird mich auffordern. Und ich kann meine $PATH
intakt halten . Das fühlt sich insgesamt bequemer an, aber gibt es Gründe, warum ich es nicht auf die zweite Art tun sollte?
(Ich verwende Xubuntu 14.04 und meine Shell ist GNU Bash 4.2.45, wenn das einen Unterschied macht.)
quelle
sudo
hält eigentlich meine$PATH
standardmäßig so dass ich dieses Problem nicht haben.Antworten:
Persönlich würde ich einen anderen Ansatz verwenden. Erstellen Sie einen Alias für Ihr Skript. Fügen Sie diese Zeile zu Ihrer
~/.bashrc
(oder einer Entsprechung in anderen Shells) hinzu.Auf diese Weise brauchen Sie sich keine Gedanken darüber zu machen, wie Sie es ausführen,
sudo
und müssen das nichtsudo
zum Skript hinzufügen . Es ist für Sie völlig transparent und fordert Sie beim Ausführen einfach zur Eingabe Ihres Kennworts aufbacklight-adjust
.quelle
sudo
das eigentliche Skript nicht einzufügen, zumal Sie auf diese Weise leicht erkennen können, für welche Elemente des Skripts tatsächlich Root-Berechtigungen erforderlich sind.Ich kann nicht erkennen, warum es falsch sein könnte - obwohl ich es normalerweise vorziehen würde, dass Befehle keine Fragen an mich stellen, damit sie skriptfähig sind. Sie können
/etc/sudoers
diesudo
Funktion auch ohne Passwort anpassen.Aber ... warum nicht hinzufügen?
in deinem
/etc/rc.local
und vergessensudo
?(Wenn Sie Ubuntu verwenden können, befinden
sudo
Sie sich in der sudo- Gruppe, damit Sie es verwendenchgrp sudo /sys...
und damit zufrieden sein können.)quelle
Alternativ könnten Sie hinzufügen
zu Ihrer
/etc/sudoers
Datei.quelle
Sie geben sudo backlight-adjust an, weil sich ~ / bin in der sudo-Umgebung nicht im $ PATH befindet
Warum also davon abhängen? Ich denke, Sie sollten nur diese Zeile ändern
/home/user/bin/backlight-adjust
und es wird funktionieren.Aber ich hätte wirklich gerne Terdons Lösung, auch einen Alias zu verwenden. Oder Sie platzieren Ihr Skript in
/usr/bin/
und es wird für jeden Benutzer verfügbar sein (inkl. Root)quelle
~/bin
meinem Home-Dotfiles-Repository befindet, damit die Versionskontrolle nicht unterbrochen wird.-E
Flagge, um die Umwelt zusudo -E command
sudo env "PATH=$PATH" ...
) erwähnt habe.Kann keine allgemeine Regel angeben ... Wenn das Skript / Programm für eine Neukonfiguration (z. B. einen Drucker) vorgesehen ist und von regulären Benutzern aufgerufen werden soll, muss dies geschehen. Ansonsten würde ich gut genug in Ruhe lassen: Wenn ein regulärer Benutzer es ausführt, scheitern Sie einfach (entweder als Ergebnis einer expliziten Überprüfung oder nur, weil es nicht erlaubt ist, etwas zu tun).
Erhöhte Privilegien sollten, wenn überhaupt, sparsam vergeben werden. Das Wechseln zu höheren Rechten ist schwierig, überlassen Sie es besser den Experten (dh
sudo(1)
).quelle
Ich persönlich verwende so etwas wie
${SUDO}
in meinen Skripten, damit der Anrufer es bei Bedarf einstellen oder${SUDO:-sudo}
standardmäßig verwenden kann.In Ihrem speziellen Fall bin ich jedoch mit der akzeptierten Antwort einverstanden.
quelle
Platzieren Sie das Skript (ohne das
sudo
) an einem geeigneten, benutzerweiten Ort/bin
, und führen Sie dann Folgendes aus:Dies funktioniert durch Setzen des setuid-Flags, was bedeutet, dass es immer als Dateieigentümer ausgeführt wird. Für Details lesen Sie bitte http://major.io/2007/02/13/chmod-and-the-mysterious-first-octet/ . Ich weiß nicht so viel darüber, wie das funktioniert. Ich fand es einfach googelnd, basierend auf etwas, von dem ich dachte, ich hätte es vor ein paar Jahren gelesen.
quelle
4755
Mittel, die immer ausgeführt werden, wenn der Eigentümer lesen, schreiben und ausführen kann, die Gruppe lesen und ausführen kann und die Benutzer lesen und ausführen können. Dies ist die Standardberechtigungsstufe für Dinge, die ein Benutzer mit Root-Berechtigungen ausführen darf.