#!/usr/bin/perl -w my $benutzername = "test"; my $passwordold = "password"; my $passwordnew = "freeSt19"; $pwd = (getpwnam($benutzername))[1]; #check, if the user knows his old password: if (crypt($passwordold, $pwd) ne $pwd) { die "Sorry...\n"; } else { print "ok\n"; } my $cryptedShadowString = `echo "$passwordnew"|openssl passwd -1 -stdin`; chomp($cryptedShadowString); my @Zeilen = (""); open(DATA, ") { push(@Zeilen,$_); } close(DATA); #Write the new shadow-file open(SHADOW, ">/etc/shadow"); for(@Zeilen){ if( $_ =~ m/^$benutzername/){ my @pwField = split( /:/, $_); $pwField[1] = $cryptedShadowString; print SHADOW $pwField[0].":".$pwField[1].":".$pwField[2].":".$pwField[3].":".$pwField[4].":".$pwField[5].":".$pwField[6].":".$pwField[7].":".$pwField[8]; }else{ print SHADOW $_; } } close(SHADOW); $mode = 0640; chmod $mode, "/etc/shadow"; `chown root /etc/shadow`; `chgrp shadow /etc/shadow`;