ADMINISTRACIÓN DEL SISTEMA LINUX 1. Estructura de Directorio 1.1. Árbol de directorio en sistemas Linux 1.2. Navegación básica por el árbol de directorios 1.2.1. Creación de archivos y directorios 1.2.2. Borrado de archivos y directorios 1.2.3. Copiar y mover archivos y directorios 1.2.4. Búsqueda find /locate 2. Comandos principales en un sistema Linux 2.1. Comandos generales básicos 2.2. Permisos sobre ficheros 2.3. Comandos para administrar la red 3. Administración de usuarios y grupos 3.1. Usuarios. Ficheros /etc/passwd y /etc/shadow 3.1.1. Comandos para la creación/modificación/eliminación de usuarios. 3.2. Grupos. Ficheros /etc/group y /etc/gshadow 3.3. Directorio /etc/skel 4. Búsqueda de información del Sistema. 4.1. Directorio /proc 4.2. Comandos útiles para obtener información del sistema 5. Anexos Anexo I.- Utilización de comodines 1 Jesús Fernández Toledo www.losteatinos.es 1 ESTRUCTURA DE DIRECTORIO .1. Árbol de Directorio en Sistemas Linux Linux organiza la información del sistema en una estructura de árbol jerárquico de directorios compuesta por ficheros. Esta estructura se forma mediante un sistema de ficheros raíz y un conjunto de ficheros montables. Un sistema de ficheros es una estructura de directorios compleja. Para poder utilizar un sistema de directorios hay que montarlo, o sea enlazarlo a una estructura de directorios ya existente. Al iniciar el sistema el usuario se encontrara con un árbol de directorio formado por los distintos sistemas de ficheros que se encuentran montados en ese instante. 2 Jesús Fernández Toledo www.losteatinos.es /bin: Comando y binarios del usuario /boot: Archivos utilizados para el arranque del sistema /dev: Archivos de dispositivos /etc: Ficheros de configuración del sistema /home: Directorio de trabajo de los usuarios /lib: bibliotecas compartidas y módulos del kernel necesarios para ejecutar los programas residentes en /bin y/sbin /media: Directorio donde se suelen encotrar los dispositivos extraíbles, como CD-ROM o USB /mnt: Directorio donde se suelen montar sistemas de archivos temporales /proc: Directorio virtual donde podemos ver toda la información sobre el kernel, los procesos del sistema y el hardware instalado /root: Directorio de trabajo del Administrador del Sistema /sbin: Binarios del sistema que suele ejecutar el root. /tmp: Donde se encuentran los ficheros temporales del sistema /usr: Utilidades, bibliotecas y aplicaciones de usuario .2. Navegación básica por el Árbol de Directorios El intérprete de comandos o Shell del sistema es la interfaz entre el usuario y el sistema operativo. Su función es la de recibir órdenes del usuario, a través de la línea de comandos, interpretarlas, ejecutarlas y mostrar su resultado. Nos permite interactuar directamente con el sistema y sus ficheros de configuración. Tras iniciar el sistema nos aparecerá un terminal que permitirá “logearnos” en el sistema, introduciendo nombre de usuario y contraseña. Tras esto aparecerá un prompt con el siguiente aspecto: usuario@ubuntu:~$ Donde: Usuario: Nombre del usuario @ubuntu: Nombre del equipo ~: Directorio donde nos encontramos (:~ significa que estamos en nuestro home) $/#: El símbolo $ indica que es un usuario normal # indica que es el administrador 3 Jesús Fernández Toledo www.losteatinos.es En Linux disponemos de varias Shell bash, ash, csh, Zsh, ksh, tcsh, siendo la más utilizada la bash. Si tecleamos bash en la consola, se crea un Shell hijo. Linux proporciona por defecto seis terminales de texto de Control+Alt+F1 a Control+Alt+F6. Si queremos volver al modo gráfico lo hacemos con Alt+F7. Los comandos principales para navegar por el árbol de directorios son: cd, ls y pwd cd ruta La ruta puede ser: Absoluta: si comienza por / y se le da la ruta completa Relativa: a partir del directorio actual, usando ../ o ./ ls lista el contenido de un directorio. Parámetros interesantes ls –a Con un . delante del fichero lo ocultamos. Pero como oculto realmente un fichero si no quiero que lo vea nadie. Lo meto en una carpeta con los siguientes permisos chmod go –rwx carpeta pwd: ¿dónde estoy? 1.2.1 Creación de archivos y directorios mkdir: pemite crear directorios. –p crea una jerarquía de directorios en un solo paso touch, cat, gedit, nano, vi, vim, joe: Crean un nuevo fichero Los permisos que se dan por defecto a un fichero o directorio creado por defecto vienen indicados por umask. Para ver el valor actual teclearemos umask en la línea de comandos. La salida será cuatro cifras en octal, que “definen los permisos que se deniegan”. Por defecto el valor suele ser 0022. Si creamos un nuevo fichero, este debería tener los siguientes permisos 0666, pero al ser umask 0022 el resultado es 0666-0022=0644 (rw-r--r-- ) Si creamos un directorio los permisos por defecto serian 0777. Al tener umask un valor de 0022 el resultado es 0777-0022=0755 (rwxr-xr-x) Con el comando umask puedo cambiar la máscara temporalmente Con el comando stat nombre_fichero se puede ver más en profundidad datos del archivo 1.2.2 Borrado de archivos y directorios rmdir: permite borrar directorios. Tiene que estar vacio. Soporta el parámetro -p rm: eliminación de ficheros y directorios. Con la opción –r borra directorios aunque no esté vacío. 4 Jesús Fernández Toledo www.losteatinos.es 1.2.3 Copiar y mover archivos y directorios cp: copia ficheros y directorios. cp fichero1 fichero2 ¡¡¡ Ojo si fichero2 existe se lo carga!!! Con –i me avisa en caso de sobrescribir. No puede copiar una carpeta en otra directamente. Hay que copiar el contenido de forma recursiva utilizando -r mv: mueve o renombra ficheros. mv fichero1 carpeta1. Si es en el mismo directorio renombra 1.2.4 Búsqueda find / locate Si utilizamos find sin ningún parámetro buscara todos los ficheros bajo el directorio actual. Si deseamos buscar en un directorio determinado, lo especificamos como primer argumento. Ej.- find /home El parámetro –name permite buscar ficheros que coincidan con el patrón dado Ej.- find ~ -name “*firefox*” El problema de find es que puede tardar mucho en hacer una búsqueda. Hay veces que es mucho más rápido si utilizamos locate, locate solo permite buscar ficheros y directorio (que es lo que deseare buscar normalmente.) 5 Jesús Fernández Toledo www.losteatinos.es 2 COMANDOS PRINCIPALES EN UN SISTEMA LINUX 2.1 Comandos generales básicos startx iniciar modo gráfico halt, shutdown –h now, init 0 apagar la máquina reboot reiniciar date fecha y hora actual clear limpiar la pantalla who que usuarios están conectados al sistema. ps, top muestra por pantalla un listado de los procesos que se están ejecutando en el sistema. apt-get instalar, desinstalar paquetes, actualizar los repositorios. Man, help muestra la página de ayuda de un comando 2.2 Permisos sobre ficheros En Linux todos los archivos pertenecen obligatoriamente a un usuario y a un grupo. Cuando un usuario crea un nuevo archivo, el propietario del archivo será el usuario que lo ha creado y el grupo del archivo será el grupo principal de dicho usuario. Ejemplo, si un usuario llamado 'pepe' cuyo grupo principal es el grupo 'profesores' crea un nuevo archivo, el propietario del archivo será 'pepe' y el grupo propietario del archivo será 'profesores', o lo que es lo mismo, el archivo pertenecerá al usuario pepe y al grupo profesores. Obligatoriamente, todos los archivos del sistema pertenecen a algún usuario y a algún grupo. Con el comando ls añadiendo la opción -l (modificador) podemos visualizar el usuario propietario y el grupo propietario del archivo, ejemplo: Cada fichero (directorio, unidad, dispositivo) en Linux tiene una serie de permisos que indica quien puede leer, escribir o realizar acciones de ejecución sobre él. Lectura: pueden ver el contenido, copiarlo… Escritura: cambiar ficheros, directorios, borrarlo… Ejecución: Programas: ejecutarlos 6 Jesús Fernández Toledo Directorio: acceso www.losteatinos.es Los permisos vienen indicados por las letras rwx. r: lectura w: escritura x: ejecución Además cada fichero pertenece a un usuario y a un grupo. Estos tres permisos se asignan para: el usuario el grupo el resto del sistema. Primer bloque: permisos del propietario Segundo bloque: el grupo Tercer bloque: el resto de usuarios. 7 Jesús Fernández Toledo www.losteatinos.es El comando chmod permite modificar los permisos sobre los ficheros. Existen dos métodos para usarlo: Con Número en octal chmod 777 pepe quedaria rwxwrxwrx chmod 721 pepe quedaría rwx-w---x Un número en octal se representa por 3 en binario. 011 =3. Con lo que para cada bloque tendremos un número en octal que representa si tiene o no un permiso. - La ausencia de permiso se representa con un 0 - Tener un permiso se representa con un 1 EJEMPLO: Si quiero que el usuario tenga los tres permisos rwx 111 = 7 Si quiero que el grupo que tenga solo permisos de lectura r-- 100=4 Si deseo que el resto del sistema no quiero que tenga ningún permiso --- 000 = 0 Quedando el comando: chmod 740 fichero Con letras augo (todos usuario grupo otros) + - rwx a All u User g Group o Others Con + añadimos Con – quitamos Con = forzamos chmod g +rw, o –rwx chmod ugo=rwx -> todo activado 8 Jesús Fernández Toledo www.losteatinos.es Los sistemas de fichero de Windows no soportan propietarios o grupos de ficheros. Podemos especificar un propietario por defecto (wid=) y/o grupo (gid=). Además la entrada umask permite asignar por defecto privilegios de acceso. chown: cambia el propietario de un fichero Sintaxis: chown nuevousuario archivo1 [ archivo2 archivo3...] chown -R nuevousr directorio Cambia el propietario para que pase a ser nuevousr a directorio, todos los archivos y subdirectorios contenidos en él, cambiándolos también de forma recursiva en todos ficheros de los subdirectorios. chgrp: Ídem pero para el grupo 2.3 Comandos para administrar la red Ifconfig muestra la configuración de red de la máquina. ping muestra si dos máquinas están comunicadas. route muestra puerta de enlace. Pasos para Configurar la conexión a internet de la máquina de forma manual Paso 1. Configurar la IP ifconfig eth0 192.168.1.1 netmask 255.255.255.0 En el primer paso simplemente asignamos la IP y la máscara de subred a una interface, donde “eth0″ es el nombre de la interface. La interface es lo mismo que la tarjeta de red. Si sólo tienes una tarjeta de red lo más probable es que sea eth0. Hay otra opción para hacer este paso y es escribiendo el comando de esta forma “ifconfig eth0 192.168.1.1/24″, esta es otra forma de asignar la máscara de subred, lo que hacemos es decir que nuestra mascara de subred es de 24 bits, es decir el equivalente a 255.255.255.0. Paso 2. Configurar GateWay 9 Jesús Fernández Toledo www.losteatinos.es route add default gw 192.168.1.1 Agregamos nuestro default gateway o router, cualquier paquete que sea dirigido a una IP fuera de nuestra red será enviado al router. Paso 3. Configurar DNS echo nameserver 192.168.1.200 > /etc/resolv.conf En el tercer paso usamos una forma elegante de agregar nuestro DNS. El archivo /etc/resolv.conf contiene las direcciones de los servidores dns, es un archivo de texto normal, otra forma de hacer este paso es abrir el archivo en un editor de texto y agregar la línea “nameserver 192.168.1.200″ manualmente. Sin embargo de esta forma es más fácil y creativa. Lo que hacemos es anexar la línea mencionada anteriormente usando el “>” que ven en el comando. Después de hacer esto les recomiendo reiniciar los servicios de red. En algunas distribuciones de linux el comando es “service network restart” o “/etc/init.d/network restart”. Puedes reiniciar la red utilizando dhclient, es más fácil de recordar Por ejemplo: Imaginemos que los datos que necesitamos configurar en nuestra interfaz son: IP : 192.168.53.226 Netmask : 255.255.255.0 Puerta de enlace : 192.168.53.1 Ahora nos toca configurarla, recuerda que se hace con permisos de Root en la mayoría de los casos. 1. Configurando ip sudo ifconfig eth0 192.168.53.226 2. Configurando Mascara de red sudo ifconfig eth0 netmask 255.255.255.0 Recuerda que el paso 1 y 2 se puede hacer en uno solo: sudo ifconfig eth0 192.168.53.226 netmask 255.255.255.0 o bien sudo ifconfig eth0 192.168.53.226/24 10 Jesús Fernández Toledo www.losteatinos.es 3. Ahora la puerta de enlace. sudo route add default gw 192.168.53.1 eth0 Para ver si nuestra configuración esta ok ejecutamos: jesus@ubuntu:~$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0D:88:17:D3:1D inet addr:192.168.53.228 Bcast:192.168.53.255 Mask:255.255.255.0 Y para ver la puerta de enlace: jesus@ubuntu:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref default 192.168.53.1 0.0.0.0 UG 0 Use Iface 0 eth0 0 Con estos pasos ya tenemos configurada una ip fija en nuestra tarjeta de red. Recuerda que esta configuración durara sólo hasta que reinicies tu Linux ya que por defecto está habilitado el DHCP, para ello hay que modificar el archivo /etc/network/interfaces Para editarlo lo hacemos de la siguiente forma sudo nano /etc/network/interfaces Si queremos asignar una ip tendremos que modificar lo que aparece en el campo donde nos indica el nombre de la interface, en este caso eth0 Así puede aparecer auto eth0 iface eth0 inet dhcp Como comentamos anteriormente por defecto podemos encontrar que la interface está configurada para DHCP y como queremos ahora configurarla en forma estática tendremos que modificar dhcp por static de la siguiente forma: auto eth0 iface eth0 inet static Bien, ahora le entregaremos los datos de ip, máscara y puerta de enlace, siguiendo con el ejemplo anterior y en modo de ejemplo utilizaremos los datos del ejercicio anterior. 11 Jesús Fernández Toledo www.losteatinos.es IP : 192.168.53.226 Netmask : 255.255.255.0 Puerta de enlace : 192.168.53.1 Entonces queremos agregar estos datos en nuestro archivo de configuración /etc/network/interfaces, para esto tendremos que agregar después de la linea static lo siguiente. address 192.168.53.228 netmask 255.255.255.0 gateway 192.168.53.1 Para terminar nuestra configuración de la interface eth0 quedaría así. auto eth0 iface eth0 inet static address 192.168.53.228 netmask 255.255.255.0 gateway 192.168.53.1 Ahora reinicia tu sistema o bien reinicia la red de la siguiente forma. sudo /etc/init.d/networking restart (Para reiniciar red) o bien reboot (Para reiniciar Sistema) 12 Jesús Fernández Toledo www.losteatinos.es 3. ADMINISTRACION DE USUARIOS Y GRUPOS Linux es un sistema operativo multiusuario, lo que permite que varios usuarios estén utilizando el sistema simultáneamente a través de la línea de comandos o conexiones remotas. Por lo tanto es necesario disponer de una base de datos de usuarios y grupos donde poder asignar o denegar permisos de acceso a los recursos autenticados del sistema. Ello permitirá personalizar los entornos de trabajo de cada usuario, ya que en los entornos de trabajo tenemos por costumbre personalizar nuestros equipos con carpetas, fondos de escritorio, accesos directos, … La administración de usuarios y grupos solamente puede realizarlas el usuario root utilizando los comandos de gestión de usuarios y ficheros para tal fin. 3.1 Usuarios. Ficheros /etc/passwd - /etc/shadow En Linux hay tres tipos de usuarios. Todos los usuarios tienen un identificador de usuario (UID) y un identificador de grupo (GID). root: es el usuario más importante ya que es el administrador y dueño del sistema. También llamado superusuario o administrador. Su UID (User ID) es 0 (cero). Es la única cuenta de usuario con privilegios sobre todo el sistema. Acceso total a todos los archivos y directorios con independencia de propietarios y permisos. Controla la administración de cuentas de usuarios. Ejecuta tareas de mantenimiento del sistema. Puede detener el sistema. Instala software en el sistema. Puede modificar o reconfigurar el kernel, controladores, etc. Usuarios normales: pueden iniciar la sesión y tienen una funcionalidad limitada tanto en los comandos que puede utilizar como en los ficheros a los que tiene acceso. Se usan para usuarios individuales. En las distros actuales de Linux se les asigna generalmente un UID superior a 1000, aunque es configurable. Cada usuario dispone de un directorio de trabajo, ubicado generalmente en /home. Cada usuario puede personalizar su entorno de trabajo. Tienen solo privilegios completos en su directorio de trabajo o HOME. Por seguridad, es siempre mejor trabajar como un usuario normal en vez del usuario root, y cuando se requiera hacer uso de comandos solo de root, utilizar el comando sudo. Usuarios asociados a servicios (usuarios especiales): No pueden iniciar sesión en el sistema. Permiten establecer los permisos de un determinado servicio. Ej.- El servidor de páginas web tiene asociado un usuario para poder especificar que ficheros tiene asociados, y por lo tanto que ficheros son visibles a través de internet. 13 Jesús Fernández Toledo www.losteatinos.es Ejemplos: bin, daemon, adm, lp, sync, shutdown, mail, operator, squid, apache, etc. Generalmente se les asigna un UID entre 1 y 1000 (definido en /etc/login.defs), salvo para el usuario nobody al que se le asigna el último UID posible, el 65534. Se les llama también cuentas del sistema. No tiene todos los privilegios del usuario root, pero dependiendo de la cuenta asumen distintos privilegios de root. Esto es para proteger al sistema de posibles formas de vulnerar la seguridad. No tienen contraseñas pues son cuentas que no están diseñadas para iniciar sesiones con ellas. También se les conoce como cuentas de "no inicio de sesión" (nologin). Se crean (generalmente) automáticamente al momento de la instalación de Linux o de la aplicación. Fichero /etc/passwd Es el fichero que se utiliza para administrar a los usuarios. Es un fichero de texto con una entrada para cada cuenta, la cual incluye, el nombre de login, el ID del usuario, el ID del grupo primario, el directorio del usuario y el Shell por defecto. También pueden incluir detalles tales como nombre, apellidos, número de teléfono. Ejemplo de una entrada en /etc/passwd pepe:x:1000:1000:Jose; Garcia;;:/home/pepe:/bin/bash 1 campo - Nombre de usuario: Nombre para logearse el usuario. 2 campo - Contraseña: Aquí va la contraseña encriptada. En la mayoría de los sistema aparece una x indica que la contraseña se encuentra en /etc/shadow. Si aparece en blanco el usuario puede entrar sin contraseña. 3 campo - UID: Identificado univoco dentro de Linux. El 0 para root. Del 1 al 999 cuentas del sistema. Los números UID menores que 999 se reservan para usuarios especiales del sistema. Del UID 1000 en adelante se usan para usuarios normales. 4 campo - GID: Identificador del grupo. Los números GID menores que 100 se reservan para grupos especiales del sistema. 5 campo - Información Adicional: Varias palabras separadas por ; utilizadas para describir al usuario (Nombre;Apellidos;Numero de teléfono) 6 campo - Directorio HOME: En caso de usuarios normales /home/nombre_usuario. Los pseudo usuarios tienen su propio directorio de trabajo por ejemplo, el usuario impresora lp tiene /var/spool/lpd 7 campo -Shell: intérprete de comandos que se carga al iniciar el usuario, normalmente /bin/bash 14 Jesús Fernández Toledo www.losteatinos.es Este fichero tiene los siguientes permisos de ejecución 0644, los que significa que cualquier usuario puede acceder a él y leerlo. Si se almacenara en el las contraseñas cualquier usuario podría acceder al fichero y desencriptarlas. Por ello para guardar las contraseñas se utiliza el fichero /etc/shadow el cual pertenece al root y al grupo shadow, evitando q el resto de usuarios acceda a este fichero. Fichero /etc/shadow Anteriormente (en sistemas Unix) las contraseñas cifradas se almacenaban en el mismo /etc/passwd. El problema es que 'passwd' es un archivo que puede ser leído por cualquier usuario del sistema, aunque solo puede ser modificado por root. Con cualquier computadora potente de hoy en día, un buen programa de descifrado de contraseñas y paciencia es posible "crackear" contraseñas débiles (por eso la conveniencia de cambiar periódicamente la contraseña de root y de otras cuentas importantes). El archivo 'shadow', resuelve el problema ya que solo puede ser leido por root. Considérese a 'shadow' como una extensión de 'passwd' ya que no solo almacena la contraseña encriptada, sino que tiene otros campos de control de contraseñas. En cada línea de este fichero encontramos la siguiente información: pepe:$1$8mspOWwL$w54sVYLP1/hxvEljZEGek0:15990:0:99999:7::: 1 campo - Nombre de usuario: El mismo que aparece en /etc/passwd 2 campo – Contraseña: Contraseña cifrada o encriptada. Si está vacío el campo el usuario no tiene contraseña. Si tiene “*LK*”, la cuenta está bloqueada. “*RETIRED*”, si la cuenta esta retirada. Si tiene “*” la contraseña se pondrá más tarde. Si contiene “!” cuenta todavía no está activa. Si deseamos deshabilitar temporalmente una cuenta, debemos poner delante de la contraseña un signo de exclamación !. 3 campo - Último cambio: La fecha del último cambio de contraseña medida en días desde 01.01.1970 4 campo - Edad min: Número de días que deben transcurrir hasta que la contraseña se pueda volver a cambiar. Un 0 indica que se puede cambiar ya. 5 campo – Edad max: Número de días tras los cuales hay que cambiar la contraseña. (-1 significa nunca). A partir de este dato se obtiene la fecha de expiración de la contraseña. 99999 es lo máximo que se puede poner. 6 campo - Aviso: Número de días antes de la expiración de la contraseña en que se le avisará al usuario al inicio de la sesión. 7 campo - Periodo de Gracia: Cuanto tiempo permito trabajar al usuario una vez caducada su contraseña. 15 Jesús Fernández Toledo www.losteatinos.es 8 campo - Validez: Fecha en la que caduca la cuenta, medida en días desde 01.01.1970. Si el campo está en blanco la cuenta no expira nunca. 9 campo – Reservado: Un capo reservado para usos en el futuro Solo son obligatorios el campo nombre y contraseña, siendo los demás opcionales. Mediante el comando chage, podemos modificar las opciones: Edad min/max, Aviso, Periodo de Gracia, Validez. Sintaxis: chage –E aaaa-mm-dd nombre_usuario Los algoritmos de encriptación más utilizados en Linux son: DES (ya en desuso por su poca seguridad) MD5: si empieza por $1$ SHA-256: si empieza por $5$. PERTENECIENTES A SHA-512: si empieza por $6$. SHA-2 salt → caracteres que se añaden de forma aleatoria, de manera que dos contraseñas iguales no den el mismo resultado, una vez encriptadas. Comando para crear las contraseñas: mkpassw mkpasswd es una herramienta que nos va a permitir generar hashes para nuestras contraseñas. Se encuentra disponible en el paquete whois, así que, si no lo tenemos, lo instalamos: # apt-get install whois Una función criptográfica hash -usualmente conocida como “hash”- es un algoritmo matemático que transforma cualquier bloque arbitrario de datos en una nueva serie de caracteres con una longitud fija. Independientemente de la longitud de los datos de entrada, el valor hash de salida tendrá siempre la misma longitud. Para ver los métodos de cifrado que podemos utilizar, ejecutamos: # mkpasswd -m help Para crear una contraseña cifrada, por ejemplo con cifrado sha-512, ejecutamos en un terminal: # mkpasswd -m sha-512 El programa nos pedirá la contraseña. La introducimos y automáticamente nos devolverá un hash con dicha contraseña cifrada. Lo copiamos y ya podemos utilizarlo donde sea necesario. 16 Jesús Fernández Toledo www.losteatinos.es Fichero/etc/login.defs En el archivo de configuración /etc/login.defs están definidas las variables que controlan los aspectos de la creación de usuarios y de los campos de shadow usadas por defecto. Algunos de los aspectos que controlan estas variables son: Número máximo de días que una contraseña es válida PASS_MAX_DAYS El número mínimo de caracteres en la contraseña PASS_MIN_LEN Valor mínimo para usuarios normales cuando se usa useradd UID_MIN El valor umask por defecto UMASK Si el comando useradd debe crear el directorio home por defecto CREATE_HOME Algoritmo para la encriptación de la contraseña, “ENCRYPT METHOD SHA512”.( si vamos a permitir o no la encriptación con el algoritmo MD5, “MD5_CRYT_ENAB no”). Basta con leer este archivo para conocer el resto de las variables que son autodescriptivas y ajustarlas al gusto. Recuérdese que se usaran principalmente al momento de crear o modificar usuarios con los comandos useradd y usermod. Fichero /etc/shells El fichero de shells contiene una lista de shells válidos. Si la shell de usuario no está en este fichero, o bien el usuario tiene la shell , /bin/false, no puede acceder al sistema mediante login. 3.1.1. Comandos para la creación/modificación/eliminación de usuarios Creación de usuarios adduser Añade un nuevo usuario al sistema. Al ejecutarlo nos ira pidiendo una serie de datos para completar la información de la cuenta, como, pide contraseña de usuario, comentarios o nombre completo del usuario, teléfono móvil, teléfono fijo, y tras ello, al contrario de useradd, el usuario ya estaría activo. El comportamiento del comando adduser se configura mediante el fichero /etc/adduser.conf Sintaxis: adduser [opciones] usuario adduser [opciones] usuario grupo Opciones: --ingroup nomgrupo Crea al usuario con nomgrupo como grupo principal. --gid num_gid Igual que la anterior pero usando el GID del grupo en vez del nombre. 17 Jesús Fernández Toledo www.losteatinos.es --home directorio Hace que el directorio sea el directorio personal del usuario, en vez del directorio por defecto /home/nombre_usuario Argumentos Usuario Añade el usuario al sistema con el nombre que se le indique. Grupo Añade el usuario, que debe existir previamente, al grupo, que también debe existir, como grupo secundario. # adduser juan profesores // añade juan al grupo profesores ya creado previamente pero si luego queremos borrar grupo primario juan no se podría. (En este habría que crear el usuario y el grupo previamente) Mejor usar: adduser juan -ingroup profesores //así podemos borrar grupo primario Cambiar la máscara de creación de directorios home Configurando un equipo que va a manejar múltiples usuarios, nos encontramos con la necesidad cambiar el comportamiento por defecto (en Debian/ubuntu) para la forma en que se crean los nuevos usuarios. Ubuntu crea los directorios de usuario en /home y con una máscara 0755. Sin embargo, para nuestro caso utilizar la máscara 0700. El archivo de configuración ubicado en /etc/adduser.conf permite modificar estas opciones. Deberemos modificar el valor de la variable DIR_MODE=700, la cual permite a los nuevos usuarios crearán su carpeta con dichos privilegios. Además deseamos que no cree nuevos grupos cada vez que se crea un usuario, (el caso más común) los usuarios pertenecerán al grupo con GID 100 (users). Primero hay que hacer la variable "USERGROUPS=no", finalmente verificar que "USERS_GID=100" hace referencia al grupo deseado. useradd Añade un nuevo usuario al sistema, con el nombre de usuario que especifiquemos. IMPORTANTE: NO CREA LA CARPETA DE USUARIO EN /home, por lo tanto usar para SAMBA o para usos que no necesiten crear carpetas en directorio /home Sintaxis: useradd [opciones] [nombre de usuario] Opciones: 18 Jesús Fernández Toledo www.losteatinos.es Si se deja en blando toma las opciones por defecto -c añade un comentario al momento de crear al usuario, campo 5 de /etc/passwd -d Especifica el directorio inicial del usuario. Suele ser /home/nombre_usuario. Campo 6 de /etc/passwd Especifica el shell del usuario. Si no se especifica será /bin/bash. Especifica el grupo primario del usuario (GID). Campo 4 /etc/passwd Especifica los grupos secundarios del usuario, separados por , Especifica que no se cree un directorio de inicio para el usuario -s -g -G -M -m Crea directorio de inicio /home/usuario y le pone todos los subdirectorios y ficheros que haya en /etc/skel Especifica la fecha de expiración de la cuenta. Formato AAAA-MM-DD, -e campo 8 de /etc/shadow crea una cuenta del sistema o especial, su UID será menor al definido en/etc/login.defs en la variable UID_MIN, además no se crea el directorio de inicio. -r Especifica el identificador de usuario para el usuario. Si no se indica esta -u opción, automáticamente se establece el siguiente número disponible a partir del último usuario creado. En este caso es necesario introducir mediante las opciones toda la información necesaria para su configuración. El usuario estará deshabilitado hasta que le demos una clave. # useradd juan Se creará el usuario y su grupo, así como las entradas correspondientes en /etc/passwd, /etc/shadow y /etc/group. La cuenta por defecto se crea desactivada, hay que activarla con passwd juan. No se creará el directorio de inicio o de trabajo: /home/juan y los archivos de configuración que van dentro de este directorio. Las fechas de expiración de contraseña, etc. Quedan lo más amplias posibles así que no hay problema que la cuenta caduque, así que prácticamente lo único que faltaría sería añadir la contraseña del usuario (por defecto añade ! en el fichero shadow) y algún comentario o identificación de la cuenta. Las opcion con '-c' es posible establecer el comentario, campo 5 de /etc/passwd # useradd -c "Juan Perez Hernandez" juan Siempre el nombre del usuario es el último parámetro del comando. Asi por ejemplo, si queremos salirnos del default, podemos establecer algo como lo siguiente: # useradd -d /usr/juan -s /bin/csh -u 800 -c "Juan Perez Hernandez" juan Con lo anterior estamos cambiando su directorio de inicio, su shell por defautl sera csh y su UID será el 800 en vez de que el sistema tome el siguiente número disponible. 19 Jesús Fernández Toledo www.losteatinos.es /etc/default/useradd Contiene los valores por defecto a la hora de añadir un usuario al sistema con el comando useradd. Modificación de usuarios usermod Como su nombre lo indica, usermod permite modificar o actualizar un usuario o cuenta ya existente. Sintaxis: usermod [opciones] usuario Sus opciones más comunes o importantes son las siguientes: -c c añade o modifica el comentario, campo 5 de /etc/passwd -d -d modifica el directorio de trabajo o home del usuario, campo 6 de /etc/passwd -e -e cambia o establece la fecha de expiración de la cuenta, formato AAAAMM-DD, campo 8 de /etc/shadow -g -g cambia el número de grupo principal del usuario (GID), campo 4 de /etc/passwd -G establece otros grupos a los que puede pertenecer el usuario, separados por comas. -G -l cambia el login o nombre del usuario, campo 1 de /etc/passwd y de /etc/shadow -L Bloquea la cuenta del usuario, no permitiéndole que ingrese al sistema. No borra ni cambia nada del usuario, solo lo deshabilita. -s -u cambia el shell por defecto del usuario cuando ingrese al sistema. -u cambia el UID del usuario. -U -U desbloquea una cuenta previamente bloqueada con la opción -L. Argumento: Usuario Elimina el grupo con el nombre que se le indique como argumento. 20 Jesús Fernández Toledo www.losteatinos.es Ejemplo: Si quisiéramos cambiar el nombre de usuario de 'sergio' a 'sego': # usermod -l sego sergio Casi seguro también cambiará el nombre del directorio de inicio o HOME en /home, pero si no fuera así, entonces: # usermod -d /home/sego sego Otros cambios o modificaciones en la misma cuenta: # usermod -c "supervisor de area" -s /bin/ksh -g 505 sego Lo anterior modifica el comentario de la cuenta, su shell por defecto que ahora será Korn shell y su grupo principal de usuario quedó establecido al GID 505 y todo esto se aplicó al usuario 'sego' que como se observa debe ser el último argumento del comando. El usuario 'sego' salió de vacaciones y nos aseguramos de que nadie use su cuenta: # usermod -L sego passwd: se utiliza para poder cambiar las contraseñas de los usuarios. Este comando es necesario cuando creamos usuarios con useradd. Crear al usuario con useradd es el primer paso, el segundo es asignarle una contraseña a ese usuario. Esto se logra con el comando passwd que permitirá ingresar la contraseña y su verificación: # passwd sergio Changing password for user prueba. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. # El usuario root es el único que puede indicar el cambio o asignación de contraseñas de cualquier usuario. Usuarios normales pueden cambiar su contraseña en cualquier momento con tan solo invocar passwd sin argumentos, y podrá de esta manera cambiar la contraseña cuantas veces lo requiera. passwd tiene integrado validación de contraseñas comunes, cortas, de diccionario, etc. así que si por ejemplo intento como usuario normal cambiar mi contraseña a 'qwerty' el sistema me mostrará lo siguiente: $ passwd Changing password for user prueba. New UNIX password: BAD PASSWORD: it is based on a dictionary word Retype new UNIX password: passwd: all authentication tokens updated successfully. 21 Jesús Fernández Toledo www.losteatinos.es Nótese que al ingresar 'qwerty' como contraseña se detectó que es una secuencia ya conocida como contraseña y me manda la advertencia: "BAD PASSWORD: it is based on a dictionary word", sin embargo me permite continuar, al ingresar la verificación. Es decir, passwd avisa de malas o débiles contraseñas pero permite establecerlas si realmente se desea. Resumiendo entonces, se podría decir que todo este tutorial se reduce a dos líneas de comandos para crear y dejar listo para trabajar a un usuario en Linux: #> useradd ana #> passwd ana Se crea el usuario 'ana', useradd hace todo el trabajo de establecer el shell, directorio de inicio, copiar archivos iniciales de configuración de la cuenta, etc. y después passwd establece la contraseña. Asi de simple. passwd tiene varias opciones que permiten bloquear la cuenta '-l', desbloquearla '-u', y varias opciones más que controlan la vigencia de la contraseña, es decir, es otro modo de establecer los valores de la cuenta en /etc/shadow. Eliminación de usuarios userdel Como su nombre lo indica, userdel elimina una cuenta del sistema. Puede ser invocado de tres maneras: # userdel sergio Sin opciones elimina la cuenta del usuario de /etc/passwd y de /etc/shadow, pero no elimina su directorio de trabajo ni archivos contenidos en el mismo. # userdel -r sergio Al igual que lo anterior elimina la cuenta totalmente, pero con la opción -r además elimina su directorio de trabajo y archivos y directorios contenidos en el mismo, así como su buzón de correo, si es que estuvieran configuradas las opciones de correo. La cuenta no se podrá eliminar si el usuario esta logueado o en el sistema al momento de ejecutar el comando. # userdel -f sergio La opción -f es igual que la opción -r, elimina todo lo del usuario, cuenta, directorios y archivos del usuario, pero además lo hace sin importar si el usuario está actualmente en el sistema trabajando. Es una opción muy radical, además de que podría causar inestabilidad en el sistema, así que hay que usarla solo en casos muy extremos. 22 Jesús Fernández Toledo www.losteatinos.es Deluser Se utiliza el comando deluser seguido del nombre del usuario y del nombre del grupo del que queremos quitarle, ejemplo: # deluser juan profesores // quita a juan del grupo profesores /etc/deluser.conf Contiene los valores por defecto cuando se eliminan usuarios con el comando deluser. 3.2 Grupos. Ficheros /etc/group y /etc/gshadow Para poder administrar los permisos de los usuarios de una forma más flexible, el sistema Linux permite la organización de usuarios en grupos y establecer permisos a los grupos. Ejemplo: si en un centro educativo el grupo "profesores" tiene acceso a ciertas carpetas, cuando demos de alta un profesor nuevo, tan solo tendremos que añadirle al grupo "profesores" para que pueda acceder a todas esas carpetas. Es lo que se denomina administración de permisos por grupos. Todos los usuarios pertenecen al menos a un grupo que es el grupo principal del usuario, también llamado grupo primario del usuario, pero pueden pertenecer a más grupos. En caso de que pertenezcan a más grupos, éstos serán grupos secundarios. Los grupos pueden contener varios usuarios. Los grupos de usuarios solo pueden contener usuarios, nunca podrán contener a otros grupos. Cada fichero creado en una maquina Linux, se asigna automáticamente a un grupo y a un usuario. Los administradores pueden asignar permisos de manera separada para usuarios y para grupos de cada archivo. La posibilidad de asignar múltiples usuarios a cada grupo facilita a 23 Jesús Fernández Toledo www.losteatinos.es esto usuarios el acceso a un determinado archivo o directorio. Ej.- grupo cdrom para asignar permisos sobre la unidad. Los usuarios puede pertenecer a todos los grupos que queramos, pero siempre tendrán un grupo primario. El grupo primario se ve en /etc/passwd y la pertenencia a cualquier otro grupo en /etc/group Fichero /etc/group Este archivo guarda la relación de los grupos a los que pertenecen los usuarios del sistema. Cada usuario del sistema debe pertenecer obligatoriamente a un grupo principal o primario. El grupo principal o primario de cada usuario es el grupo cuyo GID viene en el fichero /etc/passwd. Además un usuario puede pertenecer a otros grupos, llamados grupos secundarios, no es obligatorio aunque puede convenir para ciertos casos. root:x:0:root ana:x:1001: sergio:x:1002:ventas,supervisores,produccion cristina:x:1003:ventas,sergio Cada una de las líneas representa un grupo y responde al esquema: Campo 1 - grupo: es el nombre del grupo Campo 2 - contraseña: si aparece una x; la contraseña se encuentra cifrada en /etc/gshadow. Si este campo aparece vacío, significa que el grupo no necesita contraseña. Campo 3 - GID: nº de Identidad de Grupo (el cero se reserva para el grupo root) Campo 4 - lista_usuarios: Es opcional. Lista separada por comas de usuarios que tienen a ese grupo como grupo secundario. Para saber si algún usuario tiene el grupo como primario deberíamos mirarlo en el fichero passwd. Actualmente al crear al usuario con useradd se crea también automáticamente su grupo principal de trabajo GID, con el mismo nombre del usuario. Es decir, si se añade el usuario 'sergio' también se crea el /etc/group el grupo 'sergio'. Para añadir un nuevo usuario a un grupo, basta con agregarlo en la lista de usuarios (sin olvidar poner la coma de separación entre usuarios) Fichero /etc/gshadow Fichero donde se guardan las contraseñas de los grupos del sistema. Aunque las contraseñas no se utilicen para los grupos, es necesario el fichero para proteger al grupo. Al igual que shadow, solo root tiene permiso de lectura sobre el fichero. Cada línea del fichero tiene la siguiente estructura: 24 Jesús Fernández Toledo www.losteatinos.es nombre:contraseña Nombre: nombre del grupo. Contraseña: puede ser una contraseña encriptada o bien caracteres “*” o”!”, dependiendo de si queremos usar las contraseñas de grupo o no. 3.2.1. Comandos para la creación/modificación/eliminación de grupos addgroup / groupadd: utilizado para crear grupos. groupmod: utilizado para modificar un grupo. El comando groupmod permite modificar el nombre de un grupo o el gid del mismo. La sintaxis es: # groupmod [-g nuevo-gid] [-n nuevo-nombre] nombre-grupo // Cambiar el gid del grupo profesores # groupmod -g 2000 profesores groupdel: Utilizado para eliminar grupos. 3.3 Directorio /etc/skel Cuando se crea una cuenta, a los usuarios se les asignan una serie de valores por defecto, por ejemplo para la configuración de la Shell. Esta información se encuentra en /etc/skel. En el caso de que añadamos un usuario de forma manual, deberemos copiar el contenido de /etc/skel en el directorio home del nuevo usuario y le asignaremos los permisos correspondientes. Para ampliar ver archivo “El directorio skel.odt” 25 Jesús Fernández Toledo www.losteatinos.es 4. INFORMACIÓN DEL SISTEMA 4.1. Directorio (/proc) El kernel durante su arranque pone en funcionamiento un pseudofilesystem llamado /proc, donde vuelca la información que recopila de la máquina, así como muchos de sus datos internos. El directorio /proc está implementado sobre memoria y no se guarda en disco. Los datos contenidos son tanto de naturaleza estática como dinámica (varían durante la ejecución). El directorio /proc es un caso extraño. Realmente no existe, sin embargo puedes explorarlo. Sus archivos de tamaño 0 no son ni binarios ni textos, sin embargo puedes examinarlos y desplegar su contenido. Este directorio especial contiene todos los detalles de tu sistema Linux, incluyendo el kernel, procesos y parámetros de configuración. Bajo Linux, todo es administrado como un archivo; incluso los dispositivos son accedidos como archivos (en el directorio /dev). El directorio /proc contiene una extraño tipo de archivo: archivos virtuales. Estos archivos son listados, pero realmente no existen en disco; el sistema operativo los crea al vuelo si tratas de leerlos. El directorio /proc en sí mismo es creado cada vez que arrancas tu equipo. Se requiere ser root para poder examinar completamente el directorio en su totalidad; algunos de los archivos (tales como los relacionados a procesos) son propiedad del usuario que los ejecutó. Y aunque casi todos los archivos son de solo lectura, hay algunos pocos con permisos de escritura (notablemente en /proc/sys) que permiten realizar cambios en los parámetros del kernel. Una de las características interesantes es que en el directorio /proc podremos encontrar las imágenes de los procesos en ejecución, junto con la información que el kernel maneja acerca de ellos. Cada proceso del sistema se puede encontrar en el directorio /proc/pidproceso, donde hay un directorio con ficheros que representan su estado. Esta información es útil para programas de depuración, o bien para los propios comandos del sistema como ps o top, que pueden utilizarla para ver el estado de los procesos. Organización del directorio /proc El directorio /proc está organizado en directorios virtuales y subdirectorios, que agrupan archivos de tópicos similares. Trabajando como root el comando ls /proc te despliega algo como lo siguiente: #> ls 1 129 1290 133 1420 165 166 2 2267 26 /proc 2432 2474 248 2486 2489 276 280 2812 3 3340 3358 3413 3435 3439 3450 36 3602 3603 3715 3716 3717 3718 3728 3731 3733 3734 3735 3762 3764 3812 3813 3814 39 3973 4 40 Jesús Fernández Toledo 5441 5445 5459 5479 557 5842 5854 6 6381 815 acpi asound bus dri driver fs ide irq devices diskstats dma execdomains fb filesystems interrupts iomem ioports modules mounts mtrr partitions self slabinfo splash stat swaps www.losteatinos.es 2268 2282 2285 2295 2335 2400 2401 2427 2428 326 327 3284 329 3295 330 3318 3329 3336 3614 3696 3697 3700 3701 3706 3709 3710 3714 3737 3739 3742 3744 3745 3747 3749 3751 3753 4083 4868 4873 4878 5 5109 5112 541 5440 6558 6561 6961 7206 7207 7222 7225 7244 752 net scsi sys sysvipc tty buddyinfo cmdline config.gz cpuinfo kallsyms kcore keys key-users kmsg loadavg locks meminfo misc sysrq-trigger timer_list timer_stats uptime version vmcore vmstat zoneinfo Los directorios con números corresponden a cada proceso en ejecución. Algunos archivos virtuales nos dan información sobre el hardware, tal como /proc/cpuinfo y /proc/interrupts. Otros proporcionan información relacionada a los archivos, tales como /proc/filesystems o /proc/partitions. Los archivos situados bajo /proc/sys son relacionados a la configuración de parámetros del kernel. Al ejecutar cat /proc/meminfo se nos mostrara en pantalla algo así: # cat /proc/meminfo MemTotal: 483488 MemFree: 9348 Buffers: 6796 Cached: 168292 ...... kB kB kB kB Ejecuta el comando free. ¿Qué información te da? Algunos otros archivos interesantes son: /proc/apm: Provee información sobre "Advanced Power Management", si es que está instalado. Es un API desarrollado por Intel y Microsoft que permita que la BIOS administre la energía, tal como reducir la velocidad de la CPU, apagar el HD o apagar el monitor después de un período de inactividad para conservar corriente eléctrica, especialmente para las computadoras portátiles. /proc/acpi: Un directorio similar al anterior que ofrece bastantes datos sobre el más moderno ACPI (Advanced Configuration and Power Interface). ACPI es el sucesor de APM. Por ejemplo, para ver si tu portátil está conectada a la corriente, puedes usar: cat /proc/acpi/ac_adapter/AC/state o en algunas distros cat /proc/acpi/ac_adapter/ACAD/state, Obtendrás "on line" o "off line". /proc/cmdline: Muestra los parámetros que fueron pasados al kernel al momento del arranque (boot time). 27 Jesús Fernández Toledo www.losteatinos.es root=/dev/disk/by-id/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317 resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi /proc/cpuinfo: Muestra datos sobre el procesador de tu equipo. Por ejemplo cat /proc/cpuinfo puede producir el siguiente listado: processor vendor_id cpu family model model name stepping cpu MHz cache size : : : : : : : : 0 AuthenticAMD 6 8 Mobile AMD Athlon(tm) XP 2200+ 1 927.549 256 KB /proc/loadavg: Un archivo relacionado al anterior que muestra la carga promedio del procesador; su información incluye el uso de CPU en el último minuto, últimos cinco minutos y últimos 15 minutos, así como el número de procesos actuales ejecutándose. /proc/stat: También proporciona estadísticas, pero tomando en cuenta el último (arranque). /proc/uptime: Un archivo pequeño que solo tiene dos números: por cuantos segundos tu sistema ha estado encendido, y cuantos segundos ha estado inactivo. /proc/devices: Despliega todos los dispositivos actuales configurados y cargados de caracter y bloque. /proc/ioports: Te muestra información sobre las regiones usadas para comunicaciones de E/S (I/O) de esos dispositivos. /proc/dma: Muestra los canales "Direct Memory Access" en uso. /proc/filesystems: Muestra cuáles tipos de sistemas de archivos (filesystems) están soportados por tu kernel. Una posible salida seria: nodev nodev nodev nodev nodev nodev nodev nodev nodev nodev sysfs rootfs bdev proc cpuset ramfs hugetlbfs mqueue ext3 ext4 usbfs ext2 autofs /proc/mounts: Muestra todos los "mounts" usados por tu máquina (la salida es muy similar a /etc/mtab). 28 Jesús Fernández Toledo www.losteatinos.es /proc/partititons: muestra todas las particiones. /proc/swaps: muestra el espacio swap. /proc/net: Muestra toda la información de red. Describir cada archivo en este directorio requeriría demasiado espacio, pero incluye dev (todos los dispositivos de red), varios archivos relacionados al firewall iptables, estadísticas de red y sockets, información sobre wireless y más…. Archivos relacionados con la RAM. /proc/meminfo, datos del uso de la memoria. /proc/iomem, que muestra cuanta memoria RAM ha sido utilizada por tu sistema. /proc/kcore, que representa la memoria física de tu RAM. Muestra un tamaño que es igual a la memoria RAM más una pequeña sobrecarga (ojo es binario). Archivos relacionados con el Hardware. Estos incluyen información muy específica que normalmente no es necesaria. /proc/interrupts y /proc/irq, mapa de interrupciones hardware (IRQ) utilizadas. /proc/pci, dispositivos PCI del sistema. /proc/bus, directorio con información de los buses PCI y USB. /proc/cpuinfo, información de la CPU. /proc/ide, directorio de información del bus IDE, características de discos. 4.2 Comandos útiles para obtener información del sistema Además de utilizar el directorio /proc, Linux provee múltiple comandos para conocer información sobre el sistema. A continuación se muestra un listado con los más importantes: uname: Imprime información del sistema (Procesador instalado en el equipo) #> uname -p Intel(R) Core(TM) Duo CPU T2450 @ 2.00GHz (versión del kernel) #> uname -r 2.6.22.9-laptop-1mdv 29 Jesús Fernández Toledo www.losteatinos.es ( toda la información de uname a través de la opción -a) #> uname –a Linux segolap 2.6.22.9-laptop-1mdv #1 SMP Thu Sep 27 04:17:10 CEST 2007 i686 Intel(R) Core fdisk: permite manipular/crear particiones en Linux, pero tiene una interesante opción de consulta, -l. esta opción me da información sobre los discos montados y sus particiones. Esta opción solo puede ser utilizada por el root. #> fdisk -l Disk /dev/sda: 160.0 GB, 160041885696 bytes 255 heads, 63 sectors/track, 19457 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x0002ecbc Device Boot /dev/sda1 * Start End Blocks Id System 1 63 506016 83 Linux /dev/sda2 64 10261 81915435 83 Linux /dev/sda3 10262 18929 69625710 83 Linux /dev/sda4 18930 19457 4241160 5 Extended /dev/sda5 18930 19457 4241128+ 82 Linux swap / Solaris Disk /dev/sdb: 40.0 GB, 40007761920 bytes 255 heads, 63 sectors/track, 4864 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x000063b0 Device Boot /dev/sdb1 Start 1 End Blocks Id System 4863 39062016 c WXP FAT32 (LBA) Podemos observar en este listado varios aspectos muy útiles, primero que tenemos dos dispositivos conectados al sistema, /dev/sda y /dev/sdb, los dos son discos duros, el primero es el propio del equipo y tiene varias particiones, incluso determinamos cual es la partición de arranque que es /dev/sda1. El segundo dispositivo contiene una partición Windows como podemos ver en la columna 'System' del último renglón 'WXP FAT32', que indiscutiblemente es de Windows, no es una memoria flash por el tamaño (Disk /dev/sdb: 40.0 GB) mostrado. Así que se trata de un disco duro externo. 30 Jesús Fernández Toledo www.losteatinos.es free: Se utiliza para ver el estado de la memoria ram y swap de nuestro sistema. (la opción -m muestra el listado en megas) #> free -m total used Mem: free 2018 -/+ buffers/cache: Swap: 4141 shared buffers 989 1028 500 0 cached 0 39 450 1517 4141 La línea 'Mem:' es la memoría fisica RAM, que en este ejemplo tiene 2 GB de los cuáles se están usando 989 megas, bastante razonable todavía, la línea 'Swap:' muestra la partición de swap (lo que en Windows se le conoce como archivo de intercambio), que generalmente se establece al doble de la RAM y que idealmente no debe estar usada, como el ejemplo lo muestra. Cuando tu línea Swap muestra demasiado uso y casi nada libre, tienes serios problemas de rendimiento, considera entonces en incrementar tu RAM. Prueba con free -mt para ver una línea más al final con la suma de las dos Mem + Swap. mount: Comando que se utiliza para montar dispositivos, algo complejo y con múltiples opciones. Si lo ejecutamos sin ninguna opción nos indica que tienes montado y en qué lugar está montado. #> mount /dev/sda1 on /boot type ext3 (rw,noatime) /dev/sda2 on / type ext3 (rw,noatime) /dev/sda3 on /home type ext3 (rw,noatime) none on /proc type proc (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/sdb1 on /media/hd (rw,nosuid,nodev,sync,users,umask=0022,iocharset=utf8) type vfat Un pequeño análisis me permite determinar que en el equipo hay tres particiones sobre el mismo disco duro (dispositivo /dev/sda), que son /boot (sda1), / (sda2), y /home (sda3), todas son del tipo. Hay dos sistemas virtuales montados en /proc y otro dispositivo (/dev/sdb1) accesible a través del directorio /media/hd y que es del tipo DOS FAT. Esta información se complementa a la aportada por fdisk -l. lspci: Lista los dispositivos PCI del sistema. 31 Jesús Fernández Toledo www.losteatinos.es #> lspci 00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03) 00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03) 00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02) 00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02) 00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02) 00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02) 00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2) 00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02) 00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02) 00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA AHCI Controller (rev 02) 00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02) 04:00.0 Ethernet controller: Broadcom Corporation NetLink BCM5787M Gigabit Ethernet PCI Express (rev 02) 05:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02) 06:00.0 FLASH memory: ENE Technology Inc ENE PCI Memory Stick Card Reader Controller 06:00.1 Generic system peripheral [0805]: ENE Technology Inc ENE PCI SmartMedia / xD Card Reader Controller 06:00.3 FLASH memory: ENE Technology Inc ENE PCI Secure Digital / MMC Card Reader Controller Tomemos una línea de ejemplo: 05:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02) 32 Jesús Fernández Toledo www.losteatinos.es El primer campo (05:00.0) es el slot PCI donde se ubica el dispositivo bus 05 dispositivo 00 función 0, después sigue la clase de dispositivo (Network controller), el fabricante (Intel Corporation), el nombre del dispositivo (PRO/Wireless 3945ABG Network Connection) y el número de revisión del mismo (rev 02). Esta información es útil por ejemplo para conocer cual es nuestra tarjeta Wireless y descargar los drivers adecuados Podemos obtener aun más información de cada dispositivo PCI con la opción -v y aun más con -vv, asi que trata con lspci -vv y observa cuanto puedes lograr saber de cada dispositivo. lsusb: Lista los dispositivos usb del sistema. #> lsusb Bus 005 Device 004: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter Bus 005 Device 003: ID 064e:a101 Suyin Corp. Bus 005 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 Bus 002 Device 004: ID 062a:0003 Creative Labs Bus 002 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 A simple vista no nos ofrece información muy interesante. Pero si usamos la opción -v, nos devuelve más información Por ejemplo supongamos que la cámara web de mi portátil no funciona, para buscar los drivers o configuración adecuada podemos utilizar la opción -v #> lsusb -v ... Bus 005 Device 003: ID 064e:a101 Suyin Corp. Device Descriptor: bLength bDescriptorType 33 18 1 Jesús Fernández Toledo www.losteatinos.es bcdUSB 2.00 bDeviceClass 239 Miscellaneous Device bDeviceSubClass 2 Common Class bDeviceProtocol 1 Interface Association bMaxPacketSize0 64 idVendor 0x064e Suyin Corp. idProduct 0xa101 bcdDevice 1.00 iManufacturer iProduct iSerial 2 SuYin 1 Acer CrystalEye webcam 3 CN0314-OV03-VA-R02.00.00 ... El listado es bastante largo, asi que lo muestro con lo relevante solamente, en el 'Bus 005 Device 003:' se encuentra algo llamado 'Suyin Corp', y viendo más detalle con -v encuentro que es 'Acer CrystalEye webcam', asi que con esto se facilita la búsqueda en Internet para conseguir los drivers. blkid. Muestra los atributos del dispositivo de bloque. #> blkid /dev/sda1: TYPE="ext3" UUID="d22801c6-85ca-11dc-849e-afde43df714c" SEC_TYPE="ext2" /dev/sda2: TYPE="ext3" UUID="ae22f1dc-85ca-11dc-acbd-cb4aee4dedb7" SEC_TYPE="ext2" /dev/sda3: UUID="d3990398-85ca-11dc-aab5-4d80db2607e2" TYPE="ext3" SEC_TYPE="ext2" /dev/sda5: TYPE="swap" UUID="f6bfa9b2-85ca-11dc-abd6-01935478454b" /dev/sdb1: LABEL="SEGO" UUID="46CD-5C01" TYPE="vfat" dmidecode y lshw: Este comando lee la información directamente de la BIOS y nos muestra un listado muy completo sobre el hardware encontrado. Por defecto muestra “demasiada informaión” si deseamos una versión mas reducida utilizaremos –q. Si no tenemos instalado dmicode podemos utilizar lshw, que básicamente nos muestra los mismos resultados. 34 Jesús Fernández Toledo www.losteatinos.es df: Nos muestra el uso del espacio en los discos duros. # df Filesystem Size Used Avail Use% Mounted on /dev/sda2 77G 16G 58G 22% / /dev/sda1 479M 21M 433M 5% /boot /dev/sda3 66G 36G 30G 55% /home /dev/sdb1 38G 24G 14G 64% /media/hd df tiene la opción -h para ver el mismo listado mostrado en Megas o Gigas. uptime: Muestra cuanto tiempo lleva encendido el sistema. #> uptime 19:59:45 up 2:18, 2 users, load average: 1.14, 1.13, 1.09 Primero la hora actual, seguido de 'up 2:18', lo segundo indica el tiempo total que lleva encendido (este campo puede cambiar a días, etc.), dos usuarios en el sistema y por último la carga promedio del CPU (load average), en el último minuto, 5 y 15 respectivamente. Mientras más bajo este número es mejor w: Muestra que usuarios están en el sistema y lo que están haciendo. #w 20:07:12 up 2:25, 2 users, load average: 1.18, 1.12, 1.09 USER root TTY tty1 sergio :0 LOGIN@ IDLE JCPU PCPU WHAT 19:09 7:34 0.16s 0.16s -bash 17:43 ?xdm? 2:22m 0.06s /bin/sh /usr/bin/quanta La primera línea de w es lo mismo que nos muestra uptime, a continuación nos dice quienes son los dos usuarios en el sistema, en que terminal están 'TTY', si fuera desde otro equipo mostraría la IP, la hora en que se loguearon 'LOGIN@', y la última columna muestra lo que están ejecutando. Como complemento de uptime y w podemos usar lo siguiente: #> who -b system boot 2008-01-13 17:41 Indica la fecha y hora en que el sistema inició. 35 Jesús Fernández Toledo www.losteatinos.es last y lastb: last muestra un listado de los últimos usuarios logueados al sistema e información relevante, lastb (last bad), muestra los últimos intentos de logueo al sistema que fracasaron, utilísimo para determinar posibles intentos de acceso ilegítimo al sistema (hackeo). #> last root tty1 Sun Jan 13 19:59 still logged in sergon :0 Sun Jan 13 17:43 still logged in reboot system boot 2.6.22.9-laptop- Sun Jan 13 17:41 root tty1 Sun Jan 13 00:23 - crash (17:18) sergon :0 Sat Jan 12 23:56 - 00:48 (00:52) reboot system boot 2.6.22.9-laptop- Sat Jan 12 23:55 sergon :0 (04:26) Fri Jan 11 22:11 - crash (10:03) reboot system boot 2.6.22.9-laptop- Fri Jan 11 21:49 sergon :0 (01:17) Sat Jan 12 08:15 - 12:41 (04:25) reboot system boot 2.6.22.9-laptop- Sat Jan 12 08:15 sergon :0 (00:59) Sat Jan 12 17:41 - down (01:16) reboot system boot 2.6.22.9-laptop- Sat Jan 12 17:40 sergon :0 (22:05) Sat Jan 12 19:35 - down (00:57) reboot system boot 2.6.22.9-laptop- Sat Jan 12 19:34 sergon :0 (04:19) (14:51) Thu Jan 10 22:12 - 22:36 (00:23) reboot system boot 2.6.22.9-laptop- Thu Jan 10 22:11 (00:24) Podemos ver que usuario se logueó, en que terminal, día, fecha y hora, a qué hora terminó o si continua logueado (still logged in). Es posible también conocer por ejemplo en las líneas que dice 'crash' que el sistema no se apagó adecuadamente. #> lastb # lastb pedro 192.168.0.10 36 Jesús Fernández Toledo Sun Jan 13 22:04 - 22:04 (00:00) www.losteatinos.es root tty2 Sun Jan 13 21:20 - 21:20 (00:00) Con lastb obtenemos los intentos de logueo que fracasaron. Por ejemplo, en un sistema real en producción donde no existiera el usuario 'pedro' resultaría obvio que alguien está tratando de obtener acceso remoto, adivinando usuario:contraseña. Deberías preocuparte enormemente y tomar acción, si en el listado de last observas un logueo de root u otro usuario que tú como administrador sepas no debió entrar al sistema en esas fechas u horas, o peor aun que se trata de tu ¡¡usuario!! y no habías ingresado previamente. Con seguridad significa que ya te hackearon tu sistema o consiguieron tu contraseña. 37 Jesús Fernández Toledo www.losteatinos.es 1. ANEXO I Comodines (~) Sustituye el directorio home de manera que: ~/comandos.txt equivale a /home/paco/comandos.txt (si estamos en nuestro propio directorio) ~pepe/comandos.txt equivale a /home/pepe/comandos.txt (pepe es otro usuario) (?) Sustituye un solo carácter. Ejemplos: ls p?pe mostraría todos los ficheros cuyos 1º 3º y 4º caracteres fuesen p,p y e ls ?epe mostraría todos los ficheros de 4 caracteres y acabados en epe (*) Sustituye cualquier sucesión de caracteres. Ejemplos: ls .ba* muestra todos los directorios o ficheros que comiencen con .ba ls .* muestra todos los archivos ocultos. rm -r * otra manera de desinstalar el sistema operativo. rm *.jpg borra todas las imágenes jpg oggdec *.ogg pasa de ogg a wav todos los ogg del directorio en el que estamos. (;) Puesto entre dos comandos hace que tras el primero se ejecute el segundo. Ejemplos: nano nuevo.txt ; cat nuevo.txt nos abrirá el editor nano para que escribamos lo que queramos en un nuevo archivo que se llamará nuevo.txt y tras guardar y salir del editor,cat nos mostrará el contenido de lo que acabamos de crear. sleep 5m ; xmms canción.mp3 tras 5 minutos se iniciará el xmms 38 Jesús Fernández Toledo www.losteatinos.es