script bash pasar de superuser a user normal

Hola

Estoy haciendo un peque;o script en bash que requiere permisos de superusuario, pero en un punto del script, ejecuta otro script que no requiere permisos de superusuario, y al ejecutarlo como superusuario, me crea un lanzador en el escritorio que no puedo ejecutar con mi user por ser propiedad de root.

Si ejecuto el script por separado del mio sin permisos de super, funciona perfectamente y crea el lanzador como debe.

Como puedo hacer para ejecutar solo ese script como usuario normal desde mi script que requiere permisos de superuser?

Espero se entienda bien.

Gracias de antemano

yo usaría para ser root

sudo -i

después para desloguearme de root y usar el usuario normal. usaría

logout

sin ver un ejemplo del script de como lo estas montando es lo mas que puedo decirte.

Hola Crash y gracias.

El script es muy sencillo. solo instala unas dependencias, se baja un .tar, lo descomprime, y ejecuta un script dentro que viene dentro del tar.

Basicamente hace algo asi.

apt-get install X
wget archivo.tar
tar -xf archivo.tar
bash archivo/script

El script que se ejcuta en la ultima linea, que no puedo tocar, no necesita permisos. Entre otras cosas, me crea un lanzador en el escritorio. Al ejecutarlo desde mi script, que si requiere permisos, ese lanzador es propiedad de root y no funciona. Podria darle permisos desde mi script, pero esa no es al idea, la idea es que el script se ejecute sin permisos de super dentro de mi script.

No entiendo a lo que te refieres con sudo -i. mi script no lo puedo ejecutar asi, y si lo quiero ejecutar desde mi script, no sabria como hacerlo.

la salida de logout

bash: logout: no es un shell de entrada: use `exit'

a esto me refiero que lo puedes usar dentro del script.

aries@aries:~$ whoami aries aries@aries:~$ sudo -i [sudo] contraseña para aries: root@aries:~# whoami root root@aries:~# logout aries@aries:~$
hay una parte que no me queda clara.
El script para que haga todo el proceso ¿lo usas como usuario normal o como root?
si lo usas como root desde que lo ejecutas el problema lo tienes ahí.

lo suyo en ese caso es usar sudo dentro del script en la parte que lo use.

sudo apt-get install X 
wget archivo.tar
tar -xf archivo.tar
bash archivo/script

si te das cuenta solo le doy permisos de root con sudo a la instalación de apt-get. el resto del script se ejecuta como el usuario con el que a sido lanzado.

puedes mirar si quieres mi script de actualizaciones de crack-keys que es mas o menos lo que tu quieres, y lo ejecuto como usuario normal hasta que me pide el password para hacer cosas de root.
https://www.wifi-libre.com/topic-912-crack-keys-page-5.html#p11471

La prueba que hago es haciendo sudo -i en mi consola y despues ejecuto mi script.

El primer problema es que me manda a /root/ y eso me complica de nuevo a la hora de dar las instrucciones para usar el script que estoy haciendo.

Y luego, cuando el scriot llega a logout, me tira lo mismo que ya puse antes.

bash: logout: no es un shell de entrada: use `exit'

(estoy usando xubuntu para hacer las pruebas. La idea es que ande en todos los ubuntus)

Si meto sudo -i en el script, se autologuea a root y se queda ahi el script, con el promtp de root. no hace nada.

Generalmente no se recomienda usar sudo a dentro de los scripts… Se ejecutan con sudo.
sudo -i es peor que sudo en tu caso por lo que dices: La terminal se sitúa automáticamente en root mientras que con sudo se queda en la locación de originen.
El problema con tu idea es que tendrás que entrar tu contraseña de usuario una segunda vez… Puedes hacer

apt-get install X wget archivo.tar tar -xf archivo.tar su javierbu bash archivo/script
Con su + jevierbu antes de lanzar el otro script vuelves a ser “javierbu” pero tendrás que entrar la contraseña de javierbu. :stuck_out_tongue:
¿Por qué no añades una linea chmod en tu script para que de permisos de ejecución del archivo desktop a los usuarios?

Hola Kcdtv.

El poner su javier (mas bien le digo algo como “su who | cut -d " " -f 1”, ya que no se el usuario), es lo primero que intente. No me pide el password de javier al venir desde root, pero el script me muestra el prompt del usuario javier y se queda atascado hasta que le doy un exit, y continua el script su curso. Eso complicaria la vida a la mayoria de users.

Esto me complica la vida por varios motivos:

