DPD Tareas administrativas

De Gleducar, http://www.gleducar.org.ar

Yes check.svg Esta página fue revisada y cumple los estándares de Gleduwiki.

Contenido

Usuarios, grupos y archivos relacionados

Introducción

En este capítulo abordaremos un tema escabroso en GNU+Linux. Permisos, usuarios y grupos como bien indica el título. Un sistema mal administrado podría ser, y de hecho es un auténtico coladero. Ante todo quisiera por favor que reportéis los posibles fallos tanto de esta sección como de cualquier otra, ya que este manual pretende ser un documento útil, por lo que os doy las gracias por adelantado. Vamos a ello. Usuarios

GNU+Linux es un sistema multiusuario por lo que es necesario la administración (segura) de los distintos usuarios que van a hacer uso de los recursos del sistema. De momento no vamos a dar grandes nociones de seguridad, pero sí una introducción a los tipos de usuarios y qué privilegios deben tener.

Dentro de un sistema existen al menos 3 tipos de usuarios.

  • Usuarios normales
    con más o menos privilegios que harán uso de los recursos del sistema. Son generalmente inexpertos y propensos a causar problemas. Simplemente deben poder usar algunos programas y disponer de un directorio de trabajo.
  • Usuarios de Sistema
    son aquellos encargados de los demonios del sistema, recordemos que para GNU+Linux todo es un fichero, el cual tiene un dueño y ese dueño tiene privilegios sobre él. Así, es necesario que algún usuario del sistema posea los procesos de los demonios, como veremos más adelante.
  • ROOT

Como ya habrás leido en capítulos anteriores debes tener cuidado con lo que se hace al entrar en el sistema como root. Él lo puede todo, en principio no hay restricciones para ÉL.

Además del criterio anterior, existe un criterio secundario para clasificar a los usuarios de un sistema. Ya vamos conociendo la tendencia de los UNIX y GNU+Linux, primero, por hacer que casi todo sea un fichero, y segundo, por hacer que absolutamente todo tenga un dueño (como iremos descubriendo a medida que usamos el sistema, nada se deja al azar en este aspecto), incluidos los procesos que se están ejecutando en el sistema. Otro concepto que lleva a esta segunda clasificación es, el de los usuarios de los servicios del host. Este tipo de usuarios simplemente accede remotamente a algunos servicios de nuestra máquina, tales como correo-electrónico o FTP. Esto nos lleva a definir:

  • Usuarios de login
    Estos primeros, pueden hacer login en el sistema y usar una shell en él. Es decir, tienen una shell válida de inicio (como se indica más abajo), generalmente, /bin/bash.
  • Usuarios sin login
    Este tipo de usuarios, bien son usuarios de sistema, o bien usuarios de los servicios del host. En ambos casos no pueden hacer login en el sistema directamente ni usar un shell. En otras palabras, no tienen asignado un shell válido. Su misión, es "poseer" algunos archivos y directorios del sistema, y manejarlos restringidamente a través de algunos programas (el servidor FTP, el servidor de correo electrónico, etc. darán a los usuarios de los servicios del host los privilegios suficientes: almacenar mensajes, etc.). En el caso de los usuarios de sistema, poseerán además algunos procesos (en el capítulo de procesos aprenderemos más acerca de este sub-tipo especial de usuarios).

Archivos de configuración

La administración de usuarios se realiza en todas las distribuciones de manera muy parecida, dada la herencia UNIX, aunque en el fondo todas hacen lo mismo. Según la política que lleven lo pueden realizar de una manera u otra, por lo que aquí veremos la forma la forma interna de trabajar de los programas a la hora de añadir o quitar usuarios, y al final expondremos ejemplos concretos de las distros más conocidas.

¿Cómo añadir un usuario al sistema? Hay que seguir una serie de pasos que relatamos a continuación. Pero antes veremos la estructura de los archivos que vamos a tocar.

/etc/password
Archivo que mantiene la base de datos de los usuarios del sistema y tiene la siguiente forma:
nombre_de_usuario:password(si es shadow será x):uid:gid:comentario:home_del_usuario:shell

Estos campos son:

  • Nombre de Usuario - Es el nombre con el que entrará en el sistema.
  • Password - La palabra de paso necesaria para entrar (cifrada). Si nuestro sistema usa shadow (explicado después), este campo será una x
  • UID - (User ID) Número que lo identifica en el sistema, recordemos que los ordenadores se llevan mejor con los números.
  • GID - (Group ID) Número que identifica al grupo principal al que pertenece el usuario.
  • Comentario - Opcional, si es necesario aclarar algo, esto solo es para el administrador, pues el sistema no lo usa.
  • home_del_usuario - Ruta absoluta del directorio de trabajo del usuario.
  • Shell - Intérprete de comandos del usuario, que será el que use inmediatamente después de entrar en el sistema, por defecto es /bin/bash. Para usuarios sin login, aunque puede que ahora no lo necesites, la shell no válida típica para poner en este campo es /bin/false.
/etc/group
Archivo de los grupos del sistema; de su administración y uso hablaremos en el siguiente apartado. El archivo tiene la siguiente estructura:
nombre_grupo:password:GID:lista_usuarios
  • Nombre del Grupo - Por defecto con los comandos habituales se crea un grupo con el mismo nombre que el usuario creado, aunque pueden existir otros grupos con nombres específicos.
  • password - Se usa para dar a una serie de individuos un mismo directorio con una cuenta común.
  • GID - (Group ID) Número de Identificación en el Sistema del grupo.
  • lista de usuarios que pertenecen al grupo, separados por comas.
/etc/shadow
Para sistemas que usen shadow, que no es más que una medida de seguridad. Los sistemas que no usan shadow guardan el password en /etc/passwd pero este archivo tiene la peculiaridad de que debe ser legible por todo el mundo, si no, no podría ni hacerse un ls. Este archivo podría caer en manos de un usario ilegítimo y este ejercer técnicas de crackeo sobre las claves. Como solución del problema lo que se hace es almacenar todos los datos de los usuarios en el /etc/password menos sus contraseñas; que se almacenan en /etc/shadow, el cual sí tiene restringidos los permisos y no es accesible por los usuarios normales.
usuario:password:días del último cambio: dias antes del cambio:Dias despues del cambio: tiempo de aviso:dias antes de la inhabilitación: perido que lleva caducado:reservado:
  • Usuario - Nombre del usuario
  • password - Aquí sí, es el password cifrado.
  • Tiempo del último cambio de password - Pero el tiempo cuenta desde el 1 de enero de 1970, comienzo de la era UNIX.
  • Días antes del cambio - Periodo (en días) donde el password debe ser cambiado.
  • Días después del cambio - En los días después donde debe ser cambiado.
  • Tiempo del aviso - Periodo en el que el sistema tiene que avisar de la necesidad del cambio.
  • Inhabilitación - Días antes de la inhabilitación de la cuenta.
  • Periodo caducado - Días desde el 1 de enero de 1970 en el que la cuenta está deshabilitada.
  • Campo reservado

Creacion de usuarios

Añadir un nuevo usuario

La herramienta primaria para añadir usuarios en debian es adduser:

# adduser victor

addusr elegirá el siguiente uid libre (identificador de usuario), creará un directorio home llamado victor, copiara /etc/skel a /home/victor y luego pregunta por un nuevo password para victor. Esta contraseña se guardará encriptada en el archivo /etc/passwd o en shadow (dependiendo de la configuración).

Borrar un usuario

El comando userdel, eliminara un usuario de /etc/passwd. Si se quiere también borrar toda la información de su directorio personal se usara la opción -r:

# userdel -r victor

userdel no elimina la entrada en /etc/group por lo que habria que hacerlo a mano.

Cambiar la contraseña de un usuario

Se utiliza el comando passwd.

# passwd victor

Se solicitará dos veces la contraseña para verificarla.

