cómo cambiar a otro usuario con contraseña en el script de shell

cómo cambiar a otro usuario con contraseña en el script de shell

He iniciado sesión en el entorno UNIX con el usuario1, en este entorno tengo un script de shell que contiene algunas tareas que deben realizarse en una ruta diferente con un usuario diferente, digamos usuario2, porque el usuario1 no tiene acceso a esa ruta.

Quiero cambiar a usuario2 desde usuario1 en el script de shell para realizar esa tarea, y después de completar la tarea quiero cambiar nuevamente a usuario1 desde usuario2.

Sugiera cómo puedo lograr este escenario.

Estoy llamando al script de shell con Java, así que si tienes otra forma, sugiérelo.

Respuesta1

Puede lograr lo que desea con sudo: puede permitir que el usuario2 ejecute el script que necesita como usuario1, permitiendosoloese script se ejecutará, preservando así la seguridad de su sistema (el usuario2 no puede volverse deshonesto y usar un shell como usuario1). Puedes hacerlo mediante:

  1. sudo visudo(para editar el archivo de configuración de sudo)
  2. Agregue esto al final del archivo:user2 ALL = (user1) NOPASSWD:/path/to/your/script.sh
  3. Guarde y cierre el archivo.

Ahora, si abre un shell como usuario2, puede utilizarlo sudo -u user1 /path/to/your/script.shpara ejecutarlo como usuario1; puedes usar este mismo comando desde java. La seguridad se preserva, ya que el usuario2 no puede ejecutar un shell ya que el usuario1: sudo -u user1 bashserá denegado.

Sin embargo, creo que se lograría una solución cada vez más limpia simplemente creando un grupo que el usuario1 y el usuario2 compartirán, y usando ese grupo para administrar el permiso de ejecución del archivo. Dependiendo de sus requisitos, es posible que también desee considerar las ACL o el bit setuid (por ejemplo chmod 4700 /path/to/your/script.sh, ) si se espera que más usuarios ejecuten ese script como usuario1.

Respuesta2

Supongo que el usuario1 no tiene acceso sudo sin contraseña, ¿correcto? Si es así, puede utilizar el comando runuser.

runuser -l user2 -c 'whoami'

Puedes usar su/sudo si tienes configurados los permisos de sudo.

su - user2 -c 'whoami'

Sin embargo, supongo que no tiene sudo sin contraseña y/o es posible que no tenga la contraseña para el usuario2. Podría resultar complicado generar un par de claves RSA para el usuario1 y luego agregar la clave id_rsa.pub al archivo $HOME/.ssh/authorized_keys del usuario2 para habilitar la autenticación de clave pública RSA y luego usar SSH para hacerlo sin contraseña.

Como usuario1 ejecute lo siguiente; generador de claves ssh Simplemente presione Enter a través de las indicaciones. Luego ejecute lo siguiente para agregar la clave automáticamente (puede hacerlo manualmente). Si está utilizando este comando, necesitará la contraseña del usuario2 sólo la primera vez.

ssh-copy-id -i $HOME/.ssh/id_rsa.pub usuario2@nombrehost

Si esto funciona, debería poder iniciar sesión como usuario1 y luego ejecutar ssh usuario2@localhost para iniciar sesión como usuario2 sin contraseña. Asegúrese de que /etc/ssh/sshd_config en el servidor tenga habilitada la autenticación de clave pública.

Luego, para ejecutar el comando de forma remota, puede ejecutar algo como;

ssh usuario2@localhost "comando-remoto1;comando-remoto2"

información relacionada