[Perl] Script ára accesar cuentas

Gunnar Wolf gwolf@campus.iztacala.unam.mx
Thu, 11 Jul 2002 15:47:08 -0500 (CDT)


> Lo que pasa es lo siguiente si corro el script me marca esto:
> Password:
> su: incorrect password
> Can't exec "password": No such file or directory at usuario.pl line 5.
>
> donde la linea 5 dice:
> print `password`;
>
> Espero que esta vez si me haya explicado.

Ya.

El problema que tienes es que así no se hace ;-)

Cuando ejecutas algo entre comillas inversas, Perl abre un shell, corre
el comando indicado, guarda la salida y cierra el proceso hijo. Lo que
estás haciendo es primero ejecutar 'su -', no darle nada, y después de eso
ejecutas 'password' - que no existe.

Ahora, su verifica siempre que la contraseña provenga de una terminal - Lo
de menos sería, por ejemplo, hacer un 'echo contraseña | su - usuario'
desde el shell. Es muy inseguro. Peor aún si dejas la contraseña guardada
en un script.

Puedes intentar:
- Activarle el SUID al script en cuestión. Ahora, Perl no te va a permitir
  hacerlo tan fácil, pues es un hoyote de seguridad. Probablemente tengas
  que instalar un paquete adicional, como el 'perl-suid' en Debian.
- Separar el programa en un cliente y un servidor. Para que platiquen
  puedes buscar mecanismos IPC, mecanismos de memoria compartida, sockets,
  etc. Probablemente lo más simple sea la memoria compartida, aunque jamás
  lo he utilizado. Yo siempre he usado sockets para esto.
- Puedes usar el programa 'sudo', que es como su pero selectivo (puedes
  indicar qué tiene permiso de hacer un usuario con la identidad de otro).
  Creo que esta será la mejor opción.
- Puedes replantear el problema y darte cuenta que no requieres ser root.
  Esta es, definitivamente, la mejor opción - siempre que sea viable.

Saludos,

-- 
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF