
Utilizo un programa ( yay
, en archlinux) que utiliza sudo
para 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 sudo
instalado (porque hay otro programa que debe sudo
instalarse 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 sudo
que no existe?
Tenga en cuenta que yay
es 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 yay
el repositorio de , pero mientras se soluciona, agradecería una solución alternativa.
Respuesta1
La única solución que se me ocurre sin modificarse yay
sería tener un script contenedor que ejecutará como root y que se eliminará temporalmente sudo
antes 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 su
para 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/sudo
para 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=su
opción.
tl; dr- correr yay --sudo=su -Syu
para lograr el efecto deseado.
La explicación de por qué yay --sudo=su
no hizo lo que esperaba se encuentra a continuación.
El problema se debe a la forma en que yay
se 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 -Syu
se realiza (actualización completa del sistema), pero --sudo=su
cuenta como un argumento, por lo que yay selecciona la -Y
operació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