Ejecute el comando mientras le hace pensar que "sudo" no existe

Ejecute el comando mientras le hace pensar que "sudo" no existe

Utilizo un programa ( yay, en archlinux) que utiliza sudopara elevar privilegios. Sin embargo, si no encuentra sudo, cambiará a su, que es lo que quiero que haga, ya que mi usuario no es un sudoer, pero lo tengo sudoinstalado (porque hay otro programa que debe sudoinstalarse incluso cuando se ejecuta como root, sé que es una tontería).

Ahora la pregunta es, ¿cómo puedo ejecutar este programa ( yay), mientras hago que piense sudoque no existe?

Tenga en cuenta que yayes un administrador de paquetes (ayudante AUR) que también compila e instala paquetes desde el código fuente, y no puede realizar esas compilaciones como root, por razones de seguridad, lo cual es bastante justo.

También tenga en cuenta que ya abrí un problema.aquíen yayel repositorio de , pero mientras se soluciona, agradecería una solución alternativa.

Respuesta1

La única solución que se me ocurre sin modificarse yaysería tener un script contenedor que ejecutará como root y que se eliminará temporalmente sudoantes de iniciar yay:

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

Sin embargo, eso le pedirá la contraseña de root dos veces. Otra opción es simplemente ejecutar el script como root y luego, en el script, usarlo supara cambiar a otro usuario:

#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

Luego ejecutarías esto como:

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

Esto debería ser seguro en su caso, ya que en realidad no usa sudo, pero aun así haría una copia /sbin/sudopara que pueda recuperarla fácilmente si algo sale mal, por si acaso.

Respuesta2

La forma más sencilla de solucionar este problema será utilizar la --sudo=suopción.

tl; dr- correr yay --sudo=su -Syupara lograr el efecto deseado.

La explicación de por qué yay --sudo=suno hizo lo que esperaba se encuentra a continuación.


El problema se debe a la forma en que yayse manejan los argumentos de la CLI. De los documentos:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

Si no se proporcionan argumentos, yay -Syuse realiza (actualización completa del sistema), pero --sudo=sucuenta como un argumento, por lo que yay selecciona la -Yoperación (enumera los paquetes que coinciden con la consulta, que está vacía en este caso y, por lo tanto, el comando sale inmediatamente).

Aquí está el fragmento de código responsable:https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

información relacionada