sudo permiso denegado pero su otorga permiso

11

Esta es la primera vez que se requería su para mí.

Leí un artículo sobre cómo cambiar el valor en / sys / devices / virtual / backlight / acpi_video0 / brillo para alterar el brillo de la pantalla de mi computadora portátil.

Primero me di cuenta de que cuando lo haría, $ sudo echo 10 > brightnessme negarían el permiso.

# echo 10 > brightnessCambié a root usando su y cambié mi brillo casi al instante.

Lo último que me pasó cuando intenté # echo 20 > brightness(el archivo maxbrightness tiene el valor 15) y recibí un error de escritura

¿Podría alguien explicarme esta diferencia entre sudo y su? Comprender el error de escritura sería una ventaja adicional. Cualquier ayuda, consejos y / o enlaces serán muy apreciados.

flumpb
fuente
1
Relacionado unix.stackexchange.com/q/1416/250
phunehehe

Respuestas:

17

La redirección no funciona de esa manera. Agregar >a un comando ejecutará esa redirección como el usuario que invoca (usted) y no como root. Hazlo con tee:

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

o invocando el comando en un shell privilegiado separado:

sudo bash -c "echo 20 > /sys/devices/virtual/backlight/acpi_video0/brightness"
meneo
fuente
Como la punta del tee. No se me había ocurrido durante mis 15 años de administración de sistemas Unix :-) Obvio cuando se ve.
Mr Shark
8

Esto no sudose debe a la forma en que se procesa su comando; En realidad lo expliqué en esta pregunta . Cuando tu lo hagas

$ sudo echo 10 > brightness

el shell ejecuta el comando sudo echo 10, que se ejecuta echo 10como root. Luego, el shell intenta abrirse brightnesspara poder redirigir la salida echo 10hacia él, pero no puede: su shell se ejecuta con sus permisos, no root. Hay soluciones alternativas publicadas como respuestas a la pregunta a la que me vinculé; uno bueno es:

$ echo 10 | sudo tee brightness

Ahora teees el que se abre brightness, y dado que se está ejecutando como root, tiene éxito

Michael Mrozek
fuente
3

SU = s bruja u ser: Usar el Shell como un usuario diferente

sudo = s uper u ser do : ejecuta el siguiente comando como usuario root.

En su caso, el siguiente comando es solo echo 20, por lo tanto, echo 20 se ejecuta como root (como se dijo antes). La redirección se ejecuta como usted nuevamente.

Michael Niemand
fuente
2

Es posible que desee echar un vistazo al /etc/sudoersarchivo. Si su aire acondicionado no está en la lista, entonces no podrá hacerlo sudo.

yasouser
fuente
Es cierto, pero obtendría un mensaje de error específico en ese caso ("el nombre de usuario no está en el archivo sudoers")
Michael Mrozek