bonito sudo o sudo bonito?

53

¿Hay alguna diferencia entre ejecutar una tarea intensiva sobre sudo con los siguientes comandos ?:

  1. nice sudo [comando intensivo aquí]
  2. sudo nice [comando intensivo aquí]

Por cierto, esto es para Linux 3.x.

Nicolas Laplante
fuente
66
Para ayudarlo a probar nice bash -c 'ps -p $$ -o pid,ni,comm', vea , y sudo nice bash -c 'ps -p $$ -o pid,ni,comm', y nice sudo bash -c 'ps -p $$ -o pid,ni,comm'. Los tres deberían mostrarle el buen valor para la identificación del proceso ($$) del shell generado.
Zoredache
@Zoredache, si bien creo que su comentario es MUY constructivo, deberíamos decir que todos tendrán el mismo valor agradable porque se hereda cuando se bifurca, que debería ser la respuesta real a la pregunta.
Florin Asăvoaie
3
@FlorinAsavoaie, si cree que esa debería ser la respuesta, no dude en agregarla. Agregué mi comentario anterior como una forma de probar cosas, porque personalmente no estaba 100% seguro de lo que sucedería, y decidí encontrar un comando que pudiera mostrar el buen valor con varias invocaciones. Estoy en el campamento que tiende a preferir tener una prueba que muestre que las cosas están funcionando como se supone que deben hacerlo.
Zoredache
@FlorinAsavoaie Yo también lo habría pensado, pero mira serverfault.com/a/626576/117546 .
emory

Respuestas:

104

Hay una diferencia, crucial.

Si desea disminuir la prioridad del proceso, el orden no importa. Por otro lado, si quieres aumentarlo , debes ponerlo sudoantes nice.

Como está ejecutando el comando como un usuario normal (de lo contrario no se molestaría con sudo), solo puede disminuir la prioridad de su comando. Pero si lo usa sudoprimero, puede aumentarlo si lo desea.

ThoriumBR
fuente
21
Felicidades, tú ganas.
Michael Hampton
2
Este es un punto muy importante, aunque como respuesta solo se completa cuando explica por qué el orden no importa en el caso base (como lo hace Michael en su respuesta).
Lightness compite con Monica el
16

Si ejecuta, también nice sudose le solicitará su contraseña, pero como pasará mucho más tiempo escribiéndola, realmente no importa mucho.

Como señaló ThoriumBR, si está bajando la prioridad, entonces el orden es irrelevante, pero si desea aumentar la prioridad, entonces (ya que esto debe hacerse como raíz) debe usar sudo nice.

De lo contrario, no puedo imaginar ninguna diferencia real.

Michael Hampton
fuente
2

Usando el 'principio de privilegio mínimo' solo debe ejecutar un programa con privilegios de root si los necesita, y luego soltarlos nuevamente tan pronto como ya no los necesite.

Entonces, sí, hay una diferencia, si hay un exploit para nice, un atacante podría ejecutar código con los mismos privilegios que el buen programa.

Además, sudo restablece su entorno, por lo que podría tener efectos secundarios, intente

$ echo 'echo $PATH' | sh
/usr/lib64/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/jens/.local/bin:/home/jens/bin:/home/jens/.local/bin
$ echo 'echo $PATH' | sudo sh
[sudo] password for jens: 
/sbin:/bin:/usr/sbin:/usr/bin

Entonces, el comando 'agradable' que ejecuta a través de sudo podría terminar siendo un binario diferente.

$ which ash
~/.local/bin/ash
$ sudo which ash
[sudo] password for jens: 
which: no ash in (/sbin:/bin:/usr/sbin:/usr/bin)
Jens Timmerman
fuente
2

Respuesta tardía:

Si su acceso a sudo está limitado a ciertos programas ( fooy bar, por ejemplo), entonces no tendrá autoridad para ejecutar sudo nice foo, pero se le permitirá ejecutar nice sudo foo.

Chris Dennis
fuente