• Publicidad

Buscar sticky bit en todos los archivos

¿Eres administrador de sistemas? Este foro es para todos aquellos temas relacionados con el uso de Perl para administración de sistemas.

Re: Buscar sticky bit en todos los archivos

Notapor situ » 2011-01-22 12:26 @559

Muchas Gracias, ahora sí funciona =)
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Re: Buscar sticky bit en todos los archivos

Notapor situ » 2011-01-22 13:47 @616

Te hago una consulta ahora agregue la búsqueda de suid bit, guid bit, sticky bit. El problema es que el print() me lo muestra con otra advertencia la cual pertenece a otra búsqueda.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. no warnings;  
  3. use diagnostics;
  4.  
  5. use File::stat;  
  6. use File::Find ();
  7. use Term::ANSIColor qw(:constants);
  8.  
  9. ## Verificacion de permisos en archivos y directorios
  10. print " -- Verificar permisos en archivos y directorios\n";
  11.  
  12. my @archivos = qw(
  13.     /bin/
  14.     /boot/
  15.     /etc/
  16.     /etc/cron.daily/
  17.     /etc/cron.hourly/
  18.     /etc/crontab
  19.     /etc/cron.weekly/
  20.     /etc/exports  
  21.     /etc/fstab    
  22.     /etc/group
  23.     /etc/hosts  
  24.     /etc/hosts.allow
  25.     /etc/hosts.deny
  26.     /etc/inetd.conf
  27.     /etc/inittab  
  28.     /etc/ld.so.conf
  29.     /etc/modules
  30.     /etc/motd
  31.     /etc/mtab
  32.     /etc/passwd
  33.     /etc/profile
  34.     /etc/securetty  
  35.     /etc/syslog.conf
  36.     /home/
  37.     /lib/
  38.     /mnt/    
  39.     /root/
  40.     /sbin/
  41.     /tmp/
  42.     /usr/
  43.     /usr/bin/
  44.     /var/
  45. );
  46.  
  47. for my $archivo (@archivos) {
  48.     my $estatus = stat($archivo);
  49.  
  50.     if (! defined $estatus) {
  51.         print BOLD, RED, 'No existe', RESET, " El archivo $archivo no existe en el sistema o no puede ser accedido\n";
  52.     }
  53.     else {
  54.         if (! -r $archivo) {
  55.             print BOLD, RED, 'No leible', RESET, " El archivo $archivo no puede ser leido\n";
  56.         }
  57.  
  58.         if ( $estatus->uid == 0 ) {
  59.             #print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como propietario a root\n";
  60.         }
  61.         else {
  62.             my ($nombre,$password,$uid,$gid,$quota,$comentario,$gcos,$dir,$shell,$expire) = getpwuid($estatus->uid);
  63.             print BOLD, RED,   "Negativo:", RESET, " El archivo $archivo tiene como propietario a $nombre ($uid)\n";
  64.         }
  65.  
  66.         my $permisos = sprintf "%04o", $estatus->mode & 07777;
  67.  
  68.         if ( $permisos eq '0644' ) {
  69.  
  70.             #print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como permiso 0644\n";
  71.         }
  72.  
  73.         else {
  74.  
  75.             print BOLD, RED, "Negativo:", RESET, " El archivo $archivo tiene como permiso $permisos\n";
  76.         }
  77.     }
  78. }
  79.  
  80. ## Verificacion de Sticky Bit
  81. print "sticky bit\n";
  82.  
  83. use vars qw/*name *dir *prune/;
  84.  
  85. *name   = *File::Find::name;
  86. *dir    = *File::Find::dir;
  87. *prune  = *File::Find::prune;  
  88.  
  89. # Traverse desired filesystems
  90. File::Find::find({wanted => \&wanted}, '/');
  91.  
  92. sub wanted {
  93.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  94.  
  95.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  96.     and !($prune |= ($dev != $File::Find::topdev))
  97.     and -d $_
  98.     and (($mode & 01000) == 01000)
  99.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto sticky bit en $name\n"
  100.     ;
  101. }
  102.  
  103. ## Verificacion de suid Bit
  104. print "suid bit\n";
  105.  
  106. use vars qw/*name *dir *prune/;
  107.  
  108. *name   = *File::Find::name;
  109. *dir    = *File::Find::dir;
  110. *prune  = *File::Find::prune;  
  111.  
  112. # Traverse desired filesystems
  113. File::Find::find({wanted => \&wanted}, '/');
  114.  
  115. sub wanted {
  116.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  117.  
  118.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  119.     and !($prune |= ($dev != $File::Find::topdev))
  120.     and -d $_
  121.     and (($mode & 02000) == 02000)
  122.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto suid en $name\n"
  123.     ;
  124. }
  125.  
  126.  
  127. ## Verificacion de guid Bit
  128. print "guid bit\n";
  129.  
  130. use vars qw/*name *dir *prune/;
  131.  
  132. *name   = *File::Find::name;
  133. *dir    = *File::Find::dir;
  134. *prune  = *File::Find::prune;  
  135.  
  136. # Traverse desired filesystems
  137. File::Find::find({wanted => \&wanted}, '/');
  138.  
  139. sub wanted {
  140.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  141.  
  142.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  143.     and !($prune |= ($dev != $File::Find::topdev))
  144.     and -d $_
  145.     and (($mode & 01000) == 01000)
  146.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto suid bit en $name\n"
  147.     ;
  148. }
  149.  
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4


Salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
 -- Verificar permisos en archivos y directorios
Negativo: El archivo /bin/ tiene como permiso 0755
Negativo: El archivo /boot/ tiene como permiso 0755
Negativo: El archivo /etc/ tiene como permiso 0755
Negativo: El archivo /etc/cron.daily/ tiene como permiso 0755
Negativo: El archivo /etc/cron.hourly/ tiene como permiso 0755
Negativo: El archivo /etc/cron.weekly/ tiene como permiso 0755
No existe El archivo /etc/exports no existe en el sistema o no puede ser accedido
No existe El archivo /etc/inittab no existe en el sistema o no puede ser accedido
Negativo: El archivo /etc/motd tiene como permiso 0666
No existe El archivo /etc/syslog.conf no existe en el sistema o no puede ser accedido
Negativo: El archivo /home/ tiene como permiso 0755
Negativo: El archivo /lib/ tiene como permiso 0755
Negativo: El archivo /mnt/ tiene como permiso 0755
Negativo: El archivo /root/ tiene como permiso 0700
Negativo: El archivo /sbin/ tiene como permiso 0755
Negativo: El archivo /tmp/ tiene como permiso 1777
Negativo: El archivo /usr/ tiene como permiso 0755
Negativo: El archivo /usr/bin/ tiene como permiso 0755
Negativo: El archivo /var/ tiene como permiso 0755
sticky bit
Informacion: Se detecto suid bit en /var/spool/samba
Informacion: Se detecto suid bit en /var/spool/cups/tmp
Informacion: Se detecto suid bit en /var/spool/cups-pdf/ANONYMOUS
Informacion: Se detecto suid bit en /var/spool/cron/atspool
Informacion: Se detecto suid bit en /var/spool/cron/crontabs
Informacion: Se detecto suid bit en /var/spool/cron/atjobs
Informacion: Se detecto suid bit en /var/spool/postfix/maildrop
Informacion: Se detecto suid bit en /var/crash
Informacion: Se detecto suid bit en /var/log/gdm
Informacion: Se detecto suid bit en /var/tmp
Informacion: Se detecto suid bit en /var/cache/jockey
Informacion: Se detecto suid bit en /var/lib/samba/usershares
Informacion: Se detecto suid bit en /var/lib/php5
Informacion: Se detecto suid bit en /var/opt/Adobe AIR/Shared
Informacion: Se detecto suid bit en /var/opt/Adobe AIR/Shared/Adobe/AIR/Updater
Informacion: Se detecto suid bit en /usr/share/ppd/custom
Informacion: Se detecto suid bit en /tmp
Informacion: Se detecto suid bit en /tmp/.X11-unix
Informacion: Se detecto suid bit en /tmp/.ICE-unix
 
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Creo que se mezcló todo =(
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Buscar sticky bit en todos los archivos

Notapor explorer » 2011-01-22 13:55 @622

Programar no es «copiar y pegar» (bueno, a veces sí).

Hay que prestar atención a lo que se escribe...

¿No te das cuenta de que estás definiendo tres veces una función con el mismo nombre ('wanted')?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar sticky bit en todos los archivos

Notapor situ » 2011-01-22 14:29 @645

Sí, perdón. Pasa que no logro hacerlo andar, entonces trato de copiar lo que sí me anda y adaptarlo lo mejor que puedo.

Me sigue haciendo lo mismo, perdón pero no sé cómo solucionarlo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. no warnings;  
  3. use diagnostics;
  4.  
  5. use File::stat;  
  6. use File::Find ();
  7. use Term::ANSIColor qw(:constants);
  8.  
  9. ## Verificacion de permisos en archivos y directorios
  10. print " -- Verificar permisos en archivos y directorios\n";
  11.  
  12. my @archivos = qw(
  13.     /bin/
  14.     /boot/
  15.     /etc/
  16.     /etc/cron.daily/
  17.     /etc/cron.hourly/
  18.     /etc/crontab
  19.     /etc/cron.weekly/
  20.     /etc/exports  
  21.     /etc/fstab    
  22.     /etc/group
  23.     /etc/hosts  
  24.     /etc/hosts.allow
  25.     /etc/hosts.deny
  26.     /etc/inetd.conf
  27.     /etc/inittab  
  28.     /etc/ld.so.conf
  29.     /etc/modules
  30.     /etc/motd
  31.     /etc/mtab
  32.     /etc/passwd
  33.     /etc/profile
  34.     /etc/securetty  
  35.     /etc/syslog.conf
  36.     /home/
  37.     /lib/
  38.     /mnt/    
  39.     /root/
  40.     /sbin/
  41.     /tmp/
  42.     /usr/
  43.     /usr/bin/
  44.     /var/
  45. );
  46.  
  47. for my $archivo (@archivos) {
  48.     my $estatus = stat($archivo);
  49.  
  50.     if (! defined $estatus) {
  51.         print BOLD, RED, 'No existe', RESET, " El archivo $archivo no existe en el sistema o no puede ser accedido\n";
  52.     }
  53.     else {
  54.         if (! -r $archivo) {
  55.             print BOLD, RED, 'No leible', RESET, " El archivo $archivo no puede ser leido\n";
  56.         }
  57.  
  58.         if ( $estatus->uid == 0 ) {
  59.             #print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como propietario a root\n";
  60.         }
  61.         else {
  62.             my ($nombre,$password,$uid,$gid,$quota,$comentario,$gcos,$dir,$shell,$expire) = getpwuid($estatus->uid);
  63.             print BOLD, RED,   "Negativo:", RESET, " El archivo $archivo tiene como propietario a $nombre ($uid)\n";
  64.         }
  65.  
  66.         my $permisos = sprintf "%04o", $estatus->mode & 07777;
  67.  
  68.         if ( $permisos eq '0644' ) {
  69.  
  70.             #print BOLD, GREEN, "Positivo:", RESET, " El archivo $archivo tiene como permiso 0644\n";
  71.         }
  72.  
  73.         else {
  74.  
  75.             print BOLD, RED, "Negativo:", RESET, " El archivo $archivo tiene como permiso $permisos\n";
  76.         }
  77.     }
  78. }
  79.  
  80.  
  81. ## Verificacion de guid Bit
  82. print "guid bit\n";
  83.  
  84. use vars qw/*name *dir *prune/;
  85.  
  86. *name   = *File::Find::name;
  87. *dir    = *File::Find::dir;
  88. *prune  = *File::Find::prune;  
  89.  
  90. # Traverse desired filesystems
  91. File::Find::find({wanted => \&wanted2}, '/');
  92.  
  93. sub wanted2 {
  94.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  95.  
  96.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  97.     and !($prune |= ($dev != $File::Find::topdev))
  98.     and -d $_
  99.     and (($mode & 01000) == 01000)
  100.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto guid bit en $name\n"
  101.     ;
  102. }
  103.  
  104. ## Verificacion de Sticky Bit
  105. print "sticky bit\n";
  106.  
  107. use vars qw/*name *dir *prune/;
  108.  
  109. *name   = *File::Find::name;
  110. *dir    = *File::Find::dir;
  111. *prune  = *File::Find::prune;  
  112.  
  113. # Traverse desired filesystems
  114. File::Find::find({wanted => \&wanted}, '/');
  115.  
  116. sub wanted {
  117.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  118.  
  119.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  120.     and !($prune |= ($dev != $File::Find::topdev))
  121.     and -d $_
  122.     and (($mode & 01000) == 01000)
  123.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto sticky bit en $name\n"
  124.     ;
  125. }
  126.  
  127. ## Verificacion de suid Bit
  128. print "suid bit\n";
  129.  
  130. use vars qw/*name *dir *prune/;
  131.  
  132. *name   = *File::Find::name;
  133. *dir    = *File::Find::dir;
  134. *prune  = *File::Find::prune;  
  135.  
  136. # Traverse desired filesystems
  137. File::Find::find({wanted => \&wanted1}, '/');
  138.  
  139. sub wanted1 {
  140.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  141.  
  142.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  143.     and !($prune |= ($dev != $File::Find::topdev))
  144.     and -d $_
  145.     and (($mode & 02000) == 02000)
  146.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto suid en $name\n"
  147.     ;
  148. }
  149.  
  150.  
  151. ## Verificacion de guid Bit
  152. print "guid bit\n";
  153.  
  154. use vars qw/*name *dir *prune/;
  155.  
  156. *name   = *File::Find::name;
  157. *dir    = *File::Find::dir;
  158. *prune  = *File::Find::prune;  
  159.  
  160. # Traverse desired filesystems
  161. File::Find::find({wanted => \&wanted2}, '/');
  162.  
  163. sub wanted2 {
  164.     my ($dev,$ino,$mode,$nlink,$uid,$gid);
  165.  
  166.         (($dev,$ino,$mode,$nlink,$uid,$gid) = CORE::lstat($_))
  167.     and !($prune |= ($dev != $File::Find::topdev))
  168.     and -d $_
  169.     and (($mode & 01000) == 01000)
  170.     and print BOLD . WHITE . "Informacion:" . RESET . " Se detecto suid bit en $name\n"
  171.     ;
  172. }
  173.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


Saludos.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Re: Buscar sticky bit en todos los archivos

Notapor explorer » 2011-01-22 14:45 @656

Así no terminarás de aprender Perl nunca :(

De estas líneas, solo tienen que aparecer una vez:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use vars qw/*name *dir *prune/;

*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y sería más efectivo no hacer 4 búsquedas por el sistema de ficheros (y tardar un montón de tiempo y envejecer aún más los discos duros). Realmente, con solo una búsqueda, te vale para sacar toda la información.

P.D.: no es necesario que mandes tu código en cada mensaje: puedes reeditar tus mensajes y hacer los cambios. El botón de editar aparece en cada uno de los mensajes que has escrito, a la derecha, abajo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Buscar sticky bit en todos los archivos

Notapor situ » 2011-01-22 14:52 @661

Ok, muchas gracias por las sugerencias.
Ya pude arreglarlo y hacer mas performante la busqueda gracias a tu sugerencia.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Anterior

Volver a Administración

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados