Administration des comptes linux par le web

Bonjour,

Personne ne connaitrait un outils d’administration de compte pour linux, adapté pour debian ( création de compte, suppression…ou les utilisateurs peuvent modif leur mdp, etc… ) mais en php, sans plein de truc autours comme ISPConfig ou VHCS ( gestion dns, mail, etc…) , un outil simple et opensource…

J’ai cherché dans google et hotscript, mais google n’est pas mon ami

Merci

:wink:

hello,

Peut etre webmin ? ou bien créer ta propre interface php.

[quote=“stonfi”]hello,

Peut etre webmin ? ou bien créer ta propre interface php.[/quote]

oui webmin est très bien mais j’ai besoin d’un script en php qui fait la gestion des comptes en opensource car apres j’ai besoin d’ajouter des étapes supplémentaires, pour mon besoin, comme la création ldap, etc…

le truc cest que en php (safemode off, et www-date dans sudo ) quand on utilise useradd , il prend pas le mot de passe passe en paramatre…
alors je me suis dis que y a bien quelquun qua deja fait ca en opensource

si vous connaissez un truc comme , je prends l’info avec plaisir

bonsoir,
ben tu mets un NOPASSWD dans sudoers pour la commande que tu veux lancer … inutile de te dire que ça fait pas trop secure , pour un truc aussi important que adduser. Ou alors, tu définis bien dedans la commande en entier avec ses paramètres, que sudo exécutera (style avec un shell à /bin/false) et non ‘/usr/sbin/adduser’ tout court …
Webadmin c’est pas trés bon, le mieux je pense que c’est LAMP, non ?

[quote=“usinagaz”]bonsoir,
ben tu mets un NOPASSWD dans sudoers pour la commande que tu veux lancer … inutile de te dire que ça fait pas trop secure , pour un truc aussi important que adduser. Ou alors, tu définis bien dedans la commande en entier avec ses paramètres, que sudo exécutera (style avec un shell à /bin/false) et non ‘/usr/sbin/adduser’ tout court …
Webadmin c’est pas trés bon, le mieux je pense que c’est LAMP, non ?[/quote]

oui , il y aura une page d’admin protegée , jai deja fais ce que tu me dis, mais le probleme cest qu’aucun mot de passe n’est defini quand on utilise useradd dans un script php exécuté par shell_exec() ou system(), donc cest tres con, ou alors je dois définir le mdp avec passwd -d mais cest pas terrible non +

La méthode que j’avais utilisé était de faire un script Perl modifiant directement /etc/passwd ou /etc/shadow (pour ma défense, c’était en 2000). Pas terrible d’un point de vue sécurité je pense. Je te livre une version brute de décoffrage. Le script doit être suid_root.

[code]#!/usr/bin/perl
use Time::Local;
use File::Copy;
print “Content-type: text/html\n\n”;
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
$FORM{$name} = $value;
}
$RACINE="/etc/";

suivant où sont les mots de passe

#$PASS = “shadow”;
#$PASS_TMP = “shadow1”;
$PASS=“passwd”;
$PASS_TMP = “passwd1”;
$user = $FORM{‘user’};

Mettre un aléa sur “LL”

$new_pwd = crypt($FORM{‘new_pwd’}, “LL”);
$old_pwd = $FORM{‘old_pwd’};
print “”;
print “”;
print "Conclusion ";
print “”;
print “”;
print “”;
print “


”;
print “
  • Utilisateur = $user
  • \n”;
    #print
  • Ancien mot = $old_pwd
  • \n”;
    #print
  • Nouveau mot = $FORM{‘new_pwd’}
  • \n”;
    print “
    ”;

    attend une éventuelle fin

    while (-e “/tmp/__script_pwd”) {
    }
    #Path securité
    $ex_path = $ENV{“PATH”};
    $ENV{“PATH”} = “/bin:/usr/bin”;
    #let’sgo 1) drapeau
    system(“touch /tmp/__script_pwd”);

    2) on y va

    open(FIN,">".$RACINE.$PASS_TMP) || die(“M’enfin ! Y a un bug !”);
    open(DEB,$RACINE.$PASS);
    $heure = localtime();
    $logger = “Appel script_passwd a $heure\n”;
    open(LOG,">>/var/log/motdepasse.log");
    print LOG $logger;
    close(LOG);
    $logger = “Appel sans succes\n”;
    while() {
    if (m/^$user:/) {
    $ligne = $_;
    ($qui , $mot ,$fin) = ($ligne =~ /([^:]+):([^:]+):(.*)/);

    print “

  • ”,$qui;

    cas d’un changement de mot de passe

        $heure = localtime();
        if (($mot ne "!") && ($mot ne "*")) {
        $cle = substr ($mot,0,2);
        print "<LI>",crypt($old_pwd,$cle),"<BR></LI>\n";
        $logger = "Changement pour $qui a $heure\n";
    }
    

    sinon utilisateur sans mot de passe

        else { print "<LI>Creation d'un mot de passe (circonstances enregistrees)<BR></LI>\n";
           print "<LI> origine: machine $ENV{'REMOTE_ADDR'} heure $heure<BR></LI>\n";
       $logger = "Creation pour $qui par $ENV{'REMOTE_ADDR'} a $heure\n";
        if ((($mot eq crypt($old_pwd,$cle)) || ($mot eq "!")|| ($mot eq "*")) &&
            ($FORM{'new_pwd'} eq $FORM{'new_pwd_ver'})) {
            print "<LI>Changement de mot de passe de ",$user,"<BR></LI>\n";
            $logger = "OK: ".$logger;
            print FIN $qui,":",$new_pwd,":",$fin,"\n";
        }
        else { print FIN $ligne;}
    }
    else { print FIN };
    

    }
    print “

  • Si il y a eu changement de mot de passe, cela est ecrit ci-dessus sinon refaire la manoeuvre
  • ”;
    close(FIN);
    close(DEB);

    affichage environnement

    open(LOG,">>/var/log/motdepasse.log");
    print LOG $logger;
    close(LOG);
    #print


    ”;
    #while (($key,$val) = each %ENV) {

    print “

  • $key =$val
  • \n”;}

    print “


    ”;
    unlink ($RACINE.$PASS.".old");
    copy ($RACINE.$PASS , $RACINE.$PASS.".old");
    rename $RACINE.$PASS_TMP , $RACINE.$PASS;
    chown 0,0,$RACINE.$PASS;
    #unlink ($RACINE.$PASS.".old");
    #rename $RACINE.$PASS , $RACINE.$PASS.".old";
    #rename $RACINE.$PASS_TMP , $RACINE.$PASS;
    #chown 0,0,$RACINE.$PASS;

    chmod 0600,$RACINE.$PASS;

    chmod 0644,$RACINE.$PASS;
    #$ex_path = $ENV{“PATH”};
    #$ENV{“PATH”} = “/bin:/usr/bin”;
    #while (($key,$val) = each %ENV) {

    print “

  • $key =$val
  • \n”;}

    #print


    ”;

    chdir “/var/yp”;
    system (“make > /dev/null”);

    OK, c’est bon

    unlink “/tmp/__script_pwd”;
    $ENV{“PATH”} = $ex_path;
    print “”;
    print “”;
    print “”;
    [/code]