# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Script para borrar backups de cuentas de cPanel eliminadas


Quienes usen cPanel sabrán que cuando eliminas un dominio o cuenta en el servidor, el backup que hay en ese momento de dicho dominio sigue almacenado y no se elimina. Esto provoca que queden restos de backups antiguos que probablemente no necesitemos.

Bien, hay un script que os pongo más adelante que sirve para limpiar estos backups, por supuesto hay que ejecutarlo con cuidado. Primero, ejecutalo con la variable $delete_old=0, y si la salida del script es correcta entonces activalo cambiando la variable a $delete_old=1

Cambia también los permisos a 700 para que solamente root pueda ejecutarlo.

Fuente del scrip: www.cplicensing.net

#!/usr/bin/perl
# cPlicensing.net - scripts             Copyright(c) 2003 cPlicensing.net.
#                                       All rights Reserved.
# support@cPlicensing.net               http://cPlicensing.net
# Unauthorized copying is prohibited
#Version: 0.01

use POSIX;

$delete_old 	= '0'; #0 or 1, set to 1 to remove old account backups
if($ARGV[0] eq "-d") { $delete_old = '1'; }

$|++;
POSIX::nice(19);

print "Reading Backup Config...";
open(CPBACK,"/etc/cpbackup.conf") or die("Failed, Does it exist and do you have access?\n");
while() {
        s/\n//g;
        my($name,$value) = split(/ /, $_);
        $CONF{$name} = $value;
}
close(CPBACK);
print "Complete\n";

if ($CONF{'BACKUPENABLE'} ne "yes") {
        die "Backup Not Enabled\n";
}
if (! -e $CONF{'BACKUPDIR'}){
	die "Backup Dir Doesnt Exist\n";
}

until (`ps -ax` !~ m/cpbackup/) {
	print "Detected cpbackup process...Sleeping for 60 Seconds\n";
	sleep(60);
};

if ($CONF{'BACKUPMOUNT'} eq "yes") {
	if(`mount` !~ m/$CONF{'BACKUPDIR'}/){
		system("mount","$CONF{'BACKUPDIR'}");
	}
	system("mount","-o","remount,rw","$CONF{'BACKUPDIR'}");
}

cleandir("$CONF{'BACKUPDIR'}/cpbackup/daily");
cleandir("$CONF{'BACKUPDIR'}/cpbackup/weekly");
cleandir("$CONF{'BACKUPDIR'}/cpbackup/monthly");

if ($CONF{'BACKUPMOUNT'} eq "yes") { system("umount","$CONF{'BACKUPDIR'}"); }

sub cleandir {
	my($target) = @_;

	opendir(DIRTYDIR,"$target");
	@DIRTYDIR = readdir(DIRTYDIR);
	closedir(DIRTYDIR);

	foreach(@DIRTYDIR) {
		next if /^\.\.?$|^files$|^dirs$/;
		if(-f "$target/$_"){
			$user = $_;
			$user =~ s/.tar.gz//;
			if(! -f "/var/cpanel/users/$user"){
				if($delete_old == 1){
					unlink("$target/$_");
					print "Deleted Old Backup... $target/$_\n";
				} else {
					print "Detected Old Backup... $target/$_\n";
				}
			}
			next;
		}
		if(-d "$target/$_"){
			if(! -f "/var/cpanel/users/$_"){
				if($delete_old == 1){
					#system("rm","-r","$target/$_");
					print "Directory Delete Not Supported, If you really want to remove dirs (incremental backups) you can edit this script and uncomment the line that looks like #system(\"rm\",\"-r\",\"$target/$_\")\n";
				} else {
					print "Detected Old Backup... $target/$_\n";
				}
			}
			next;
		}
	}
}

Crear, eliminar y modificar usuarios de sistema en Unix


Una de las tareas más básicas en cualquier sistema operativo es la de crear, eliminar o modificar usuarios de sistema, asignarles grupos, modificar claves, etc. Vamos a aprender lo más básico de estas tareas en los entornos Unix:

Añadir usuarios: useradd

A la hora de crear un usuario de sistema, podemos pasar los siguientes parámetros:

  • -d Directorio home del usuario
  • -s Shell del usuario
  • -p Password
  • -g Grupo primario al que asignamos el usuario
  • -G Grupos a los que también pertenece el usuario
  • -m Forzamos la creación del directorio en su home

Ejemplo:

useradd -ginvitados -Gftp -s/bin/shell -ppassword -d/home/pepe -m pepe

Como podéis observar, creamos un usuario “pepe” que pertenece al grupo “invitados” y “ftp“, tiene como shell “/bin/shell“, asignamos una clave y su carpeta home será /home/pepe

Eliminar usuarios: userdel

Eliminar un usuario es tan sencillo como:

userdel pepe

Si quisieramos borrar el contenido de su carpeta home, añadiríamos el parámetro -r:

userdel -r pepe

Modificar usuarios: usermod

A la hora de modificar un usuario, podremos pasar los mismos parámetros que a la hora de crearlo, pero en este caso para modificar cada uno de ellos:

  • -d Modificar directorio home del usuario
  • -s Modificar shell del usuario
  • -p Modificar Password
  • -g Modificar grupo primario al que asignamos el usuario
  • -G Modificar grupos a los que también pertenece el usuario

Si por ejemplo quisieramos cambiar el grupo primario al que pertenece el usuario pepe:

 usermod -Ggrupo2 pepe

Merece especial mención el comando passwd, que sirve para cambiar la clave de cualquier usuario de sistema, su utilización es la siguiente:

$ passwd <usuario>
Enter existing password
Enter new password
Enter new password again (to validate)

Nota: Si queremos cambiar la clave del usuario root, simplemente poedmos poner “passwd” sin pasar como parámetro el nombre de usuario (aunque también se puede hacer “passwd root”).

En próximas entradas explicaremos la estructura de los ficheros /etc/passwd (donde se guardan los usuarios y grupos primarios), /etc/shadow (donde se guardan las claves de los usuarios) y /etc/group (donde se guarda la información de los grupos).