Estoy tratando de seguir lo que supongo son las mejores prácticas de uso de sudo en lugar de la cuenta raíz.
Estoy ejecutando una operación simple de archivo concat como:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Esto falla a la derecha del ">>" que se está ejecutando como el usuario normal. Agregar sudos adicionales también falla (comportamiento esperado desde la conexión al comando sudo y no al archivo).
El ejemplo es solo eso, pero se ha verificado y probado en la cuenta raíz.
shell
sudo
io-redirection
quoting
Oveja Oscura
fuente
fuente

teecomandos se ejecutan como root, no el comando principal, que podría ser complejo y propenso a un mal comportamiento. (no es el caso deecho)Otra opción, igualmente segura, es usar
sudoel-iinterruptor para iniciar sesión como root:Esto sigue las reglas de mejores prácticas ya que la cuenta raíz no está habilitada como tal, pero le permite hacer cosas como root de manera segura. De
man sudo:fuente
sudo bashSi expresa su comando sin comillas simples, puede ponerlo dentro de comillas simples y ejecutarlo a través de un shell intermedio.
Para ejecutar esto como root:
Escriba el comando de una manera diferente que no use
':Luego invoque
sudo sh -c …:Alternativamente, para escribir la salida en un archivo en el que solo la raíz puede escribir, llame
sudo tee. Pase la-aopción ateeanexar al archivo de destino; de lo contrario, el archivo se truncará.Para las modificaciones de archivos más complejos, puede llamar
sudo sed,sudo ed,sudo perl, ...Alternativamente, use un editor decente y haga que llame a sudo. En Emacs, abierto
/sudo:/etc/conf.d/hwclock. En Vim, llame:w !sudo tee %para escribir en el archivo abierto como root, o use el complemento sudo.vim . O ve desde el extremo del sudo y llamasudoedit /etc/conf.d/hwclock.O puede ceder al lado oscuro y ejecutar un shell como root.
fuente
El comando falla debido a los permisos en el archivo redirigido a. La redirección ocurre incluso antes de que
sudose invoque el comando.Tendrá que asegurarse de que es la raíz la que realmente abre el archivo para escribir.
La forma más sencilla de hacerlo:
Se
echopuede ejecutar como usuario normal, ya que solo produce una cadena de texto. Sinteeembargo, la utilidad tendrá que ejecutarse como root ytee -aagregará datos. Redirigimos la salida a/dev/nullporquetee, por defecto, duplicará sus datos de entrada a su salida estándar además de escribir en los archivos indicados.Con
basho cualquier shell que entienda "here-strings":Esto es idéntico en efecto a lo anterior. Solo cambia la forma en que producimos la cadena.
Otra forma un poco indirecta de hacerlo:
Aquí, la redirección ocurre dentro de un
sh -cshell hijo que se ejecuta como root.fuente
sudo dd of=Para agregar como quieras:
o para recrear el archivo desde cero:
Ventajas:
teedesde que no hay/dev/nullredirecciónshdesde que no hay subshellddtiene muchas opciones poderosas, por ejemplo,status=progresspara ver el progreso de la transferenciaFunciona porque sudo reenvía stdin al comando.
fuente