En primer lugar, el script que necesito que se ejecute como user normal, hace varias cosas (lanzador en escritorio, lanzador en menu de programas y algo mas) y supongo que dependiendo de cada entorno de escritorio, Kde, xfce, gnome, etc, usara una ruta u otra. Depurar el script para que busque todas en todas las rutas posibles seria un infierno.

Y en segundo lugar, de esa manera estaria siempre dependiendo del script que no puedo tocar. Hoy tengo problemas con el lanzador del escritorio, pero quien sabe si ma;ana tambien los tendre con el lanzador del menu de programas, o con cualquier otra accion que haga el script. Este script puede cambiar sin previo aviso. Lo ideal es ejecutarlo como user sin privilegios, pero veo que no es tarea sencilla.

Mas bien quiza lo mas sencillo sera poner en las instrucciones de instalacion un paso mas para ejecutar el dichoso script sin privilegios. A menos que haya otra solucion viable.

Un ejemplo de lo que dices, kcdtv…

[code]javier@xubuntu-vm:~$ cat prueba.sh
#!/bin/bash

su javier
whoami

exit
javier@xubuntu-vm:~$ sudo bash prueba.sh
[sudo] contraseña para javier:
javier@xubuntu-vm:~$ exit <---- este lo escribo yo a mano. si no, el script se queda ahi.
exit
root

javier@xubuntu-vm:~$
[/code]

Ambas rutas son las mismas.

Puedes definir un alis así

alias x='sudo bash /ruta/script1 ; bash /ruta/script2'

El primer script se ejecuta con sudo (la cosa tuya con apt) y el segundo se ejecutará sin sudo.

[quote=kcdtv]Ambas rutas son las mismas.
[/quote]

No lo he comprobado en otros entornos fuera de xfce, que es el que estoy usando para mis pruebas. Pero ya solo con el idioma en que tenga el sistema, cambia la ruta. escriorio|desktop por ejemplo. Supongo que se podria arreglar quiza usando alguna variable de entorno, que no se si la haya para estos casos, o haciendo un find, ya que se como se llaman los archivos a cambiar permisos, pero tendria el problema que cualquier modificacion del script ajeno, podria echar a perder el mio. Aparte de eso, que yo sepa tengo el problema con un lanzador concreto, pero no se si hay algun problema derivado que aun no haya salido a la luz. No he mirado que hace el script ajeno para ver si hace algo mas que tuviera que reparar, ya que esa solucion no me termina de servir. La idea es ejecutarlo como user sin privilegios. El resto no me dejaria tranquilo.

Entiendo tu punto con lo del alias, pero antes que eso, creo que provocaria menos confusion para el usuario ejecutar los 2 scripts (mio y ajeno) por separado, algo como sudo bash mi_scripit, y una vez que termine, bash /ruta/script_ajeno. Seria lo mismo, pero quiza cree menos confusion al usuario final de mi script.

No creo que te refieras a meter el alias dentro de mi script. No sabria como implementarlo, aparte de que igualmente habria que ejecutarlo con sudo, y ya lo leeria todo como root. No veo que solucionara nada.

Mientras escribo esto, se me ocurre una idea y no se que tanto disparatada.

Creo recordar que crontab ejecuta los jobs por usuario. quiza podria crear un job para el user, que se ejecute a los pocos segundos de escribir el job, que ejcute el script, y que se autoborre (el job de crontab) una vez termine, pero me da la impresion de intentar matar moscas a ca;onazos.

De momento la opcion de ejecutar los 2 scripts por separado es la que mas me gusta, aunque seria muy cool meterlo todo en uno solo.

De esto se encarga tu script ajeno… ¿Qué es este script ajeno?
Pon un link y entenderemos mejor
Sino el alias es como hacer un script que engloba los dos scripts y los ejecuta consecutivamente. Puedes hacer un script si quieres en lugar de un alias. Pero si te parece bien ejecutar un scripts después el otro entonces quédate como estás.

No tengo el script ahora a mano. Los puedo subir mas tarde (mio y ajeno), si quieres echarles un ojo.

Es para instalar arduino-ide.

El script creo que solo se encarga de crear los lanzadores en el menu de apps y en el escritorio apuntando al binario. Ni lo he ojeado, ya que no puedo editarlo.

De momento lo dejo asi, ejecutando los 2 por separado, no tan cool, pero funcional. No quiero perder mas mi tiempo y menos el vuestro en esto.

De todos modos, si a alguien se le ocurre algo, puedo probarlo a ver si sirve como solucion.

Muchas gracias