Acceso con privilegios de root

Además de entrar en el login del sistema como root, hay dos formas para ampliar los privilegios de un usuario y adquirir los de root. Los dos programas para hacer esto son su y sudo.

El comando su

El comando su hace que un usuario que se haya identificado con su propia cuenta pueda cambiar su uid al de root. Por supuesto debe saber el password del root.

El comando sudo

En este caso no es necesario que el usuario conozca la contraseña de root. Este programa permite que un usuario pueda ejecutar determinados comandos con privilegios de root. Estos usuarios y los comandos permitidos para él deben de estar en el fichero /etc/sudoers.

Por ejemplo para que el usuario victor pueda hacer un shutdown del sistema debe haber una entrada en el fichero sudoers como:

victor /sbin/shutdown -[rh] now

Creacion de Grupos

Los grupos permiten asignar permisos de ficheros y directorios a muchos usuarios de una vez. A un grupo pueden pertenecer varios usuarios y un usuario puede pertenecer a varios grupos.

Un usuario tiene asignado un grupo principal o por defecto.

Añadir un nuevo grupo

Para añadir un nuevo grupo:

# addgroup nuevogrupo

Eliminar un grupo

Para eliminar un grupo:

# groupdel nombre_de_grupo

Asignar un usuario a un grupo

Para cambiar el grupo por defecto de un usuario:

# usermod -g grupo usuario

Para añadir el usuario a otros grupos:

# usermod -G lista_de_grupos

Quitar un usuario de un grupo

Para eliminar un grupo al que ya no pertenece ningún usuario:

# groupdel grupo


Ajuste del entorno del usuario y variables del sistema

Las variables de entorno son unos contenedores que contienen ciertos parámetros del sistema, como puede ser el intérprete de comandos que se esté usando, u otros.

Cómo acceder a las variables de entorno

Para acceder a las variables de entorno hay que escribir un símbolo dólar ($), seguido del nombre de la variable. Los nombres de las variables de entorno en Linux se suelen escribir en todo mayúsculas por convenio, pero no tiene por qué ser así. Incluso se pueden poner variables de entorno con mezclas de mayúsculas e minúsculas. El nombre de la variable de entorno que contiene el intérprete de comandos actual es SHELL, así que para ver el contenido de esta variable se usa

# echo $SHELL
/bin/bash

Hay algunas variables que el usuario no puede establecer, y otros que sí. Las variables de entorno se establecen de la siguiente manera: se escribe el nombre de la variable, seguido por un signo igual (=), seguido de un texto, que va entrecomillado si es más de una palabra.

Variables importantes

