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.

Cómo ejecutar un comando como administrador (root) en C o C++ sin PAM en Linux con autenticación de contraseña.

TL;DR ¿Cómo funcionan, por ejemplo, su o sudo sin PAM?

Hola,

Quiero jugar con suid y cosas,
Ya tengo la parte de SUID y el bit de SUID
y cosas, pero el problema es que no me está pidiendo
una contraseña y quiero que pida una contraseña
y encuentro su y sudo bastante desordenados en el código fuente
Estoy muy confundido.

He buscado en la documentación de setsuid() y getuid()
y no parece haber nada sobre
autenticación de contraseñas.

¿Cómo se lograría la autenticación de contraseñas
sin PAM, uso sudo sin pam
y funciona bien, su con pam, ambos funcionan
bien, estoy confundido cómo hacerlo funcionar.

Este es el código en C++ que tengo actualmente:

// a.cc

#include <iostream>
#include <unistd.h>
#include <cerrno>
#include <cstring>

int main(int argc, char *argv[]) {
    uid_t user = getuid();
    if (setuid(0) == -1) {
        std::cerr << strerror(errno) << '\n';
        return 1;
    }

    system(argv[1]);

    if (setuid(user) == -1) {
        std::cerr << errno << '\n';
        return 1;
    }
    return 0;
}

y después de compilarlo, por ejemplo, con GCC y el archivo llamado a.cc:

$ g++ a.cc -o a

y dándole permisos de ejecución y SUID y el
propiedad de root

$ sudo chown root:root ./a
$ sudo chmod 4555 ./a

simplemente funciona, pero sin autenticación de contraseña.

$ ./a id

uid=0(root) gid=1000(ari) groups=1000(ari),5(tty),10(wheel),27(video),78(kvm),250(portage)

(ari es mi usuario)

Incluso después de cerrar sesión o ejecutar sudo -k para
finalizar el tiempo de espera de sudo, sigue funcionando sin contraseña
autenticación.

  • Código fuente de Su: https://github.com/shadow-maint/shadow/blob/master/src/su.c
  • Código fuente de Sudo: https://github.com/sudo-project/sudo/blob/main/src/sudo.c

Gracias de antemano por las respuestas.</unistd.h>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sin PAM, su y sudo normalmente dependerían de otros medios de autenticación, como verificar la contraseña en los archivos /etc/passwd o /etc/shadow. Sin embargo, este no es un método seguro de autenticación, ya que las contraseñas se pueden descifrar fácilmente. PAM proporciona una forma más flexible y segura de autenticación al permitir el uso de diversos mecanismos de autenticación como LDAP, Kerberos, tarjetas inteligentes, etc. Por lo tanto, se recomienda encarecidamente utilizar PAM para fines de autenticación. Si tienes dudas sobre cómo implementarlo en tu código, puedes consultar las implementaciones de código abierto existentes de PAM, como Linux-PAM.

Comments are closed.