sudo Erlaubnis verweigert, aber su gewährt Erlaubnis

11

Dies ist das erste Mal, dass su für mich erforderlich war.

Ich habe einen Artikel über das Ändern des Werts in / sys / Geräte / virtuell / Hintergrundbeleuchtung / acpi_video0 / Helligkeit gelesen, um die Bildschirmhelligkeit meines Laptops zu ändern.

Ich bemerkte zuerst, dass $ sudo echo 10 > brightnessmir die Erlaubnis verweigert würde , wenn ich würde .

Ich wechselte mit su zu root und # echo 10 > brightnessänderte meine Helligkeit fast augenblicklich.

Das letzte seltsame Ding ist mir passiert, als ich es versucht habe # echo 20 > brightness(maxbrightness-Datei enthält den Wert 15) und ich habe einen Schreibfehler erhalten

Könnte mir jemand diesen Unterschied zwischen sudo und su erklären? Das Verständnis des Schreibfehlers wäre ein zusätzlicher Bonus. Jede Hilfe, Hinweise und / oder Links wäre sehr dankbar.

flumpb
quelle
1
Verwandte unix.stackexchange.com/q/1416/250
Phunehehe

Antworten:

17

Die Umleitung funktioniert nicht so. Durch Anhängen >an einen Befehl wird diese Umleitung als aufrufender Benutzer (Sie) und nicht als Root ausgeführt. Mach es mit tee:

echo 20 | sudo tee /sys/devices/virtual/backlight/acpi_video0/brightness

oder indem Sie den Befehl in einer separaten privilegierten Shell aufrufen:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
wedeln
quelle
Wie die Abschlagspitze. Es war mir während meiner 15-jährigen Unix-Systemadministration nicht in den Sinn gekommen :-) Offensichtlich, wenn man es sieht.
Herr Shark
8

Dies liegt nicht sudoan der Art und Weise, wie Ihr Befehl verarbeitet wird. Ich habe es tatsächlich in dieser Frage erklärt . Wenn Sie das tun

$ sudo echo 10 > brightness

Die Shell führt den Befehl aus sudo echo 10, der echo 10als root ausgeführt wird. Die Shell versucht dann zu öffnen, brightnessdamit sie die Ausgabe von dort umleiten kann echo 10, kann dies jedoch nicht - Ihre Shell wird mit Ihren Berechtigungen ausgeführt, nicht mit root. Es gibt Problemumgehungen als Antworten auf die Frage, mit der ich verlinkt habe. ein guter ist:

$ echo 10 | sudo tee brightness

Jetzt muss teees geöffnet werden brightness, und da es als Root ausgeführt wird, ist es erfolgreich

Michael Mrozek
quelle
3

su = s witch u ser: Verwenden Sie die Shell als anderen Benutzer

sudo = s uper u ser do : Führen Sie den folgenden Befehl als Root-Benutzer aus.

In Ihrem Fall ist nur der folgende Befehl echo 20, daher wird nur Echo 20 als Root ausgeführt (wie zuvor gesagt). Die Weiterleitung wird wie Sie erneut ausgeführt.

Michael Niemand
quelle
2

Vielleicht möchten Sie einen Blick auf die /etc/sudoersDatei werfen . Wenn Ihre Klimaanlage dort nicht aufgeführt ist, können Sie dies nicht sudo.

yasouser
quelle
Stimmt, aber in diesem Fall wird eine bestimmte Fehlermeldung angezeigt ("Benutzername befindet sich nicht in der Sudoers-Datei")
Michael Mrozek