Aquí hay una lista de las variables más interesantes:

  • $PS1: contiene la forma del símbolo del sistema
  • $EDITOR: contiene el editor de texto que se usará por omisión. Suele ser vi
  • $: valor devuelto por el comando anterior
  • $HOME: la ruta absoluta hasta el directorio inicial del usuario actual
  • $PATH: las rutas a los programas que hay establecido para el usuario actual. Cuando se ejecuta un comando, se buscará en estos directorios
  • $MAIL: contiene la ruta hacia el directorio que se usará para guardar el correo del usuario
  • $HISTORY: la ruta hacia el fichero que contiene el histórico de comandos (un fichero que contiene los últimos comandos que has escrito en la consola

Para ver todos las variables de entorno que están establecidas, se utiliza el comando set. Un ejemplo de su ejecución:

# set
 
BACKSPACE=Delete
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05" [2]="1" [3]="1" [4]="release" [5]="i586-mandrake-linux-gnu")
BASH_VERSION=$'2.05.1(1)-release'
BROWSER=$'kfmclient openProfile webbrowsing'
CLASS=expert
COLORTERM=
COLUMNS=104
DIRSTACK=()
DISABLE_WINDOWS_KEY=no
DISPLAY=:0.0
ENV=/root/.bashrc
EUID=0
GROUPS=()
GTK_RC_FILES=/etc/gtk/gtkrc:/home/root/.gtkrc
HELP_BROWSER=$'kfmclient openProfile webbrowsing'
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=localhost.localdomain
HOSTTYPE=i586
IFS=$' \t\n'
INPUTRC=/etc/inputrc
KBCHARSET=iso-8859-1
KDE_MULTIHEAD=false
KEYTABLE=es-latin1
LANG=es
LANGUAGE=es
LC_COLLATE=es@tradicional
LC_CTYPE=es@tradicional
LC_MESSAGES=es@tradicional
LC_MONETARY=es@tradicional
LC_NUMERIC=es@tradicional
LC_TIME=es@tradicional
LESS=-MM
LESSKEY=/etc/.less
LESSOPEN=$'|/usr/bin/lesspipe.sh %s'
LINES=41
LOGNAME=root
LS_COLORS=$'no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.tar=01;31:*.tgz=01;31:*.tbz2=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lha=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:*.tiff=01;35:'
LS_OPTIONS=$'-F --color=auto'
MACHTYPE=i586-mandrake-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
META_CLASS=PowerPack
NLSPATH=/usr/share/locale/%l/%N
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
PIPESTATUS=([0]="0")
PPID=1551
PROMPT_COMMAND=$'echo -ne "\\033]0;${USER}@${HOSTNAME}: ${PWD}\\007"'
PS1=$'[\\u@\\h \\W]\\$ '
PS2=$'> '
PS4=$'+ '
PWD=/home/root
QT_XFT=0
SECURE_LEVEL=4
SECURITY=4
SESSION_MANAGER=local/localhost.localdomain:/tmp/.ICE-unix/1441
SHELL=/bin/bash
SHELLOPTS=braceexpand:hashall:histexpand:monitor:history:interactive-comments:emacs
SHLVL=2
TERM=xterm
TMP=/home/root/tmp
TMPDIR=/home/root/tmp
UID=0
USER=root
USERNAME=root
XMODIFIERS=@im=none

Como se puede ver, existen muchas variables de entorno; cada una tendrá un significado especial para uno o más programas que existan en el sistema.

Archivos log para cuestiones administrativas y de seguridad

Presentaremos aqui los fichero de logs mas habituales en un sistema GNU+Linux, y la configuracion de alguno de ellos como syslog.

Los archivos de log en un sistema GNU+Linux, residen en el directorio

/var/log 

y aquí es donde deberían logear todos los programas. syslog

syslog es un log del sistema y del kernel que nos puede dar importante información de eventos que suceden en el sistema y en sus programas. Syslog provee incluso alguna llamada para que los programas que corren en el sistema logeen en el propio syslog. Todas las entradas que presenta syslog tienen como mínimo una fecha y una hora, el nombre de la maquina y del programa que generó el evento. El fichero de configuración de syslog es

/etc/syslog.conf 

y podemos ver un ejemplo de fichero de configuración.

#  /etc/syslog.conf     Configuration file for syslogd.
#
#                       For more information see syslog.conf(5)
#                       manpage.

#
# First some standard logfiles.  Log by facility.
#

auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          /var/log/mail.log
user.*                          -/var/log/user.log
uucp.*                          -/var/log/uucp.log

#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info                       -/var/log/mail.info
mail.warn                       -/var/log/mail.warn
mail.err                        /var/log/mail.err

# Logging for INN news system
#
news.crit                       /var/log/news/news.crit
news.err                        /var/log/news/news.err
news.notice                     -/var/log/news/news.notice

#
# Some `catch-all' logfiles.
# 
* .=debug;\
        auth,authpriv.none;\
        news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg                         *

#
# I like to have messages displayed on the console, but only on a virtual
# console I usually leave idle.
#
#daemon,mail.*;\
#       news.=crit;news.=err;news.=notice;\
#       *.=debug;*.=info;\
#       *.=notice;*.=warn       /dev/tty8

# The named pipe /dev/xconsole is for the `xconsole' utility.  To use it,
# you must invoke `xconsole' with the `-file' option:
#  
#    $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
#      busy site..
#
daemon.*;mail.*;\
        news.crit;news.err;news.notice;\
        *.=debug;*.=info;\
        *.=notice;*.=warn       |/dev/xconsole

local2.*                -/var/log/ppp.log

Aunque no nos pararemos a ver este archivo de configuración con demasiado detalle, si es interesante ver en base a que criterios trabaja syslog. Podemos ver en el fichero de configuración, lineas que nombran una "facility" ( subsistema de aplicación ) y separados por un punto las palabras crit,debug,info,notice o warn. Por ejemplo:

mail.warn
/var/log/mail.warn 

Lo que realiza syslog es logear los eventos dependiendo de la aplicación y de la prioridad del evento ( crit = critical, warn=warning, info=information, err=errors .... ) y reenviandolos a syslog o a otros logs separados para "categorizar" mejor cada uno de los eventos, puede usar también comodines de modo que sea posible incluir una linea de este tipo

 kern.* -/var/log/kern.log

de modo que todos los mensajes del kernel vayan a fichero kern.log, sean del tipo que sean.

Como curiosidad hacer notar que las entradas de archivos que van precedidos por un guión (-) indican que no se hace un "sync" cada vez que existe una entrada en ese log, de modo que si hay una caida del sistema pueden perderse datos en este fichero. Otros logs en GNU+Linux

Además de syslog y de los logs generados por el mismo, hay otros logs que hay que tener en cuenta para saber en cada momento que ocurre o a ocurrido en nuestro sistema. Enumeramos aquí algunos y su cometido.

  • /var/log/xferlog
    Este fichero es creado por los servidores de ftp e indica la fecha de las transferencias de archivos, los archivos, cantidad de bytes, etc...
  • /var/log/apache/access.log
    Fichero creado por el servidor web apache e indica las conexiones al servidor, con que version http, si ha sido un GET o un put, etc.
  • /var/log/apache/error.log
    Da los errores ( categorizados por warn, notice, etc... ) que surgen en el servidor web.
  • /var/log/setuid.changes
    Log generado por el programa checksecurity incluido en la distribución Debian y que da un listado de los setuids en el sistema. Se activa en el cron.
  • /var/log/wtmp
    Es un log binario que guarda el los usuarios del sistema que han hecho logins. No se usa directamente pero si podemos usarlo con la instrucción last por ejemplo.
se usa directamente pero si podemos usarlo con la instrucción last por ejemplo.

Automatización de tareas de administración

Usando Cron

En muchas ocasiones habreis necesitado realizar alguna tarea de forma automática un día concreto, o al principio de cada mes, o a una hora determinada y o bien habeis hecho scripts "chapuzas" o lo habeis dejado de hacer por no saber que existe cron, una potente herramienta que permite hacer todo esto, en GNU+Linux o en Unix.

Pues bien, vamos a explicaros cómo introducir tareas y programarlas en cron...

Digamos que el cron se compone básicamente de dos "partes" el daemon y el fichero de configuración. El daemon se llama crond y es el encargado de leer el fichero de configuración /etc/crontab.Lo hace cada 60 segundos, en busca de cambios en dicho fichero e incorporar así tareas al sistema. Nosotros no vamos a entrar en el deamon, ya que bastará que lo habilites para que se ejecute al iniciar nuestro sistema, esto lo puedes hacer con la herramienta que traiga tu distribución sino, siempre puedes recurrir al modo texto con chkconfig.

El fichero donde se añaden tareas es,como antes he escrito, /etc/crontab que podremos editar con nuestro editor favorito. Una vez editado dicho fichero encontraremos esto:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

El primer campo es el entorno donde se ejecutarán las órdenes, podes dejarlo así por defecto, a menos que uses otra shell.

El segundo campo está claro, es el valor de la variable PATH, si las ordenes que ejecutará la tarea no se encuentran en dicho PATH, solo hay que añadirlo.

El tercero, manda los outputs del cron al root, o a quien queramos. Si queremos que no se envie nada sólo debemos dejar la variable así: MAILTO="".

Los /etc/cron.hourly, daily...son fichero que usa cron para su gestión interna y los lanza cada día.

Bien, ahora queremos agregar una tarea a nuestro sistema, para eso debemos saber cómo funcionan los campos del /etc/crontab:

  • El primer campo son los minutos
  • El segundo campo son las horas
  • El tercer campo es el día
  • El cuarto es el día de la semana
  • El quinto es la orden a ejecutar

Es decir, para el crontab el fichero es así:

minute hour day month dayofweek command

Hay que destacar que:

  • los minutos deben ser enteros de entre 0-59.
  • las horas, enteros de 0-23.
  • Días, 1-31. (Para meses que los tengan, claro.)
  • Meses, 1-12
  • Días de la semana, se usan enteros 1-7

Y por último la orden, por ejemplo puede ser:

ls -h > /home/manssson/ls.txt.

Con esto ya deberíamos ser capaces de crear y hacer funcionar cualquier tarea, pero cron tiene alguna más utilidades que conviene conocer:

  • Si ponemos un asterisco (*) en algún campo, por ejemplo el mes, esto hará que se ejecute la orden todos los meses, y luego respetará los demás valores, tales como el día o la hora.
  • Si queremos indicar un rango de enteros, lo haremos con un guión (-).
  • Si queremos indicar enteros separados, se harán con comas (,), por ejemplo: 1, 2, 3.
  • Podemos concretar o excluir valores usan la barra (/), es decir, si queremos que una orden se ejecute durante los 0-59 minutos de una hora menos en el minuto 15, pues lo marcaremos haciendo:0-59/15.
  • También podemos hacer que una orden que se ejecute en un determinado minuto, haciendo:*/25. Esto hará que nuestra tarea se ejecute siempre en el minuto 25.
  • El uso de la barra (/) y el asterisco (*) puede emplearse en todos los campos. Si queremos que una tearea no sea ejecutada sólo debemos comentar esa linea al principio con la "almohadilla" (#): #30 18 8 * * root rm -f /var/cache/apt/archives/*.rpm.

Con todo esto ya podremos incorporar tareas a nuestro sistema de forma automática. Solo debemos lanzar el daemon crond y asegurarnos de que se ejecute siempre que iniciamos el sistema.

Algunos ejemplos

En el siguiente ejemplo, root define un comando para ser ejecutado por cron cada hora y toda la salida generada se añade al archivo de log:

# crontab - root 0 * * * * finger >>/var/log/messages 2>&1

En el siguiente ejemplo,se define un comando, propiedad de usuario, para ser ejecutado por cron cada dos horas de 11 p.m. a 7 a.m. y a las 8 a.m.

# crontab - usuario 0 23-7/2,8 * * * /usr/bin/find / -name core -exec rm {} \;

Estrategia de backup

=== ¿Que datos respaldar? Debe respaldar la mayor cantidad de información posible. La mayor excepción es el software, ya que puede ser fácilmente reinstalado. Tenga en cuenta que los programas muchas veces están configurados manualmente para sus sistemas, por lo que es importante respaldar a los archivos de configuración, y evitar así la tarea de reconfigurarlos nuevamente. Otra gran excepción es el sistemas de archivos /proc, debido a que solamente contiene información que el kernel genera automáticamente. Por lo que nunca es buena idea copiarlo, especialmente el archivo /proc/kcore es innecesario, ya que solamente es una imagen de la memoria física, y nunca suele ser muy útil dentro de un backup (solo ocupa bastante espacio).

Hay algunas otras partes de un sistema Linux que deben ser analizadas antes de ser incluidas en sus copias de respaldo. Por ej., los archivos de log, las colas de los archivos de impresión, las news y muchas otras cosas que se encuentran bajo /var. Debe decidir que considera importante y que no.

Lo obvio al momento de respaldar son los archivos de los usuarios (/home) y los archivos de configuración del sistema (/etc, y posiblemente otros archivos y directorios que se encuentren dispersos en el sistema de archivos).

¿En qué medio almacenar los datos?

La decisión mas importante al pensar en hacer copias de seguridad es la selección del medio a utilizar. Necesita considerar el costo, confiabilidad, velocidad, disponibilidad y usabilidad.

El costo es importante, porque preferentemente desea contar con mayor capacidad de almacenamiento para los backups de lo que necesita para los datos existentes. Un medio barato es usualmente casi una obligación.

La confiabilidad es un ítem de extrema importancia, ya que una copia de respaldo dañada puede hacer llorar a un gigante. Un medio para copias de seguridad debe ser capaz de mantener los datos en perfecto estado durante años. Además, la forma en que se utiliza el medio afecta a su confiabilidad. Un disco rígido es típicamente muy confiable, pero no como medio para copias de seguridad en caso de que se encuentre en la misma computadora en donde están los disco al que se les realiza la copia.

La velocidad usualmente no muy importante, en caso de que la copia pueda ser realizada sin interacción. No importa que el backup demore unas dos horas, o lo que fuese necesario si no necesita atención. En cambio, si la copia no puede ser realizada cuando la computadora se encuentre ociosa, considere a la velocidad del medio al momento de la elección.

La disponibilidad es obviamente necesaria, debido a que no se puede utilizar un medio para copias de seguridad si no existe. Menos obvio es la disponibilidad futura, y en otras computadoras diferentes a las que se utilizaron para generar las copias. Si este caso sucede, puede no ser posible realizar una recuperación de la información luego de un desastre.

La practicidad es un gran factor que se relaciona con la frecuencia en que las copias son realizadas. Cuanto mas fácil de usar sea el medio para realizar las copias, mejor. Un medio para copias de seguridad no debe ser difícil, o aburrido de utilizar.

Las alternativas típicas son los discos flexibles y las cintas. Los discos flexibles son muy baratos, relativamente confiables, no muy rápidos, muy disponibles, pero no muy útiles para grandes cantidades de información. Las cintas varían en cuanto a su valor, generalmente son baratas aunque algunos tipos no lo son tanto, relativamente confiables y veloces, muy disponibles, y generalmente (aunque depende de su capacidad) son útiles para almacenar mucha información.

Existen otras alternativas. Usualmente no son muy comunes, pero si la disponibilidad no es un problema, pueden ser una mejor opción en muchos casos. Por ejemplo, los discos magneto-ópticos, ya que pueden tener las ventajas de los discos flexibles (acceso aleatorio, rápida recuperación de un único archivo) y las ventajas de las cintas (gran capacidad de almacenamiento).

Esquema de backup sencillo

Un esquema simple de copias de seguridad es respaldar todo una única vez, y luego, copiar solamente los archivos que fueron modificados después de la copia inicial. La primera copia se denomina copia total (full backup), y las siguientes son copias incrementales (incremental backups). Una copia total frecuentemente necesita de mayor esfuerzo para ser generada, debido a que hay mas datos a escribir, y eventualmente (o frecuentemente []) puede no caber en una única cinta, o cualquiera que sea el medio utilizado. De manera opuesta, recuperar información desde las copias incrementales necesita muchas veces mas empeño que hacerlo desde una copia total. La recuperación puede ser optimizada si cada copia incremental se realiza con respecto a la copia total previa. De esta manera, las copias pueden necesitar un poquito mas de esfuerzo (y demorar mas también), pero nunca será necesario recuperar mas que dos copias (una total y una incremental).

Realizando copias de seguridad con tar

Una copia completa puede realizarse fácilmente con tar:

# tar --create --file /dev/ftape 
/usr/src
tar: Removing leading / from absolute path names in 
the archive
#

El ejemplo anterior utiliza la versión GNU de tar y sus nombres de opciones largos. La versión tradicional de tar solo comprende opciones de un único caracter. Además, la versión GNU puede manejar copias que no quepan completamente en una cinta (o medio utilizado), y con caminos de directorios muy largos; no todas las versiones de tar pueden hacer eso. (GNU/Linux solo utiliza GNU tar.)

En caso de que la copia no quepa en una única cinta, es necesario activar la opción --multi-volume (-M):

# tar -cMf /dev/fd0H1440 
/usr/src
tar: Removing leading / from absolute path names in 
the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:
#

Observe que debe dar formato a todos los disquetes a utilizar antes de comenzar la copia de respaldo, o utilice otra ventana o terminal virtual y dele formato al disquete cuando tar le solicite uno nuevo.

Después de realizar una copia, debe verificar si todo se encuentra en correctas condiciones utilizando la opción --compare (-d):

# tar --compare --verbose -f 
/dev/ftape
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
....
#

Si no verifica las copias, entonces no percibirá que las copias de respaldo no son útiles hasta que estas sean necesarias.

Una copia de seguridad incremental puede ser realizada utilizando la opción --newer (-N) de tar:

# tar --create --newer '8 Sep 1995' 
--file /dev/ftape /usr/src 
--verbose
tar: Removing leading / from absolute path names in the archive
usr/src/
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/modules/
usr/src/linux-1.2.10-includes/include/asm-generic/
usr/src/linux-1.2.10-includes/include/asm-i386/
usr/src/linux-1.2.10-includes/include/asm-mips/
usr/src/linux-1.2.10-includes/include/asm-alpha/
usr/src/linux-1.2.10-includes/include/asm-m68k/
usr/src/linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
#

Desafortunadamente, tar no puede conocer cuando la información en los inodos de los archivos ha cambiado, como por ejemplo, si sus permisos o nombre ha sido modificado. Puede solucionar este inconveniente utilizando find, y comparar el estado del sistema de archivos actual con una lista de archivos que fueron respaldados previamente. Los scripts y programas que realizan esta tarea pueden ser encontrados en los sitios ftp de GNU/Linux.

Recuperando archivos con tar

Debe utilizar la opción --extract (-x) para recuperar archivos que fueron previamente respaldados con tar:

# tar --extract --same-permissions 
--verbose --file 
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#

También puede extraer archivos y directorios específicos (los cuales incluyen todos sus archivos y subdirectorios). Basta con mencionarlos en la línea de comandos:

# tar xpvf /dev/fd0H1440 
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
#

Utilice la opción --list (-t) para conocer cuales son los archivos presentes en un volumen de backup:

# tar --list --file 
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
#

Note que tar siempre lee el volumen de la copia de seguridad secuencialmente, lo que puede llegar a ser lento para grandes volúmenes. De cualquier manera, si utiliza medios secuenciales como cintas, no es posible el acceso aleatorio.

tar no maneja correctamente archivos eliminados. En caso de que se necesite recuperar un sistema de archivos desde una copia completa y otra incremental, y se han eliminado archivos entre las dos copias, estos archivos existirán luego de la recuperación. Este tipo de casos puede llegar a ser un gran problema si los archivos tienen datos sensibles que no deberían existir más.

Hora del sistema

Cambio de la hora del Sistema Operativo

Suponemos que queremos colocar la fecha: 25-Feb-2000 y la hora 16:25. Esto lo haremos como root:

# date --set "2000-02-25 16:25"
Fri Feb 25 16:25:00 CET 2000

Cambio de la hora del BIOS

Ahora realizaremos el mismo cambio para actualizar la fecha en la BIOS.

# hwclock --set --date="2000-02-25 16:25"

Para comprobarlo tecleamos:

# hwclock
Fri Feb 25 16:25:06 2000 -0.010586 seconds

Fuentes

Copyright © 2002-2010 Asociación Civil Gleducar
Todo los contenidos de este sitio se encuentran bajo una licencia libre del tipo Copyleft
Este sitio ha sido desarrollado usando Software Libre y respeta los estándares web.
Además ha sido diseñado para verse correctamente usando cualquier navegador, en cualquier resolución de pantalla.