Re: API de Wapt para interfaz web
Publicado: 5 de junio de 2019 - 09:39
Hola, hola, buenas noches, ya estoy de vuelta después de arrancarme los pocos pelos que me quedan.
Así que tengo algunas noticias.
Finalmente logré descifrar la clave sin contraseña; no es particularmente seguro, pero es una demostración. Así que modifiqué mi código PHP para incluir la línea
sudo -u wapt /opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add eliminar
(comando que creé para automatizar todo)
El problema es que el comando no devuelve nada y no funciona, así que tomé la iniciativa y descubrí que por alguna razón, sin importar los derechos que le otorgue, nginx no puede hacer sudo.
La solución que utilicé fue modificar el usuario en php-fpm usando wapt.
Si ejecuto el comando `whoami` en el script PHP, devuelve `wapt`, así que estoy usando el usuario correcto. También modifiqué mi comando..
/opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add eliminar
ya que se supone que sudo es innecesario.
Y sorprendentemente, todavía no funciona.
Entonces modifiqué el archivo /etc/passwd para permitir la conexión con el usuario wapt para poder conectarme y probar el comando directamente en la consola.
Y sorprendentemente ¡funciona!
Entonces asumí que algo en Python estaba bloqueando PHP.
Así que agregué declaraciones de impresión a cada línea de mi código:
Y PHP devuelve:
/opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add remove1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 19 20
Lo que significa que está atascado aquí:
¿Alguna idea de por qué PHP está bloqueando como usuario WAPT aquí?
Sistema: CentOS 7
Versión de Wapt: 1.7.4
Versión de PHP: 7.2.19
Así que tengo algunas noticias.
Finalmente logré descifrar la clave sin contraseña; no es particularmente seguro, pero es una demostración. Así que modifiqué mi código PHP para incluir la línea
sudo -u wapt /opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add eliminar
(comando que creé para automatizar todo)
El problema es que el comando no devuelve nada y no funciona, así que tomé la iniciativa y descubrí que por alguna razón, sin importar los derechos que le otorgue, nginx no puede hacer sudo.
La solución que utilicé fue modificar el usuario en php-fpm usando wapt.
Si ejecuto el comando `whoami` en el script PHP, devuelve `wapt`, así que estoy usando el usuario correcto. También modifiqué mi comando..
/opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add eliminar
ya que se supone que sudo es innecesario.
Y sorprendentemente, todavía no funciona.
Entonces modifiqué el archivo /etc/passwd para permitir la conexión con el usuario wapt para poder conectarme y probar el comando directamente en la consola.
Y sorprendentemente ¡funciona!
Entonces asumí que algo en Python estaba bloqueando PHP.
Así que agregué declaraciones de impresión a cada línea de mi código:
Código: Seleccionar todo
from waptpackage import PackageEntry,WaptLocalRepo
from waptcrypto import SSLCABundle,SSLPrivateKey,SSLCertificate
import sys
arg=""
#Configuration
certpub="/opt/wapt/wapt.crt"
privatekey="/opt/wapt/wapt.pem"
if len(sys.argv)>2:
for i in sys.argv:
if not i==sys.argv[0]:
arg=arg+i+" "
arg=arg.split("add")
print("1")
option=arg[1].split("remove")
print("2")
uuid_machine=arg[0]
print("3")
adddepend=option[0].split(" ")
print("4")
removedepend=option[1].split(" ")
print("5")
adddepend.remove("")
print("6")
removedepend.remove("")
print("7")
adddepend.remove("")
print("8")
removedepend.remove("")
print("9")
ca_bundle = SSLCABundle()
print("10")
signers_bundle = SSLCABundle()
print("11")
signers_bundle.add_certificates_from_pem(pem_filename=certpub)
print("12")
key = SSLPrivateKey(privatekey)
print("13")
pe = PackageEntry(waptfile = "/var/www/html/wapt-host/%s.wapt" % uuid_machine)
print("14")
depends = pe.depends.split(',')
print("15")
if len(adddepend)>0:
print("16")
for dep in adddepend:
if not dep in depends:
depends.append(dep)
if not len(removedepend)<=0:
print("17")
for dep in removedepend:
if dep in depends:
depends.remove(dep)
print("18")
pe.depends = ','.join(depends)
print("19")
pe.inc_build()
print("20")
pe.sign_package(private_key=key,certificate = signers_bundle.certificates())
print("21")
print("Modification reussite")
else:
print("Erreur pas assez d arguments ont ete saisis")
/opt/wapt/bin/python /opt/wapt/testarg.py 0019ECDE-E109-DE11-AEAF-0025111B87F7add remove1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 18 19 20
Lo que significa que está atascado aquí:
Código: Seleccionar todo
pe.sign_package(private_key=key,certificate = signers_bundle.certificates())Sistema: CentOS 7
Versión de Wapt: 1.7.4
Versión de PHP: 7.2.19