разрешение sudo отклонено, но su дает разрешение

11

это первый случай, когда мне потребовалось su.

Я прочитал статью об изменении значения в / sys / devices / virtual / backlight / acpi_video0 / Brightness, чтобы изменить яркость экрана моего ноутбука.

Сначала я заметил, что когда $ sudo echo 10 > brightnessя получу разрешение, мне будет отказано.

Я переключился на root с помощью su и # echo 10 > brightnessпочти мгновенно изменил яркость.

Последняя странная вещь со мной произошла, когда я попытался # echo 20 > brightness(файл maxbrightness содержит значение 15), и я получил ошибку записи

Может ли кто-нибудь объяснить мне эту разницу между sudo и su? Понимание ошибки записи будет дополнительным бонусом. Любая помощь, указатели и / или ссылки будут высоко ценится.

flumpb
источник
1
Связанные unix.stackexchange.com/q/1416/250
phunehehe

Ответы:

17

Перенаправление не работает таким образом. Присоединение >к команде будет запускать это перенаправление от имени вызывающего пользователя (вас), а не от имени пользователя root. Сделайте это с tee:

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

или вызвав команду в отдельной привилегированной оболочке:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
шутник
источник
Как чаевые. Это не приходило мне в голову в течение моих 15 лет системного администрирования Unix :-) Очевидно, когда это видно.
Мистер Акула
8

Это не из-за того sudo, как обрабатывается ваша команда; Я на самом деле объяснил это в этом вопросе . Когда вы делаете

$ sudo echo 10 > brightness

оболочка запускает команду sudo echo 10, которая запускается echo 10от имени пользователя root. Затем оболочка пытается открыть ее, brightnessчтобы перенаправить вывод echo 10в нее, но не может - ваша оболочка работает с вашими разрешениями, а не с правами root. Есть обходные пути, опубликованные в качестве ответов на вопрос, с которым я связан; хороший это:

$ echo 10 | sudo tee brightness

Теперь teeэто тот, который нужно открыть brightness, и, поскольку он работает как root, он успешно

Михаил Мрозек
источник
3

su = s witch u ser: использовать оболочку как другой пользователь

sudo = s uper u ser do : выполните следующую команду от имени пользователя root.

В вашем случае только следующая команда echo 20, следовательно, только echo 20 исполняется от имени пользователя root (как сказано выше). Перенаправление выполняется как вы снова.

Майкл Ниманд
источник
2

Возможно, вы захотите взглянуть на /etc/sudoersфайл. Если ваш кондиционер не указан там, вы не сможете sudo.

yasouser
источник
Правда, но в этом случае вы получите конкретное сообщение об ошибке («имя пользователя отсутствует в файле sudoers»)
Майкл Мрозек