Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

510
Views
Cómo ejecutar un comando como root con C o C++ sin pam en Linux con autenticación de contraseña

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

Hola,

Quiero jugar con suid y esas cosas, ya tengo la parte SUID y la parte SUID y esas cosas, pero el problema es que no me pide una contraseña y como quiero que pida una contraseña y encuentre su y sudo bastante destrozado en la fuente estoy muy confundido.

Revisé la documentación de setsuid() y getuid() y no parece que haya nada sobre la autenticación de contraseña.

¿Cómo se lograría la autenticación de contraseña sin PAM? Uso sudo sin pam y funciona bien, su con pam, ambos funcionan bien, estoy confundido sobre cómo lo haría funcionar

Este código C++ es lo que tengo ahora:

 // 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 con, por ejemplo, GCC y el archivo se llama a.cc:

 $ g++ a.cc -oa

y dándole permisos de ejecución y SUID y dando la propiedad a 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, aún funciona sin autenticación de contraseña.

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

Gracias por las respuestas de antemano

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Primero, lo básico: cada proceso tiene un ID de usuario y un ID de grupo (voy a ignorar los atributos complementarios como los ID de grupo adicionales).

El ID de usuario 0 es raíz. Eso es todo, fin de la historia.

Cuando tiene un proceso cuyo ID de usuario es 0, es un proceso raíz. Fin de la historia.

La forma en que un proceso adquiere su ID de usuario 0 es irrelevante. Si el ID de usuario de un proceso es 0, es un proceso raíz y eso es todo.

Cuando realiza los movimientos para configurar un proceso setuid, ese setuid(0) es en sí mismo, ya está. Eres un proceso raíz. Eso es todo. No hay nada más que decir al respecto.

setsuid() y getuid() documentación y no parece que haya nada sobre la autenticación de contraseña.

Correcto. Todo lo que hacen es ajustar/actualizar el ID de usuario. Eso es todo. No hay nada más que eso.

Los procesos su y sudo hacen lo siguiente:

  1. Son ejecutables setuid.
 $ ls -al /bin/su /bin/sudo -rwsr-xr-x. 1 root root 57504 Aug 17 04:59 /bin/su ---s--x--x. 1 root root 185440 Aug 7 13:17 /bin/sudo

¿Esto te parece familiar? Los permisos de su programa setuid hecho a mano se ven idénticos a esto, ¿no es así?

  1. Pero antes de ir más allá, exigen que proporcione una contraseña aceptable (o cumpla con otros criterios, de alguna forma o manera, no importa cuáles sean los detalles exactos de los criterios de autenticación aceptables, una contraseña en su caso, o una coincidencia aceptable en la configuración de sudo ). Si no lo hace, terminan sin que se lleve a cabo ninguna otra acción.

Toda la lógica de validación de contraseñas, que involucra PAM o algún otro marco de autenticación, es implementada por los propios procesos su y sudo . A menos que proporcione credenciales de autenticación aceptables (lo que sea que signifique para su o sudo ), finalizan sin que se lleve a cabo ninguna otra acción. Una autenticación exitosa da como resultado un shell, o un comando ejecutado, pero eso es por la razón muy simple y elemental de que los propios programas su y sudo usaron setuid (el bit de permiso y la llamada del sistema) para adquirir privilegios de root, como el primer orden de negocio.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!