IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

création nouveaux utilisateurs


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut création nouveaux utilisateurs
    Bonjour à toutes et à tous,

    Il y a quelques mois j'ai installé un un serveur Linux et j'ai créé des comptes utilisateurs avec un script shell.
    Je viens de recevoir une liste mise à jour avec de nouveaux utilisateurs par l'intermédiaire d'un fichier csv.

    Pour ces nouveaux utilisateurs je souhaiterais les créer sans utiliser mon script de base et en PERL pour ne pas être obligé d'utiliser adduser car sinon je vais réinitialiser tous les mots de passe et perturber ceux qui sont déjà créés.

    Le fichier csv est constitué ainsi

    "Nom", "Prenom", "Groupe"

    J'ai commencé comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
     my $ligne;
     my $PREN;
     my $NOM;
     my $GRP;
     open FICH, "< ./liste.csv" or die "Fichier innexistant";
     while ($ligne = )
     {
     my ($PREN, $NOM, $GRP) = split(/,/);
     chop; 
    my ($PREN, $NOM, $GRP); print "$ligne \n"; 
    }
    Mais je pense qu'il faut que j'utilise une table de hachage.

    Là je suis bloqué!

    Merci à toutes celles et à tous ceux qui voudront bien m'aider

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Je ne pense pas que tu aies besoin de charger tes données dans un hash avant traitement. Tu peux le faire au fur et à mesure que tu parcours le fichier.

    Tu veux ajouter tes utlisateurs directement à /etc/passwd ? Quelle est ta politique de user id ? Autre question : as-tu de nouveaux groupes à ajouter à /etc/group ?

    Bon en gros, soit tu utilises un parser cvs, soit tu y va un peu brutalement, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    use strict; use warnings;
     
    open my $datafh, '<', 'list.cvs' or die "$!";
    while (my $line = <$datafh>) {
       next unless my ($first, $last, $group) = 
            $line =~ /"([^"]+)",\s*"([^"]+)",\s*"([^"]+)"/g;
       # fais ce que tu veux de $last, $first et $group ;
    }
    Après si tu as besoin de lire /etc/passwd pour déterminer un user id, c'estpas sorcier non plus.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Pour ces nouveaux utilisateurs je souhaiterais les créer sans utiliser mon script de base et en PERL pour ne pas être obligé d'utiliser adduser car sinon je vais réinitialiser tous les mots de passe et perturber ceux qui sont déjà créés.
    Mais qu'il soit appelé en perl ou en shell, il va falloir de toute façon utiliser adduser ou un équivalent pour ajouter des comptes Unix.
    Par ailleurs s'il n'y a que nom et prénom dans le fichier d'entrée, il va te falloir générer des logins utilisateur.

  4. #4
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    J'avais l'impression qu'il voulait le faire à la main comme on le faisait à l'époque sur les Unix qui n'avait pas de adduser.

    N'empêche il peut toujours parser le csv comme ci-dessus et appeler adduser.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 6
    Par défaut Ajout utilisateurs
    Bonjour,

    Je tiens à vous remercier d'avoir répondu à ma question et à m'excuser de vous répondre si tard. En effet j'ai été absent quelques jours et ne disposais pas d'internet.
    Donc je découvre vos réponses et vos interrogations quand à ma demande.
    1) Réponse à IBLIS pour sa question du 22/02/2010 à 23h15:
    Effectivement je n'ai probablement pas besoin de faire un hash avant traitement. Mais cela me permettrait peut-être d' éviter de multiplier les expressions régulières et les instructions pour chaque variable??? A voir.

    Oui je veux ajouter directement les utilisateurs à /etc/passwd.
    Politique user ID = groupe+1ère lettre du prénom+nom ( pour "marcel","dupont","A1" = A1mdupont et pour "maurice","dupont","P2" = A2mdupont).
    J'aurai de nouveaux groupes à ajouter car un nouveau service avec des subdivisions va être créé et d'après la liste provisoire que j'ai il y a des homonymes avec des utilisateurs existants donc pour les droits sur les accès aux fichiers il est important de gérer finement ces groupes. Ce que je sais faire sous Windows avec les GPO, mais là je galère un peu.

    2) Réponse à ESTOFILO à sa question du 23/02/210 10h53:users
    IBLIS a effectivement raison je veux le faire à la main.
    Actuellement je travaille et fais mes test sous debian (donc j'avais fait un script en shell qui fonctionne très bien) mais je dois migrer sur freebsd pour la gestion des utilisateurs et je préfère ne pas utiliser adduser afin de pas être coincé par un système Unix que ne pourrait pas utiliser cette commande. Donc le Perl est parfait.

    Je n'ai pas eu le temps de tester le script d'IBLIS.
    Mais j'ai pu tout de même continuer à travailler sur le sujet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    #!/usr/bin/perl -w
     
    #variables pour lire les fichiers liste.csv, /etc/passwd et /etc/group.
    my $ligne;
    my $passwd;
    my $group;
     
    #variables pour verifier l'existant.
    my $login1;
    my $login2;
    my $groupe2 = "";
    my $i = 1;
    my $global;
     
    #variables pour creer les groupes.
    my $exist;
    my $gidgroup;
    my $passgroup;
    my $userlist;
    my $k = 1;
     
    #variables pour creer l'utilisateur.
    my $prenom;
    my $nom;
    my $login;
    my $groupe;
    my $pass;
    my $crypt;
    my $uiduser;
    my $giduser;
    my $homedir;
    my $j = 1;
    my $l = 1;
    open (LISTE, "<liste.csv") or die "Le fichier liste.csv n'existe pas";
    while (my $ligne = <LISTE>){
     
    #Pour affecter les differents parametres de la liste.
      $ligne =~ s/"//g;
      $ligne =~ s/\n//g;
      split(/,/ ,$ligne);
      $prenom = $_[0];
      $nom    = $_[1];
      $groupe = $_[2];
      $pass   = $_[2].$_[1];
      $login  = $_[0].$_[1];
      $exist  = "0";
      $login1 = $login;
      $global = "";
     
    #Pour creer l'utilisateur s'il n'existe pas.
      open (RPASSWD, '</etc/passwd') or die "Le fichier /etc/passwd ne peut pas etre lu";
      while (my $passwd = <RPASSWD>) {
     
        split(/:/ ,$passwd);
        $login2 = $_[0];
        $uiduser = $_[2];
        $giduser = $_[3];
        $j = $uiduser + 1;
        $l = $giduser + 1;
        if ($login1 eq $login2) {
        $login1 = $login;
        $login1 = "$login$i";
        $i = $i + 1 ;
     
        }
     
      }
     
      close RPASSWD;
      open (WPASSWD, '>>/etc/passwd') or die "Le fichier /etc/passwd ne peut pas etre lu";
        print WPASSWD "$login1:x:$j:$l::/home/$login:/bin/sh \n";
      close WPASSWD;
     
    #Pour creer le groupe s'il n'existe pas.
      open (RGROUP,'</etc/group') or die "Le fichier /etc/group ne peut pas etre lu";
      while (my $group = <RGROUP>) {
     
        split (/:/ ,$group);
        $groupe2 = $_[0];
        $passgroup = $_[1];
        $gidgroup = $_[2];
        $userlist= $_[3];
        $k = $gidgroup + 1;
        $global = "$global$group";
     
        if ($groupe eq $groupe2){
     
          $exist = "1";
          chop($global);
          chop($global);
          $global = "$global,$login1 \n";
     
        }
     
      }
     close RGROUP;
     
      if ($exist eq "1" ){
        open (WGROUP, '>>/etc/group') or die "Le fichier /etc/group ne peut pas etre lu";
        print WGROUP $global;
        close WGROUP;
     
     }
      else {
     
        open (WGROUP, '>>/etc/group') or die "Le fichier /etc/group ne peut pas etre lu";
        print WGROUP "$groupe:x:$k:$login1 \n";
        close WGROUP;
     
      }
     
    #Pour ajouter le mot de passe.
      open (WMDP, '>>/root/mdp.txt') or die "Le fichier /root/mdp.txt ne peut pas etre lu";
      print WMDP $pass;
      close WMDP;
     
      open (WSHADOW, '>>/etc/shadow') or die "Le fichier /etc/shadow ne peut pas etre lu";
      $crypt= crypt('$pass','$1$');
      print WSHADOW "$login1:$crypt:13896:0:99999:7::: \n";
      close WSHADOW;
     
    }
     
    close LISTE;
    Et voilà le piètre résultat!
    Use of implicit split to @_ is deprecated at ./users.pl line 64.
    Use of implicit split to @_ is deprecated at ./users.pl line 92.
    Use of implicit split to @_ is deprecated at ./users.pl line 48.
    Le fichier /etc/passwd ne peut pas etre lu at ./users.pl line 81.

    Bonne journée

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Actuellement je travaille et fais mes test sous debian (donc j'avais fait un script en shell qui fonctionne très bien) mais je dois migrer sur freebsd pour la gestion des utilisateurs et je préfère ne pas utiliser adduser afin de pas être coincé par un système Unix que ne pourrait pas utiliser cette commande. Donc le Perl est parfait.
    C'est intéressant que tu cites freebsd, parce que c'est justement un système sur lequel cette méthode de modification directe du fichier /etc/passwd ne fonctionnera pas du tout. Freebsd utilise une base de données en interne, et /etc/passwd n'est en fait qu'une sorte de vue réduite à la lecture.
    Voir la commande pwd_mkdb pour plus d'infos.

    A l'inverse, en utilisant adduser ou équivalent, c'est très facile à porter sur un autre unix puisque tous offrent à peu près les mêmes commandes à ce niveau là.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le problème de la création d'utilisateur et de la connection
    Par nnn2050 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2005, 22h10
  2. création d'utilisateur et Connexion sur SQL Server 200
    Par da_latifa dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/07/2005, 11h26
  3. pb de création d'utilisateurs
    Par devalender dans le forum InterBase
    Réponses: 12
    Dernier message: 06/10/2004, 16h53
  4. Création d'utilisateurs
    Par damaker dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/05/2004, 15h18
  5. Création d'utilisateur sous PostgreSQL 7.3.2 avec PHP
    Par duongkhang dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 06/06/2003, 13h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo