Fabric: ¿Cómo implementar la llamada "sudo su -"?

Creado en 29 oct. 2013  ·  9Comentarios  ·  Fuente: fabric/fabric

¿Hay alguna forma de imitar el comando "sudo su - user_name" y luego ejecutar los comandos que necesitaba?

Intenté run y sudo y desafortunadamente no hay forma de hacerlo. Por favor ayuda

Comentario más útil

@polusok @kusnier Estoy trabajando con restricciones similares. puede intentar pasar sus comandos de esta manera.

ejecutar('echo "whoami" | sudo su - nombre de usuario')

Todos 9 comentarios

¿Es el '-' importante en lo que está tratando de hacer? (por ejemplo, invocar un inicio de sesión) o simplemente está tratando de ejecutar un comando como un usuario diferente al usuario actual y raíz?

Si el efecto del inicio de sesión no es importante, puede hacer lo siguiente...

sudo("mkdir /var/www/new_docroot", user="www-data")

o

   with settings(sudo_user='mysql'):
            sudo("whoami") # prints 'mysql'

o si el inicio de sesión es importante (manera pirateada), podría hacer esto, supongo ...

   sudo("su - usernaeme -c 'command to be run'")

Sí, es importante para mí. necesito implementar

  • iniciar sesión en el servidor con mis credenciales
  • en shell inicie sesión como otro usuario con permiso específico y entorno configurado
  • Ejecutar comando

Tenga en cuenta que solo tengo la contraseña de mi cuenta y no tengo la contraseña para esos usuarios en el paso 2, por lo tanto, necesito conectarme a través de

sudo su - user_name

Desafortunadamente, no puedo usarlo porque está prohibido debido a mis permisos.

sudo("su - usernaeme -c 'command to be run'")
Sorry, user user_name is not allowed to execute '/usr/bin/su - another_user -c pwd' as root on server.

¿Cualquier otra sugerencia?

@polusok : ¿Ha encontrado alguna solución? Tengo el mismo problema. Solo puedo usar sudo su - jboss para convertirme en usuario de jboss.

@polusok @kusnier Estoy trabajando con restricciones similares. puede intentar pasar sus comandos de esta manera.

ejecutar('echo "whoami" | sudo su - nombre de usuario')

npalrecha, parece funcionar pero solicita la contraseña en cada comando. ¿Realmente no hay forma de sudo su - usuario y ejecutar todos los comandos posteriores como ese usuario?

Tuve el mismo problema... Si puede cambiar el archivo /etc/sudoers , esa es probablemente la solución más fácil. Su línea probablemente lea username host = ALL pero debería leer username host = (ALL) ALL .

Aquí está mi solución para aquellos que no pueden.
Tenga en cuenta que hacer sudo(command, user="otheruser") con estas soluciones no funcionará.

class Sudosu:
    def __init__(self, user):
        self.user = user

    def __enter__(self):
        self.old_sudo_prefix = env.sudo_prefix
        self.old_sudo_user, env.sudo_user = env.sudo_user, self.user
        env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"

    def __exit__(self, a, b, c):
        env.sudo_prefix = self.old_sudo_prefix
        env.sudo_user = self.old_sudo_user

Usa eso como...

<strong i="17">@task</strong>
def test():
    with Sudosu(user=username):
        sudo("whoami")

Alternativamente, como decorador...

def sudosu(user):                                                                        
    def wrap(f):                                                                         
        def inner(*args, **kwargs):                                                      
            old_sudo_prefix = env.sudo_prefix                                            
            old_sudo_user, env.sudo_user = env.sudo_user, user                           
            env.sudo_prefix = "sudo -S -p '%(sudo_prompt)s' su - %(sudo_user)s -c"       

            f(*args, **kwargs)                                                           

            env.sudo_prefix = old_sudo_prefix                                            
            env.sudo_user = old_sudo_user                                                
        inner.__name__ = f.__name__                                                      
        return inner                                                                     
    return wrap                                                                          

Usa eso como...

<strong i="24">@task</strong>
@sudosu("username")
def whoami():
    sudo("whoami")

o...

sudo = sudosu("username")(sudo)

<strong i="28">@task</strong>
def whoami():  
    sudo("whoami")

De la forma que te apetezca. Mi preferencia es como el contexto.

Por supuesto, puede configurar env.sudo_prefix , pero deberá restablecerlo si desea hacer un sudo normal.

Juchiu, tenía muchas esperanzas pero eso no funcionó para mí. Básicamente obtengo el mismo error que estaba dando la tela sola. Estoy en Red Hat Enterprise Linux Server versión 5.4 (Tikanga). La solución de Npalrecha funciona, pero no es elegante, por supuesto.

Error:
Lo sentimos, el usuario xxxx no puede ejecutar '/bin/su - yyyy -c -u
yyyy /bin/bash -l -c whoami' como root en myserver.com.com.

Ejecutado: sudo -S -p 'contraseña sudo:' su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami"

Parece que todavía está intentando pasar -u yyyy a sudo. Creo que cuando estás haciendo tu llamada sudo() , todavía estás pasando a user como un kwarg.

Pero su mensaje de error es interesante, ya que parece que no se le permite en sudo ejecutar su con ciertos argumentos, especialmente porque se le permite sudo su - yyyy normalmente.

FWIW, los argumentos no parecían tener sentido para mí, pero descubrí qué era extraño.
Sudo parece haber intentado ejecutar el comando su - yyyy -c -u "yyyy" /bin/bash -l -c "whoami" . Luego parece que Su intenta ejecutar -u "achuser" /bin/bash -l -c "whoami" , pero solo ejecuta whoami porque cree que -c se pasó varias veces y solo toma la última. Probablemente trataría de evitar que esto suceda.

Esto es más forraje de la lista de correo que un problema real con la tela: se cerrará como tal.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

jamesob picture jamesob  ·  3Comentarios

supriyopaul picture supriyopaul  ·  4Comentarios

haydenflinner picture haydenflinner  ·  5Comentarios

26huitailang picture 26huitailang  ·  3Comentarios

omzev picture omzev  ·  6Comentarios