es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Autenticar a un usuario desde un host local de Linux utilizando un script de Python.

Quiero autenticar un usuario desde un host local de Linux usando el proceso secundario. He utilizado este código y dudo que login sea el comando perfecto porque el comando de inicio solicita una contraseña y quiero proporcionar la contraseña de antemano. manual de login

Si no es login, ¿hay algún otro comando de Linux a través del cual pueda autenticar a un usuario local?

#!/usr/bin/python3

import subprocess
import cgi

print()

cred = cgi.FieldStorage()

username = cred.getvalue("user")
password = cred.getvalue("password")

print(username)
print(password)

cmd = f"echo {password} | sudo /usr/bin/login {username}"

cmd = "ls -la"

print(cmd)

output = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, text=True)

print(output)

# Esto es lo que obtengo hasta ahora.
CompletedProcess(args='echo ashu234 | sudo /usr/bin/login ashu', returncode=1, stdout='')
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    No se recomienda proporcionar la contraseña de antemano en un comando de subprocess ya que puede generar vulnerabilidades de seguridad. En su lugar, puedes usar el comando su para autenticar a un usuario local sin solicitar una contraseña. La sintaxis para el comando su es la siguiente:

    su [opciones] [nombre_de_usuario]
    

    Puedes modificar tu código para utilizar el comando su en lugar de login de la siguiente manera:

    #!/usr/bin/python3
    import subprocess
    import cgi
    
    print()
    
    cred = cgi.FieldStorage()
    
    username = cred.getvalue("user")
    password = cred.getvalue("password")
    
    # print(username)
    # print(password)
    
    cmd = f"echo {password} | su {username}"
    # cmd = "ls -la"
    
    print(cmd)
    
    output = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, text=True)
    
    print(output)
    

    Ten en cuenta que proporcionar la contraseña de esta manera no se recomienda y es mejor utilizar métodos de autenticación seguros como las claves SSH.

Comments are closed.