Avatar billede logan-raarup Nybegynder
15. april 2001 - 14:55 Der er 3 kommentarer og
1 løsning

Password skifter

Jeg vil lave et php script, der gør at brugere kan skifte deres password på min server - online.
Jeg kører AIX, og til at skifte password bruger man kommandoen \'passwd\'. Hvorefter man skal indtaste det gamle password og det nye 2 gange. Men så vidt jeg ved kan php scriptet ikke indtaste det gamle + 2 x det nye password, da det er en del af passwd-programmet.
Derfor leder jeg efter et script/program der kan skifte dette password. Programmet skal kunne skifte passwordet med et par argumenter (på en linje) som f.eks.:
/sti/til/programmet -u [bruger] -o [gammel password] -n [ny password]
Eller:
/sti/til/programmet -u [bruger] -n [ny password]

Password\'sne er krypterede og placeret i en text fil der hedder /etc/security/passwd.
Mht. krypteringen peger det ene link nedenfor, på en post i en nyhedsgruppe hvor man har lavet et program der krypterer et password.

Jeg har her et par links til AIX dokumenter, der nok kan hjælpe meget.

http://groups.google.com/groups?hl=da&lr=&group=comp.unix.aix&safe=off&ic=1&th=dd5859da1d6c0bbc&seekd=980133764#980133764

http://www.unet.univie.ac.at/aix/libs/basetrf1/getuserpw.htm#A16691aca

http://www.unet.univie.ac.at/aix/cmds/aixcmds1/chsec.htm

http://www.unet.univie.ac.at/aix/files/aixfiles/passwd_security.htm#A1219924

Lige nu er der 300 points på spil, men sig bare til hvis du vil have flere for at lave det.
Avatar billede logan-raarup Nybegynder
15. april 2001 - 15:40 #1
Programmet skulle sådan set ikke være så svært at lave (tror jeg da ikke!). Det skal gøre følgende:
1) Åbne /etc/security/passwd .
2) Kryptere det nye password, med følgende kode:
  #include <stdio.h>
 
  int main(int argc, char* argv[])
  {
  printf (\"%s\\n\",crypt(argv[1], argv[2]));
  }
3) Overskrive det gamle password i /etc/security/passwd, med det nye, krypterede password.

Indholdet af /etc/security/passwd kunne f.eks. se sådan her ud:

brugernavn1:
  password = [krypteret password]
  lastupdate = 623078865
  flags = ADMCHG
brugernavn2:
  password = [krypteret password]
  lastupdate = 623078865
  flags = ADMCHG
Avatar billede logan-raarup Nybegynder
15. april 2001 - 15:48 #2
Nu er der 500 p. på spil!
Avatar billede logan-raarup Nybegynder
16. april 2001 - 12:16 #3
Glem det.
Avatar billede logan-raarup Nybegynder
16. april 2001 - 19:29 #4
Download pakken aix.tools hos http://freeware.bull.net de har lavet et program i C, der kan gøre det. Her er source koden:


/*
    chpass - change a user\'s password from a script
    Copyright (C) 1996, 1997 GROUPE BULL

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA

  Use the following command to compile:

    # cc -o  chpass chpass.c -ls

*/

#include <userpw.h>
#include <sys/types.h>
#include <pwd.h>
#include <usersec.h>
#include <errno.h>
#define  KEYCRYPTLEN 2
void usage (){
  printf(\"Usage: chpass user passwd\\n\");
  exit(1);
}

main (int argc,char *argv[]){
int id;
struct userpw *p;
char user[PW_NAMELEN], pass[PW_PASSLEN], pass2[KEYCRYPTLEN];
char *nwpass;
struct userpw  newpw;          /* passwd structure if getuserpw fails    */
if (argc != 3) usage();

/* calcul du passwd crypte ...    */

strcpy(user,argv[1]);
strcpy(pass,argv[2]);
strncpy(pass2,pass,2);
nwpass=(pass,pass2);

/* infos DEBUG
  printf(\"passwd crypti : %s\\n\",nwpass);
  printf(\"Avant modif : \\n\");
  printf(\"------------- \\n\");
*/

/* open data bases for read and write */
        setpwdb (S_READ|S_WRITE);
        setuserdb (S_READ|S_WRITE);

p=getuserpw(user);
/* On verifie si le user existe ... */
                      /* Check if the user exists */
                        if (getuserattr(user,S_ID,&id,SEC_INT))
                        {
                printf(\"\\nuser %s inconnu ...\\n\\n\",user);
                                return(-1);
                exit(ENOENT);
                        }

if (!(p=getuserpw(user))){
printf(\"structure passwd vide  %s  ...\\n\\n\",user);
printf(\"%s : user\\n\",user);
                        /* initialize new userpw struct  */
                        strcpy(newpw.upw_name,user);
    newpw.upw_passwd = nwpass;
        newpw.upw_lastupdate = time ((long *) 0);
        newpw.upw_flags =0;
 


printf(\"Nom        : %s\\n\",user);
  printf(\"Password  : %s\\n\",newpw.upw_passwd);
  printf(\"LastUpdate : %u\\n\",newpw.upw_lastupdate);
  printf(\"Flags      : %u\\n\\n\\n\",newpw.upw_flags);

putuserpwhist(&newpw);
putuserattr(user,S_PWD,\"!\",SEC_CHAR);
putuserattr(user,NULL,NULL,SEC_COMMIT);
p=getuserpw(user);

/*putuserpw(p); */




}
/* infos DEBUG
  printf(\"Nom        : %s\\n\",p->upw_name);
  printf(\"Password  : %s\\n\",p->upw_passwd);
  printf(\"LastUpdate : %u\\n\",p->upw_lastupdate);
  printf(\"Flags      : %u\\n\\n\\n\",p->upw_flags);
*/

/* on met a jour la structure memoire ... */

strcpy(p->upw_passwd,crypt((const *)pass,(const *)pass2));
/* infos DEBUG
  printf(\"Apres modif MEMOIRE : \\n\");
  printf(\"------------- \\n\");
  printf(\"Nom        : %s\\n\",p->upw_name);
  printf(\"Password  : %s\\n\",p->upw_passwd);
  printf(\"LastUpdate : %u\\n\",p->upw_lastupdate);
  printf(\"Flags      : %u\\n\\n\\n\",p->upw_flags);
*/

/* -----------------------------  MAJ du passwd dans la base */

setpwdb(S_WRITE);
putuserpw(p);
endpwdb();
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester