uprawnienia sudo odmówiono, ale su udziela pozwolenia

11

to jest pierwsze wystąpienie, w którym su było dla mnie wymagane.

Przeczytałem artykuł o zmianie wartości w / sys / devices / virtual / backlight / acpi_video0 / jaskrawość, aby zmienić jasność ekranu mojego laptopa.

Po raz pierwszy zauważyłem, że gdybym chciał $ sudo echo 10 > brightness, odmówiono mi pozwolenia.

Przełączyłem się na rootowanie za pomocą su i # echo 10 > brightnessprawie natychmiast zmieniłem jasność.

Ostatnia dziwna rzecz wydarzyła się, gdy próbowałem # echo 20 > brightness(plik maxbrightness ma wartość 15) i dostałem błąd zapisu

Czy ktoś mógłby mi wyjaśnić tę różnicę między sudo i su? Zrozumienie błędu zapisu byłoby dodatkową korzyścią. Każda pomoc, wskaźniki i / lub linki byłyby bardzo mile widziane.

flumpb
źródło
1
Powiązane unix.stackexchange.com/q/1416/250
phunehehe 31.01.11

Odpowiedzi:

17

Przekierowanie nie działa w ten sposób. Dołączenie >do polecenia spowoduje uruchomienie tego przekierowania jako wywołujący użytkownik (ty), a nie jako root. Zrób to z tee:

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

lub przez wywołanie polecenia w osobnej uprzywilejowanej powłoce:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
machać
źródło
Jak tee tip. Nie przyszło mi to do głowy przez 15 lat administrowania unixem :-) Oczywiste, kiedy widzimy.
Pan Shark
8

Nie dzieje się sudotak z powodu sposobu przetwarzania polecenia; Właściwie wyjaśniłem to w tym pytaniu . Kiedy to zrobisz

$ sudo echo 10 > brightness

powłoka uruchamia polecenie sudo echo 10, które działa echo 10jako root. Powłoka następnie próbuje się otworzyć, brightnessaby móc przekierować z niej dane wyjściowe echo 10, ale nie może - twoja powłoka działa z twoimi uprawnieniami, a nie rootem. Istnieją obejścia opublikowane jako odpowiedzi na pytanie, z którym się łączyłem; dobrym jest:

$ echo 10 | sudo tee brightness

Teraz teemożna go otworzyć brightness, a ponieważ działa jako root, udaje mu się to

Michał Mrożek
źródło
3

su = s witch u ser: Użyj powłoki jako inny użytkownik

sudo = s uper u ser do : wykonaj następujące polecenie jako użytkownik root.

W twoim przypadku następujące polecenie jest tylko echo 20, dlatego tylko echo 20 jest wykonywane jako root (jak powiedziano wcześniej). Przekierowanie jest wykonywane ponownie.

Michael Niemand
źródło
2

Możesz rzucić okiem na /etc/sudoersplik. Jeśli Twojego klimatyzacji nie ma na liście, nie będziesz w stanie tego zrobić sudo.

yasouser
źródło
To prawda, ale w takim przypadku pojawiłby się konkretny komunikat o błędzie („nazwy użytkownika nie ma w pliku sudoers”)
Michael Mrozek