in reply to Running a remote passwd command.

If NIS is running, then passwd would theoretically function locally but use the NIS database. The issue therefore becomes enabling the non-priveleged user to do a privileged action. The C way of doing this is to write a program that:

- performs a setuid or setruid system call to become root

- performs further system calls, e.g. setpwinfo if Solaris, to set the password

and then set the sticky bit of the resulting executable to enable the setruid for the O/S.

I don't see a way to convert the setruid part into perl - I think instead you'd need to make it a linked-in C subroutine -- it is practically a one-liner in C anyway. Passwd::Solaris and Passwd:Linux provide the replacement for actually setting the password. PAR can create the required executable whose sticky bit should be set immediately after installation (e.g. in the manager's home) as before (setting the sticky bit of a perl script will probably be insufficient). See also PAR Tutorial. Alternative ways to make an executable from perl are perlcc and Perl2Exe.

Everything but the troll

Replies are listed 'Best First'.
Re^2: Running a remote passwd command.
by glasswalk3r (Friar) on Jan 11, 2006 at 16:40 UTC

    The module Passwd::Linux does work fine but the problem is the module doesn't setup all the flags in the /etc/shadow. If this is not an issue for you than just use it.

    Another inconvenience with this module is that doesn't have an function to generate the password hash so you will need to make it yourself.


    Alceu Rodrigues de Freitas Junior
    --------------------------------------
    glasswalk3r@yahoo.com.br
    http://www.imortais.cjb.net
    "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill