#!/usr/bin/perl -w
no warnings;
use File::Find ();
use File::stat;
# Modulos
use Term::ANSIColor qw(:constants);
## Verificacion de permisos en archivos y directorios
print " -- Verificar permisos en archivos y directorios\n";
# verifico si el owner es root
my @archivos = qw(
/etc/crontab
/etc/exports
/etc/fstab
/etc/group
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny
/etc/inetd.conf
/etc/inittab
/etc/ld.so.conf
/etc/modules
/etc/motd
/etc/mtab
/etc/passwd
/etc/profile
/etc/securetty
/etc/syslog.conf
/bin/
/boot/
/etc/
/etc/cron.daily/
/etc/cron.hourly/
/etc/cron.weekly/
/home/
/mnt/
/lib/
/root/
/sbin/
/tmp/
/usr/
/usr/bin/
/var/
);
for my $archivo (@archivos) {
my $estatus = stat($archivo);
if (! defined $estatus) {
print BOLD, RED, 'No existe', RESET, " El archivo $archivo no existe en el sistema o no puede ser accedido\n";
}
else {
if (! -r $archivo) {
print BOLD, RED, 'No leible', RESET, " El archivo $archivo no puede ser leido\n";
}
if ( $estatus->uid == 0 ) {
#print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como propietario a root\n";
}
else {
my ($nombre,$password,$uid,$gid,$quota,$comentario,$gcos,$dir,$shell,$expire) = getpwuid($estatus->uid);
print BOLD, RED, "Negativo:", RESET, " El archivo $archivo tiene como propietario a $nombre ($uid)\n";
}
my $permisos = sprintf "%04o", $estatus->mode & 07777;
if ( $permisos eq '0644' ) {
#print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como permiso 0644\n";
}
else {
print BOLD, RED, "Negativo:", RESET, " El archivo $archivo tiene como permiso $permisos\n";
}
}
}
## Verificacion de Sticky Bit
print " -- Verificacion de Sticky Bit\n";
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if 0; #$running_under_some_shell
use strict;
use File::Find ();
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/');
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
(($mode & 01000) == 01000)
&& print("$name\n");
}