Migrar usuarios en Linux (script)
Muy buenas, a continuación os pongo un script que cree hace un tiempo par poder migrar unos cuantos miles de usuarios de una máquina Linux a otra (Linux tambien). El script està hecho en perl y requiere el fichero "vars.pl" (Hay algunas líneas comentadas, ya que lo fuí modificando en función de mis intereses, pero si sabeis un poco de perl sabreis como adaptarlo a vuestras necesidades, es muy sencillo).
NOTA: Los datos los busca en los ficheros "users.src", "pwd.src" y "groups.src" para evitar sustos... (se trata de una copia de los ficheros que se encuentran en "/etc/" sin la extensión ".src"
NOTA: Los datos los busca en los ficheros "users.src", "pwd.src" y "groups.src" para evitar sustos... (se trata de una copia de los ficheros que se encuentran en "/etc/" sin la extensión ".src"
create_users.pl
#!/usr/bin/perl
####
# Historia:
# 11/02/2004 - Axel - Creacio
#
#
# Descripcio:
# Migracio d'usuaris d'una maquina a un altre,
# demana el password per cada usuari creat.
# Crea els grups agafant-los d'un fitxer de
# tipus /etc/group
# Agafa els usuaris d'un fitxer, aixi com tota
# la resta de variables del fitxer /etc/passwd
#
####
########################## FUNCTIONS ##########################
sub loadGroups
#
# Carreguem el fitxer amb els grups que volem migrar.
# Nota: El fitxer ha de contindre un nom de grup per linea
# (es la manera de mantindre un control de grups creats)
{
local($target,*array)=@_;
open(F_IN,"$target") || die("error $!: cannot open groups file\n");
my($pointer)=0;
while(!eof(F_IN)) {
chop($line=
$array[$pointer]=$line;
$pointer++;
}
if ($debug==1) {
print "\n Grups a migrar:\t @array\n";
}
close(F_IN);
}
##############################################################
sub loadUsers
#
# Carreguem el fitxer amb els usuaris que volem migrar (al array)
# Nota: El fitxer ha de seguir l'estructura del /etc/passwd
{
local($target,*array)=@_;
open(F_IN,"$target") || die("error $!: cannot open users file\n");
my($pointer)=0;
while(!eof(F_IN)) {
chop($line=
$array[$pointer]=$line;
$pointer++;
}
if ($debug==1) {
print "\n Usuaris a migrar:\t @array\n";
}
close(F_IN);
}
##############################################################
sub loadPass
#
# Carreguem el fitxer amb els passwords encriptats pels usuaris
# Nota: El fitxer ha de seguir l'estructura del /etc/shadow
{
local($target,*array)=@_;
open(F_IN,"$target") || die("error $!: cannot open passwords file\n");
my($pointer)=0;
while(!eof(F_IN)) {
chop($line=
$array[$pointer]=$line;
$pointer++;
}
if ($debug==1) {
print "\n Passwords a migrar:\t @array\n";
}
close(F_IN);
}
############################ MAIN ############################
require "vars.pl";
## ##
# Inicialitzacio #
## ##
#
# Carreguem els grups en memoria
loadGroups($target_groups,*groups);
$ngroups=@groups;
loadUsers($target_users,*users);
$nusers=@users;
loadPass($target_pass,*passwds);
#
# Comencem la migracio dels grups
#for ($i=0;$i<$ngroups;$i++) { # $groups[$i]=~s/\n//g; # @group=split(":",$groups[$i]); # if ($debug==1) { # print "\naddgroup $group[0]"; # } # else { # print "\ngroupadd $group[0] \n"; # system("$system_dir/addgroup","group[0]"); # } #} $count=0; for ($i=0;$i<$nusers;$i++) { $users[$i]=~s/\n//g; @user=split(":",$users[$i]); $passwds[$i]=~s/\n//g; @passwd=split(":",$passwds[$i]); if ($user[3]==$numgroup) { $count++; if ($debug==1) { print "\nuseradd -g $group_in_vars -c \"$user[4]\" -d $user[5] -s $user[6] -p '$passwd[1]' $user[0]"; # print "\npasswd $user[0]"; } else { # system("$system_dir/deluser","$user[0]"); print "\nuseradd -g $group_in_vars -c \"$user[4]\" -d $user[5] -s $user[6] -p $passwd[1] $user[0] \n"; system("$system_dir/useradd","-g","$group_in_vars","-c","\"$user[4]\"","-d","$user[5]","-s","$user[6]","-p","$passwd[1]","-M","$user[0]"); # print "\npasswd $user[0]\n"; # system("$system_dir/passwd","$user[0]"); } } else { print "\nNo es crea usuari, no pertany al grup $numgroup"; } print "\n\nUsuaris creats: $count"; }
----
A continuación os pongo el vars.pl
#########################################
# Variables d'entorn de create_users.pl #
#########################################
# Nom del servidor on realitzarem la migracio
$local_server="servername";
# Directoris locals dels executables necessaris
$system_dir="/usr/sbin";
# Localitzacio del fitxer de grups
$target_groups="groups.src";
# Localitzacio del fitxer de usuaris
$target_users="users.src";
# Localitzacio del fitxer de passwords
$target_pass="pwd.src";
# Grup al que sera afegit l'usuari
#$group_in_vars="";
$group_in_vars="smmsp";
# Grup al que pertany l'usuari del users.src en numero
$numgroup=12;
# Mode debug
# 0 -> no s'executa en mode debug
# 1 -> s'executa en mode debug
$debug=0;
1;
----
Espero que os haya sido de utilidad este script. En futuros posts os pondré otros muy útiles.
0 Comments:
Publicar un comentario
<< Home