El programa DebugFS es un depurador interactivo del sistema de nuestro sistema de archivos. Se puede utilizar para examinar y cambiar el estado de un sistema de archivos en ext2, ext3 o ext4. Cuando digo cambiar, quiero decir que podemos incluso recuperar un archivo borrado.
Hoy voy a explicar como hacer algo más sencillo como es cambiar la fecha de modificación del estado del archivo (ctime).
Para ello entendamos un poco que son las diferentes marcas de tiempo:
ctime: 'change time' indica el tiempo de la última modificación
que se realizó al archivo en términos de su inodo (inode). Es decir,
cambios en los permisos, propietario, etc. También, lo utiliza el
comando
dump
para determinar el último respaldo que se realizó al archivo. Es posible ver este tiempo con la opción c del comando ls
. Ejemplo ls -lc
atime: 'access time' indica el tiempo en que el archivo fue por
última accedido para mostrar su contenido. Por ejemplo cuando se usan
los comandos
cat, more, less
o un script, en que se despliega el contenido del archivo se modificará su atime. Es posible ver este tiempo con la opción u del comando ls
. Ejemplo ls -lu
mtime: 'modify time' indica el tiempo en que el contenido del
archivo fue por última vez mofificado o editado, por ejemplo cuando usas
un editor de texto o se altera por un script, etc. Con la opción l del comando
(Fuente LinuxTotal) ls
se muestra este tiempo, que entonces, es el que estamos acostumbrados a observar con el listado típico: ls -l
En alguna ocasión podemos necesitar cambiar la fecha de modificación de los datos del archivo o bien la fecha en la que se actualizó el estado de cambios del archivo.
Imaginemos que creamos un archivo a dia 4 de Marzo:
touch /home/user1/temp/hora_hacktime.txt
ediaz@pcediaz:~/temp$ ls -lath
total 16K
drwxrwxr-x 2 ediaz ediaz 4,0K mar 4 16:55 .
-rw-rw-r-- 1 ediaz ediaz 0 mar 4 16:55 hora_hacktime.txt
drwxr-xr-x 92 ediaz ediaz 12K mar 4 16:55 ..
Como vemos, la hora ctime corresponde lógicamente con la mtime. Ahora modifiquemos la hora ctime. Para ello usaremos el comando debugfs. Tiene muchísimas posibilidades este comando, pero nos centraremos en las opciones -w y -R:
-w: El sistema de archivos tiene que ser abierto de lectura-escritura
-R: Lanzamos un comando de debugfs sin ejecutarlo en modo interactivo.
En nuestro caso el comando de debugfs que lanzamos será set_inode_field:
set_inode_field filespec field value
en donde filespec el archivo en cuestión, field en nuestro caso sera ctime y value es el valor datetime que queremos darle. Vamos a probarlo:
sudo debugfs -w -R 'set_inode_field /home/user1/temp/hora_hacktime.txt ctime 200901010101' /dev/sda1
Como veis, al final de todo especifico el sistema de archivos en donde esta el archivo que quiero modificar. En mi caso era /dev/sda1.
¿Y ya esta?. Realmente si. Lo que pasa es que si lo miramos, puede ser que no veamos el cambio aplicado. Como no es algo que haya realizado el sistema, puede ser que necesitemos usar el comando sync para hacer una limpieza (flush) del sistema de buffer:
sudo -s
sync
echo 2 > /proc/sys/vm/drop_caches
Ahora miramos la fecha ctime:
root@maquina:~/temp# ls -lathc
total 16K
drwxrwxr-x 2 ediaz ediaz 4,0K mar 4 16:55 .
drwxr-xr-x 92 ediaz ediaz 12K mar 4 16:55 ..
-rw-rw-r-- 1 ediaz ediaz 0 ene 1 2009 hora_hacktime.txt
Y ya lo tenemos modificado.
No hay comentarios:
Publicar un comentario