Logs del sistema

30 12 2008

Linux usa el demonio syslogd para mostrar y guardar mensajes describiendo eventos del sistema. Controla los mensajes del kernel, los procesos corriendo en el sistema, y en equipos remotos. Los mensajes pueden mostrarse por pantalla, guardarse en logs, etc. Su archivo de configuración es /etc/syslog.conf.

/etc/syslog.conf

Cada línea contiene directivas en la forma: facility.level action

  • Facility: representa el creador del mensaje (el kernel o un proceso). Puede ser auth, authpriv, crcon, daemon, kern, lpr, mail, mark, news, syslog, user, uucp, y local0 a local7 (para uso propio).
  • Level: especifica la severidad y indica la cantidad de detalle que se guardará. Los niveles son de menor a mayor: debug, info, notice, warning, error, crit, alert y emerg. “None” desabilita la facility. El “*” representa todas facilities o levels.
  • Action: representa el destino, que puede ser un archivo, un hostname, o una lista de usuarios logueados.

La mayoría de distribuciones instala una configuración por defecto del syslog, incluyendo mensajes en /var/log/messages y otros archivos en /var/log. Para prevenir que los logs crezcan demasiado, existe una rotación de los logs y un comando privilegiado llamado logrotate. El archivo de configuración por defecto es /etc/logrotate.conf.





    Administrando cuentas de usuario y grupo

    25 12 2008

    /etc/passwd

    Cuando se añade un nuevo usuario en Linux, se añade una nueva entrada en el fichero /etc/passwd. A este archivo tienen acceso de lectura todos los usuarios del sistema. Cada entrada contiene información de un sólo usuario, separada por “:”. Por ejemplo:

    root: x:0:0:root:/root:/bin/bash
    david: x:1000:1000:david,,,:/home/david:/bin/bash

    Los campos son:

    • Username de la persona o servicio que usa esa cuenta.
    • Password hasheado. Si contiene una x indica que se guarda en /etc/shadow.
    • User ID: identificador único de usuario. Es un entero no negativo. 0 es el del root.
    • Group ID: lo mismo para el grupo. Los grupos y sus nombres asociados se especifican en /etc/group. En /etc/passwd se guarda el GID por defecto, ya que un usuario puede pertenecer a varios grupos.
    • Full name: nombre completo o otros comentarios,
    • Home directory: directorio por defecto en el sistema para esa cuenta.
    • Default shell: shell que arrancara por defecto cuando el usuario haga login o abra una shell.

    /etc/group

    Los grupos son similares a los usuarios en su administración y se definen en /etc/group. Las entradas siguen una estructura parecida:

    root: x:0:
    david: x:1000:

    En este caso:

    • Group name o nombre único que lo identifica.
    • Group password: como los usuarios, pueden tener un password o no tenerlo si está vacio.
    • Group ID: identificador único del grupo.
    • Group member list: lista de los miembros por username.

    /etc/shadow

    Para evitar que los passwords encryptados sean accesibles a todo el mundo, se guardan en /etc/shadow de la siguiente manera:

    david:$1$WIc/jeBW$TN5To9LyEDgETSYV.O3VD.:14233:0:99999:7:::

    • Username.
    • Password.
    • Días desde el 1 de enero de 1970 hasta el último cambio de password.
    • Mínimo número de dias que deben pasar para que el usuario pueda cambiar su password.
    • Máximo número de días hasta que se requiera cambiarla.
    • Días antes de que se reciba un warning de que la contraseña caduca.
    • Días con la contraseña caducada antes de que la cuente quede deshabilitada.
    • Días desde el 1 de enero de 1970 en el que la cuenta expira.
    • Reservado.

    En el caso de los grupos el archivo que contiene los passwords es /etc/gshadow.

    Comandos útiles

    useradd: para crear una cuenta de usuario.

    usermod: modifica una cuenta existente.

    userdel: borra una cuenta.

    groupadd: añade un grupo al sistema.

    groupmod: modifica los parámetros de un grupo.

    groupdel: borra un grupo.

    passwd: fija el password para un usuario.

    gpasswd: fija el password para un grupo.

    pwconv: habilita el uso de shadow password en el sistema.

    pwunconv: revierte el uso del archivo shadow al archivo estándar passwd.

    grpconv y :grpunconv: lo mismo para grupo.





    Shell

    24 12 2008

    La shell es el intérprete de comandos entre el usuario y el sistema operativo. Nos aporta lo siguiente:

    • Interfaz de usuario al SO: canal de comunicación al kernel.
    • Entorno para la ejecución de otros programas.
    • Permite lanzar y manejar comandos y programas para un entorno.
    • Un lenguaje de programación.

    Todas las shell comparten algunos conceptos:

    • Corren como programas de usuario.
    • Pueden usarse de forma interactiva por el usuario o de manera no interactiva por el sistema.
    • Puede lanzarse una shell desde otra. La nueva shell tendrá la shell original como proceso padre.
    • Las shell usan archivos de configuración para establecer su entorno.
    • Las shell pasan las variables de entorno a los procesos hijo.

    Bash es una de las shell más populares y es el intérprete predeterminado en muchos sistemas GNU/Linux. El entorno se compone de una serie de variables, cuyos valores son usados por programas y otras shell.

    Existen dos tipos:

    1) Las variables de entorno: se pueden entender como variables globales, pues se pasan a todos los procesos arrancados desde la shell, incluyendo otras shell. Ej: PATH: lista los directorios donde la shell busca los comandos introducidos.

    2) Shell variables: se pueden pensar como locales, porqué son específicas a la shell actual y los procesos hijo no las heredan. Para permitir que una variable local pueda ser usada por procesos hijo, debe exportarse con el comando export.

    Alias

    En bash se pueden fijar alias para comandos habituales o secuencias de comandos. Ex: alias more=’less’

    Functions

    También se pueden declarar funciones para ejecutar varias instrucciones. La sintaxis es: name ( ) { lista_de_comandos; }.

    Archivos de configuración

    Los usuarios pueden definir alias, funciones y variables de entorno, y para evitar introducirlos cada vez, bash usa varios archivos para preparar el entorno:

    Archivo Descripción
    /etc/profile Archivo que contiene la variables de entorno globales a todos los usuarios, incluyendo el PATH, y programas de inicio. Ejecutado cada vez que el usuario entra al sistema.
    ~/.bash_profile SI existe este archivo, se ejecuta automáticamente después de /etc/profile durante el login.
    ~/.bash_login SI .bash_profile no existe, se ejecuta automáticamente durante el login.
    ~/.profile Si no existe .bash_profile, ni .bash_login, este es el archivo que se ejecuta.
    /etc/bashrc Funciones y alias disponibles para todos los usuarios.
    ~/.bashrc Alias y funciones específicas del usuario. Se ejecuta automáticamente cuando arranca bash. Incluyendo el login, y todas las invocaciones interactivas o no interactivas.
    ~/.bash_logout Ejecutado automáticamente en el logout.
    ~/.inputrc Contiene atajos de teclado del usuario. Los valores globales se establecen en /etc/inputrc.

    Nota: /etc/profile se ejecuta cada vez que iniciamos sesión, y .bashrc cada vez que se ejecuta el bash.





    Localizar archivos en Linux

    30 06 2008

    Existen varias herramientas para localizar ficheros, pero es necesario saber cuál es la más adecuada en cada caso:

    • which: determina la localización de un comando y muestra la ruta completa del ejecutable (busca en el PATH del usuario).
    • find: localiza archivos que hagan match con una expresión. Tiene cantidad de opciones útiles.
    • locate: localiza archivos buscando en una base de datos (por ej. var/lib/mlocate/mlocate.db) previamente creada.
    • updatedb: crea o actualiza la base de datos de locate.
    • whatis: muestra descripciones del man, para matches con palabras exactas.
    • apropos: busca matches parciales y muestra la descripción del man.




    Uso de hard y symbolic links

    30 06 2008

    A menudo es útil tener acceso a un archivo desde diferentes puntos del sistema de archivos. Para evitar crear diferentes copias de un archivo, usamos un link, que ocupa mucho menos espacio. Existen dos tipos de links en Linux:

    • Symbolic links: es un simple puntero a otro archivo. Pueden apuntar a otros filesystems, a directorios, y a archivos ya inexistentes.
    • Hard links: no se trata de un link realmente, es otra entrada en el directorio para un archivo existente.  Las entradas tienen nombres diferentes, pero apuntan al mismo inodo (mismos permisos). Si se elimina sólo se borra una entrada en el directorio, pero el archivo no se borrará realmente hasta que el número de links sea 0. Los hard links sólo pueden definirse para el mismo sistema de archivos, y no pueden apuntar a un directorio.

    Los dos se crean con el comando ln (con la opción -s crearemos un symbolic link).

    Para vez el archivo apuntado por un symbolic link, podemos simplemente usar ls -l. Pero para ver los symbolic links que apuntan a un archivo deberemos usar find -lname (podemos no encontrar todos al poder estar en sistemas remotos).
    En el caso de un hard link deberemos buscar por el inodo, aprovechando que será el mismo para todos, con find -inum. En este caso está garantizado que los encontraremos todos.





    Administrando permisos

    29 06 2008

    En Linux el control de accesos a los ficheros se implementa mediante un conjunto de propiedades, que se guardan en el inodo del fichero. Se consideran tres clases de usuarios:

    1. Usuario: usuario propietario.
    2. Grupo: grupo propietario.
    3. Otros: resto de usuarios del sistema.

    Para cada clase se definen tres tipos de permisos: lectura (r), escritura (w), y ejecución (x).  Todos los permisos son binarios. Esto nos da en total 9 bits para los permisos de usuario, grupo y otros (rwxrwxrwx), pero existen tres bits adicionales:

    SUID: es aplicable sólo para ejecutables, no tiene efecto en directorios. Si el bit está activado, no importa quien lo haya ejecutado, pues tendrá los permisos de su propietario (como si fuera root).

    SGID: es lo mismo que SUID pero aplicado al grupo. La diferencia es que aplicado a un directorio, los nuevos archivos creados se asignan al mismo grupo propietario del directorio, no importa quien los cree.

    Sticky: actualmente aplicar el sticky bit a ejecutables no tiene sentido. En el caso de un directorio, los únicos que pueden renombrar o eliminar archivos son el propietario del fichero, el propietario del directorio y root.

    El uso de los bits extras es poco frecuente, por lo que no gastamos realmente tres bits. Los bits de SUID y SGID se marcarán sustituyendo la x de usuario o grupo por s o S (en mayúsculas indica que no estaba a 1). En el caso del sticky bit se sustutuirá la x de otros por t o T.

    Ejemplo:

    6755 = rwsr-sr-x

    Comandos:

    • umask: configura la máscara por defecto en la creación de ficheros.
    • chmod: modifica los permisos de un archivo.
    • chown: cambia el usuario y grupo propietario.
    • chgrp: cambia el grupo propietario.




    Administrando cuotas de disco

    28 06 2008

    Las cuotas para usuarios se pueden aplicar para cada filesystem de /etc/fstab, pero se suelen aplicar sólo a donde los usuarios guardan archivos, como /home/username.

    Cada sistema de archivos tiene hasta 5 tipos de limitaciones en la cuota:

    • Hard limit por usuario: es la máxima cantidad de espacio que un usuario puede tener, y una vez alcanzada no podrá escribir en el disco.
    • Soft limit por usuario: una vez alcanzado se alerta al usuario de la situación, pero puede seguir trabajando normalmente.
    • Hard limit por grupo: una vez superado ningún usuario del grupo podrá escribir, aunque su límite individual no se haya superado.
    • Soft limit por grupo: igual que el soft limit por usuario, pero en referencia al grupo.
    • Periodo de gracia: una vez se alcanza el soft limit, el usuario o grupo entra en el periodo de gracia. Una vez se agota el tiempo, el soft limit se convierte en hard limit.

    Comandos:

    • quota: muestra los límites para usuarios o grupos.
    • quotaon: activa cuotas ya configuradas para uno o más filesystems.
    • quotaoff: deshabilita cuotas.
    • quotacheck: examina los sistemas de archivos y compila las bases de datos de las cuotas (archivos quota.user y quota.group).
    • edquota: modifica cuotas para usuarios y grupos.
    • reqquota: reporta el estado de las cuotas.