Curso Linux Avanzado

7,674 views

Published on

Curso práctico linux sin rodeos 100% práctico

Published in: Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,674
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
400
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Curso Linux Avanzado

  1. 1. Comandos Básicos de la administración de Archivos cd cd Downloads Ingresar al subdirectorio (Downloads) desde el directorio raíz cd .. Éste cambiará al directorio raíz desde el directorio actual cd ~ Éste comando irá al directorio de inicio del usuario que es "/home/username" ls [opciones] [nombre]
  2. 2. Listar todos los archivos del directorio /usr/bin Lista todos los archivos que empizan con la palabra ex dentro del directorio /usr/sbin Lista todos los archivos con extensión .bin dentro del directorio /usr/sbin .ls –R /Lista todos los archivos desde la raíz incluyendo los subdirectorios . ls / Muestra los directorios contenidos en root Lista los directorios empezando or root (/) y recursivo a tres niveles de directorio . ls –a Muestra archivos y directorios ocultos:
  3. 3. .ls –i Muestra el nombre de archivo y el valor del inodo cat Concatena archivos y puede ser utilizado para crear archivos; es utilizado principalmente para enviar contenido de uno o más archivos a la pantalla o a otro dispositivo de salida. La funcionabilidad del comando cat puede ser incrementada usando los símbolos de dirección > o > >. El símbolo > es llamado el redirector. Es utilizado para direccionar la salida hacia otro sitio que no se a la salida estándar, usualmente la pantalla. El > puede ser usado para escribir la salida de un comando a un archivo o a otro dispositivo, como es una impresora. El uso de > > también redirecciona la salida, pero agrega a un archivo existente en ves de sobrescribir. Para crear un archivo nuevo, escriba cat > nombre-del-archivo
  4. 4. Ctrl-D es el carácter end of file (EOF), fin de archivo, y cerrara el archivo. Para desplegar el contenido de uno o más archivos en la salida estándar, escriba: cat archivo1 archivo2 Esta sentencia desplegaría el contenido del archivo1 seguido por el contenido del archivo2. Nos podríamos ahorrar escribir un poco, con el uso de un comodín así: cat archivo? Esta sentencia desplegaría el contenido de los cuales su nombre es archivo más un carácter único adicional. Si los únicos dos archivos que satisfacen este criterio son archivo1 y archivo2. Si no cabe dentro de la pantalla,puedes mostrar esos archivos en un archivo nuevo o mostrar el archivo utilizando el comando less. cat archivo1 y archivo2 | less Para combinar múltiples archivos en uno sólo, digite esta sentencia: cat archivo1 archivo2 archivo3 > archivo4 Crea un archivo nuevo de nombre archivo4, el cual incluye el contenido de los archivos archivo1, archivo2, y archivo3. Si desea agregar el contenido del archivo1 al final del archivo2 escriba cat archivo1 > > archivo2 Sobrescribir un archivo ya existente cat > arcivo-existente Digitando el nuevo contenido del archivo El contenido original del archivo-existente desaparecerá y será reemplazado por el que digitamos.
  5. 5. Con la opción –b Numera todas las líneas exceptuando las que están en blanco Si mostramos el contenido del fichero /etc/passwd tendremos algo parecido a esto: cat /etc/passwd more y less Los paginadores (Pagers) son utilitarios usados para desplegar archivos y buscar información específica. Características de less incluyen: - La capacidad de utilizar las teclas del cursor - La capacidad de navegar con bookmarks, número de líneas, o porcentaje del archivo
  6. 6. - El less deja de ejecutarse al final del archivo, more continua Limpiar la pantalla antes de mostrar el archivo. Mostrar las dos primeras líneas del archivo especificado. Presionar Enter para mostrar el archivo línea a línea. Muestra el archivo empezando por la segunda línea. wc No despliega su contenido. Informa cuantas palabras, líneas, o caracteres contiene un archivo. wc [opciones] [nombre-archivo(s)] Imprime número de líneas, palabras, caracteres, y el nombre del archivo: Imprime número de líneas y el nombre del archivo: Numero de líneas del acceso al usuario root head y tail Visualiza el principio o el fin de uno o más archivos. La opción -n para designar cuantas líneas desea desplegar; el número a desplegar por defecto son 10. La opción -v o -verbose para imprimir siempre el nombre del archivo como cabezal. head es útil para identificar las primeras líneas de más de un archivo.
  7. 7. Desplegará lasdos primeras líneas de todos los archivos del directorio root, con extensión .txt. tail es útil para leer archivos log cuando nuevas entradas son agregadas. Despliega las ultimas 7 líneas del archivo /var/log/cups/error_log. También podemos usar la opción + n con el comando tail así: tail + 15 /var/log/cups/error_log Empieza en la línea 15 y despliega cada línea hasta el final del archivo. Si usa la opción -f con tail, para supervisar interactivamente los nuevos mensajes son agregados al archivo log. Escriba así: tail -f /var/log/cups/error_log Mostrar cada nuevo mensaje al momento de ser escrito al log. Escriba CTRL-C para finalizar el despliegue a pantalla. touch Cambia la fecha y hora de acceso y modificación del archivo. touch [opciones] [fecha] nombre-de-archivo Si el archivo no existe será creado un archivo vacío. Si no especificamos la fecha y hora, la fecha actual del sistema será aplicado. Para cambiar la fecha y hora.
  8. 8. A la fecha Personalizar fecha a la indicada. Al no indicarse En ambos casos de no existir el fichero se crearía. actual. el valor de ss,es 0 Si usamos -c y el archivo no existe touch no creará el archivo. Cambiar el tiempo en que fue accesado un archivo usando la opción -a Es imposible cambiar el ctime usando el comando touch. Cambiar el atime y el mtime manualmente En vez de tomar el actual time-stamp, podemos especificar manualmente usando las opciones -t y -d, con el siguiente formato para la opción -t: touch -t [[CC]YY]MMDDhhmm[.SS] Veamos el formato anterior en detalle: CC – Los dos primeros digitos del año. YY – Los dos ultimos digitos del año. Si el valor de YY está entre 70 y 99, el valor de CC se asume como 19. Si el valor de YY está entre 00 y 37, el valor de CC se asume como 20. No es posible asignar la fecha más allá del 18 de enero de 2038. MM – Para el mes DD – Para el día hh – Para la hora mm – Para el minuto SS – Para los segundos
  9. 9. cp Copia archivos y directorios. La acción de copiar puede reemplazar cualquier archivo existente con el mismo nombre, así que debe ser utilizado con cuidado. La opción -b (backup del archivo) o -i (interactivo). La opción -v para ver los archivos que se están copiando y a donde se están copiando los archivos. La opción -f para forzar la acción a realizar la copia sin preguntar Para copiar recursivamente un directorio y su contenido a otro, use la opción -r o -R. Copiará recursivamente la estructura del directorio. Para preservar los atributos de los archivos, incluyendo permisos, dueños, grupos, y etiqueta de tiempo, use la opción -p. La opción -P copiará la jerarquía del directorio así como los archivos. Copiar el fichero archivo.txt de mi directorio personal con el nombre archivo _copia.txt en el directorio /tmp (en el que todos los usuarios tienen permisos de creación de ficheros), podría ejecutar con éxito el siguiente comando independientemente de cuál fuera mi directorio actual. Las opciones -i o –b, es útil si va a aplicar las opcione s -R o -P. Copia el contenido de archivo.txt a archivo-a.txt. Para hacer una copia de seguridad del archivo copiado: Una copia de seguridad de archivo.txt se creará con el símbolo "~" como archivo-a.txt ~. Copia carpetas y subcarpetas: cp copia la carpeta y subcarpetas de Downloads a Directorios Copiar un directorio Directorio y todo su contenido hacia un nuevo directorio llamado Directorio _respaldo: Par visualizar cómo va haciendo cada paso, añadir la opción –v
  10. 10. mv: Mover/renombrar un archivo de un directorio a otro. El comando mv es distinto del comando cp ya que elimina completamente el archivo del origen y lo mueve a la carpeta especificada, mientras que el comando cp sólo copia el contenido de un archivo a otro. No preguntará antes de sobreescribir (equivalente a --reply=yes). mv -f moverá los archivos sin preguntar incluso si está escribiendo sobre un archivo de destino existente. Pregunta antes de sobreescribir algún archivo. -f -i Para renombrar / mover un archivo: Renombra qacg.txt a fileqacg.txt Para mover un directorio Mover todos los archivos, directorios y subdirectorios desde “directorio” a tmp si el directorio tmp ya existe. Si no existe el directorio tmp, renombra el directorio “directorio” a tmp. Para mover archivos múltiples / más archivos a otro directorio, mover los archivos “archivo.txt”, “mover.bin” y “pagina.html” desde el directorio actual y al directorio tmp. Mover “archivo.txt” desde el directorio actual /home/knoppix/ y el archivo mover.bin desde el directorio /tmp al directorio Downloads rm elimina -f archivos de un directorio. Elimina todos los archivos en un directorio sin preguntar al usuario. Interactivo. Con esta opción, rm pide confirmación antes de eliminar -i cualquier archivo. Elimina directorios y subdirectorios reiterativamente en la lista de argumentos. El directorio será vaciado de archivos y eliminado. -r (ó) -R Normalmente se pregunta al usuario antes de eliminar cualquier archivo protegido contra escritura que contenga el directorio.
  11. 11. El directorio es vaciado de archivos y eliminado y nos pregunta si deseamos realizar esta tarea Eliminar el archivo remover.txt. Eliminar más archivos a la vez mkdir Crear directorios si se usa sin opciones, el directorio padre debe estar ya presente para crear uno dentro que sería el directorio hijo, aquí le damos unos ejemplos: Crear el directorio qacg mkdir –p -v [ruta de la carpeta incluyendo carpetas padre 1] [ruta de la carpeta incluyendo carpetas padre 2] La opción -v o --verbose nos muestra un mensaje por cada directorio creado. Crear una jerarquía de directorios de múltiple padre e hijos en una sola sentencia con la opción –p y -v. Debe tener permisos de escritura al directorio padre para poder crear el directorio hijo. El por defecto en los directorios nuevos es de 0777, pero puede ser modificada por la variable umask del sistema, el perfil del usuario o usando la opción -m la cual establece los permisos sin tomar en cuenta los por defecto.
  12. 12. Crear un directorio con permisos rmdir * solo borraria las carpetas vacias donde se ejecutara el comando, es decir que si dentro de una carpeta hay otra vacia no borraria ninguna de las dos Si intentamos borrar un directorio que no este vacio nos dará un error tal como se visualiza a continuación Borrar directorios vacios de manera recursiva Expresiones Regulares grep: selecciona y muestra las líneas de los archivos que coincidan con la cadena o patrón dados. Mostrar todas las líneas que contengan Java: Mostrar la cuenta de lineas que contienen Linux:
  13. 13. Mostrar las líneas que empiezan por Li: Para buscar los archivos en el directorios HEC que contengan la cadena "include": grep -c 'include' dir-1/* El comando anterior mostrará el nombre de archivo y la cuenta de líneas que contienen la cadena "include" Para buscar todas las lineas que contienen un solo carácter dentro de un archivo: Buscar todas las líneas que solamente tengan un punto: Seleccionar las lineas que tengan al menos una letra (mayúscula o minúscula)
  14. 14. Buscar una palabra que empieza por letra y puede contener números:[A-Za-z][A-Za-z09]* Un dígito numérico, decimal:[0-9] Una vocal: [AEIOUaeiou]
  15. 15. 0, 1 o más ocurrencias de la ER “a” (repetición) Localiza todos los ficheros de /etc que contiene la cadena eht0, incluye la opción -r, la búsqueda es recursiva, por lo que los ficheros de los subdirectorios de /etc se examinan de igual modo que los de éste. Para cada fichero de texto coincidente se imprimirá la linea que contenga la cadena. Ubicar todos los ficheros de /etc que contengan la cadena eth0 o eht1. Puede introducir el siguiente comando, que emplea una expresión entre corchetes para especificar ambos dispositivos: Lista de todos los procesos en ejecución llamados xterm, junto a sus PID Otros ejemplos básicos
  16. 16. # grep '^La' fichero El comando anterior nos devuelve todas las líneas del fichero que comienzan por La. # grep '^ *La' fichero El comando anterior nos devuelve todas las líneas del fichero que comienzan por cualquier número de espacios seguido de La. # grep '^..*' fichero El comando anterior nos devuelve todas las líneas del fichero que comienzan por punto y tienen cualquier número de caracteres. # ls -la | grep ' ..*' El comando anterior nos devuelve la lista de ficheros que comienzan por un espacio seguido de un punto y cualquier número de caracteres, es decir, la lista de ficheros ocultos. # ls -l | grep '^d' El comando anterior nos devuelve la lista de ficheros que comienzan por d, es decir, la lista de directorios. # grep -c -e "grep|Unix" *.txt Otra opción interesante es la posibilidad de indicarle que no haga distinciones entre mayúsculas y minúsculas, usando la opción -i. Así, no hará distinción entre Unix o uNiX # grep -c -e "grep|Unix" *.txt Indicar la línea en la que se produjo la coincidencia entre el patrón y la línea del fichero con la opción -n. # grep -n -e "grep|Unix" *.txt Especificar una expresión regular que no queremos que se cumpla con la opción -v. # grep -v -c -e "grep|Unix" *.txt Otros comando utiles
  17. 17. Estos son los comandos básicos a la hora de trabajar con enlaces:
  18. 18. Los siguientes comandos nos permiten obtener información del entorno en el que estamos trabajando:
  19. 19. El comando man tiene las siguientes opciones: Espacio avanza a la siguiente pantalla. b vuelve a la pantalla anterior. Flecha abajo Avanza una línea. Flecha arriba Retrocede una línea. Fin va al final del manual /expresión busca una expresión de la posición del cursor en adelante. ?expresión busca una expresión de la posición del cursor hacia atrás. N Busca la anterior aparición de la palabra buscada. n Busca la próxima aparición de la palabra buscada. q sale de las páginas del manual. Un mismo comando puede tener su página de manual en varias secciones. Por ejemplo, el comando halt (para apagar el sistema), tiene una en la sección 5 (dónde se explican las variables y otras opciones de su configuración) y otra en la sección 8 (como comando administrativo). Para acceder a una determinada sección del manual de un comando escribimos man numero_de_seccion comando por ejemplo “man 5 halt” Identificar un Sistema GNU/Linux El comando uname desplega al administrador del sistema, información sobre el equipo y el sistema operativo. -a, --all muestra toda la información
  20. 20. -m, --machine muestra el tipo de máquina (hardware) -n, --nodename muestra el nombre de `host’ del nodo de red de la máquina -r, --release muestra la distribución del sistema operativo -s, --sysname muestra el nombre del sistema operativo -p, --processor muestra el tipo de procesador -v muestra la versión del sistema operativo --help muestra esta ayuda y finaliza --version informa de la versión y finaliza El comando hostname es en realidad un alias a uname -n y puede ser que no esté disponible en todas las versiones de GNU/Linux. Identificar los Usuarios Activos La familia de los comandos who retorna la identificación original de los usuarios durante el proceso de inicio de sección. La información desplegada del comando who es mantenida en /var/run/utmp. Un historial de cada login es también mantenido en /var/log/wtmp. Si el usuario subsecuentemente cambia su identidad con el comando su, el comando who le retorna el nombre original. El comando who también puede identificar el usuario actual, así como lo hace el comando id. Algunos sistema también tienen un comando w originalmente de BSD el cual es muy parecido al comando who.
  21. 21. En Linux, cada elemento de hardware es un dispositivo, y se encuentra representado en el directorio /dev mediante su correspondiente fichero de dispositivo. Este fichero existirá siempre y cuando el kernel esté compilado para soportar ese tipo de hardware, sino tendremos que compilarlo nosotros incluyendo las opciones de soporte para nuestro hardware. Los ficheros de dispositivo son conexiones con el hardware que permite que el kernel acceda a él. Los principales tipos de ficheros de dispositivo son los tipo bloque, los cuales transmiten los datos en bloques o paquetes, y los de tipo carácter, que trasmiten los datos bit a bit o byte a byte. Si observamos las propiedades de alguno de los ficheros de dispositivos, podemos ver que no tiene tamaño (ya que no es una zona de almacenamiento), sino que tiene 2 números, el primero separado del segundo por una coma. Se trata del número principal (o major) que indica el tipo de dispositivo y el controlador asociado, y el número secundario (o minor) que identifica al dispositivo dentro de su tipo y es utilizado por el controlador.
  22. 22. Por ejemplo, para la partición 1 del primer disco duro, su número principal sería 8 y el secundario 1. Dispositivos: suelen estar en el directorio /dev. Representan a cada uno de los componentes de hardware que tiene el equipo. Toda aplicación que quiera usar un hardware debe hacerlo a través de este dispositivo. Enlaces: son archivos especiales que apuntan a otros archivos localizados en otras partes del sistema. Por ejemplo si necesitamos que un mismo archivo esté en /etc y en /var, podemos tenerlo en /etc y en /var crear un enlace al mismo; hay 2 tipos de enlaces: Duros: Tiene el mismo i-nodo que el archivo al que apunta. Si modificas uno de los 2, se reflejara en ambos, pero si borras uno, el otro permanecerá. No se pueden hacer enlaces duros a archivos en diferentes sistemas de archivos. Blandos o simbólicos: Tiene distinto i-nodo que el archivo al que apunta. Las modificaciones hechas en cualquiera de los 2 se ven reflejadas en ambos, pero si borras el original, el enlace queda apuntando a la nada. Se pueden crear enlaces simbólicos entre distintos sistemas de archivos. Socket: es un archivo especial en el que se intercambia información entre procesos. FIFO: o tubería, son archivos especiales para el intercambio de datos entre procesos; la diferencia con los sockets, es que en este caso el intercambio es unidireccional. Los flujos estándar son canales de comunicación entre un programa y el entorno en el que se ejecuta; se trata del stdinput (es el dispositivo por defecto para la entrada de datos; si no se redirige a otro, es el teclado, y su descriptor es el 0), stdoutput (es el dispositivo por defecto para la salida de datos; si no se redirige es la pantalla, y su descriptor es el 1) y el stderr (se usa para la salida de errores; por defecto es la pantalla, y su descriptor es el 2). Podríamos definir un nivel de ejecución como un estado del sistema, en el que se define como queremos que opere el sistema (que procesos arrancan, si hay red o no, si es multiusuario o no…). En los sistemas Linux existen 7 niveles de ejecución estándar:
  23. 23. Sudo permite una configuración especial que consiste en dar privilegios de un usuario (puede ser de root o de cualquier otro) a otro usuario o grupo, de tal forma que se puede configurar para que no les pida contraseña al ejecutar los comandos sobre los que tiene privilegios. Está configuración se encuentra en el archivo /etc/sudoers y para modificarla hay que ejecutar visudo
  24. 24. Como vemos, el archivo puede definir alias de usuarios, comandos y host. Esto nos permite asignar de forma más sencilla los permisos, sobre todo cuando se van a asignar los mismos a varias personas. Por ejemplo, así se definiría un grupo llamado alumnos que agruparía a 2: User_Alias ALUMNOS = ana, pablo Así se definiría un grupo de comandos relativos a la gestión de usuarios: Cmnd_Alias AD_USERS = /usr/bin/passwd, /usr/sbin/adduser Y así un alias de host: Host_Alias DC = 192.168.1.10, 192.168.1.101 Una vez definidos los alias (si así se quiere, no es obligatorio pero puede ser útil), hay que dar los permisos, la sintaxis es la siguiente: USUARIO/GRUPO HOST = COMANDO Para que no nos pida contraseña a la hora de ejecutar un comando existen las etiquetas PASWWD y NOPASSWD, por ejemplo si queremos que no pida para hacer un shutdown y un kill, pero sí para hacer un cambio de contraseña sería: NOPASSWD: /sbin/shutdown, /bin/kill, PASSWD: /usr/bin/passwd Por ejemplo si deseamos que el usuario profesor pueda cambiar las contraseñas del resto de usuarios sin necesidad de saber la contraseña de root tendríamos que tener una línea tal que: profesor ALL = NOPASSWD: /usr/bin/passwd O si queremos que al usuario tutor le deje crear usuarios sin contraseña, y apagar con contraseña en todos los equipos: tutor ALL = NOPASSWD:/usr/sbin/adduser, PASSWD:/sbin/shutdown Para configuraciones más avanzadas y otras opciones podemos consultar la página de ayuda tecleando man 5 sudoers
  25. 25. Comandos para comprimir Archivos Permite empaquetar y desempaquetar, y al mismo tiempo comprime si lo especificamos. Estas con sus principales opciones: c crea el paquete .tar y debe ir acompañado de la opción -f x desempaqueta un .tar y debe ir acompañado de la opción -f f indicar a tar que lo siguiente es el nombre del fichero .tar v mostrar los mensajes de salida que se dan durante el proceso. z para comprimir/descomprimir usando la utilidad gzip. j para comprimir/descomprimir usando la utilidad bzip2. t muestra el contenido de un .tar No hay que usar estas opciones de forma aislada, si no combinarlas entre ellas; veamos ejemplos del uso de tar: Empaquetar el directorio Directorio-respaldo en Respaldo-comp.tar viendo por pantalla los mensajes Desempaquetar Respaldo-comp.tar ver mensajes por pantalla tar –xf Respaldocomp.tar.tar Empaquetar y comprimir con gzip viendo por pantalla los mensajes tar –cvzf Respaldo-comp.tar.gz Directorio-respaldo/
  26. 26. Empaquetar y comprimir con bzip2 respaldo/ tar –cjf Respaldo-comp.tar.bzip2 Directorio- Descomprimir y desempaquetar con gzip Descomprimir y desempaquetar con bzip2 tar –xzf Respaldo-comp.tar.gz tar –xjf Respaldo-comp.tar.bzip2 COMANDO GZIP Nos permite comprimir y descomprimir archivos o directorios; aunque para descomprimir los archivos creados con gzip se puede también usar el comando gunzip. Crea archivos que tienen la extensión .gz. Veamos su uso: Comprimir un archivo: (hay que tener en cuenta que el original desaparece, y solo quedara el .gz generado): gzip archivo Descomprimir un archivo: puede hacerse de 2 modos gzip –d Respaldo-comp.gz gunzip Respaldo-comp.gz COMANDO BZIP2 Se utiliza para la compresión y descompresión de archivos y directorios. Crea archivos con extensión .bz2. Para descomprimir estos archivos, también se puede usar el comando bunzip. Ejemplos de uso: Comprimir un archivo: bzip2 archivo Descomprimir un archivo: bzip2 –d Respaldo-comp.bz2 bunzip Respaldo-comp.bz2 Lo siguiente es instalar el paquete, para ello tecleamos “apt-get install mc”. Ahora tecleamos mc
  27. 27. Ya tenemos abierto Midnight Commander. Intenta moverte por los distintos directorios tanto usando el ratón (sí, permite el uso del ratón) como por teclado, y prueba las opciones de búsqueda y filtrado que proporciona. Tienes la ayuda en la esquina inferior izquierda, si bien a continuación te muestro un pantallazo con cuales son las teclas más importantes para manejarte sin ratón: Los sistemas de ficheros que Linux soporta pueden dividirse en 3 tipos: Sistemas basados en disco: discos duros, disquetes o CD/DVD Sistemas en red: Samba, NFS… Sistemas especiales Al referirnos a sistema de archivos nos referimos a sistemas basados en disco.
  28. 28. En sistemas Linux, una característica de los sistemas de archivos que se ha tenido en cuenta a la hora de diferenciarlos es que soporte journaling, dividiéndolos por ello en sistemas de archivos tradicionales y sistemas de archivos con journaling o transaccionales. El journaling simplemente consiste en que en los sistemas que lo soportan se va escribiendo un registro de todos los cambios o transacciones (entendemos por transacción un proceso que crea o cambia la información almacenada en el sistema) que se van a hacer y una vez registrados se escriben en “real” en el sistema de archivos, de modo que cuando una transacción falla, se pueden recuperar los datos que se manejaban en la misma. Sistema de Archivos Virtual o VFS: proporciona una capa de abstracción entre los sistemas de archivos y los procesos, es decir, es una capa intermedia que se coloca entre ambos, proporcionando unas interfaces definidas para tareas comunes como abrir archivos, leer o escribir archivos. Cuando un proceso hace una petición a un sistema de archivos, el VFS la adapta al correspondiente sistema de archivos, de modo que el proceso hará la petición de la misma forma independientemente del sistema de archivos usado. Sistemas de archivos tradicionales Dichos sistemas tienen una importante característica en común, que no soportan journaling. Ext2 (second extended filesystem): no es fácilmente fragmentable. Fue el sistema de archivos por defecto en varias distribuciones Linux (Debian por ejemplo), si bien, fue remplazado por su sucesor Ext3. Para explicar su funcionamiento, necesitamos conocer algunos conceptos como el de los inodos: son estructuras que contienen información (propietario, ruta, fecha…) de todos los archivos y carpetas de la partición. Cuando creamos el sistema de archivos, definimos el tamaño de los inodos, lo que condicionará el número máximo de archivos que puede haber en nuestro sistema. Los bloques son los espacios en los que se divide una partición. A la hora de crear el sistema de archivos debemos elegir con cuidado el tamaño del bloque (después no se puede cambiar), ya que este tamaño es el tamaño mínimo que ocupara un archivo en disco; así que si vamos a trabajar con archivos muy pequeños debemos asignar un tamaño de bloque pequeño. En ext2 los datos se almacenan en estos bloques, y un grupo de bloques secuenciales (32768) forman un grupo de bloques. Cada grupo de bloques contiene varios componentes, que son: Superbloque: contiene información del sistema de archivos tal como número de inodos y bloques libres, así como también el número de ocupados, o información de uso del sistema como tiempo desde el último chequeo. El superbloque está replicado en todo grupo de bloques para estar protegido ante posibles errores. Descriptor de grupo: en él se encuentran las estructuras que controlan la asignación de los bloques de ese grupo. También hay una réplica del mismo. Bitmap de bloques: recoge la información sobre que bloques de este grupo están ocupados o cuáles no. Bitmap de inodos: recoge que inodos están ocupados y cuáles no. Tabla de inodos: se almacena información de los datos como su propietario, permisos, fechas de modificación, y enlaces a los bloques de datos dónde se almacenan.
  29. 29. Bloques de datos: Es aquí donde se almacenan los datos. Es posible convertir un sistema de archivos ext2 a ext3, sin necesidad de formatear, permitiéndonos una migración de un sistema a otro sin pérdida de datos. Minix: sistema de archivos simple y compacto, diseñado para usarse en el sistema operativo MINIX (clon de UNIX). Estos sistemas de archivos tienen 6 componentes:  En el primer bloque del disco duro se encuentra el Bloque de arranque almacena el cargador de arranque, que carga y ejecuta un sistema operativo de arranque.  El segundo bloque se denomina Superbloque; guarda información para trabajar con el sistema de archivos.  El bitmap de inodos, que guarda información sobre que inodos están ocupados y cuáles no.  El bitmap de bloques, que guarda información sobre que bloques están ocupados y cuáles no.  El área de inodos.  El área de datos en la que se almacena la información.  VFAT: sistema de archivos que es una versión 32 bits del famosos sistema FAT usado por los sistemas Microsoft en sus versiones anteriores. Sistemas de archivos transaccionales Soportan journaling, lo que los hace más seguros en caso de problemas que los sistemas tradicionales, ya que proporcionan la posibilidad de recuperar datos. Los más extendidos en los sistemas Linux son: Ext3: empieza a ser sustituido por ext4 y es la evolución de ext2. La principal diferencia entre ambos es que soporta journaling, pero también podemos destacar que, en general, proporciona un rendimiento superior que ext2. Aunque es más lento que otros sistemas de archivos, se considera más seguro y tiene menor consumo de CPU. En cuanto al journaling, ext3 permite 3 niveles: Diario (nivel de riesgo bajo): tanto los metadatos como el contenido se copian en el diario o journal. Pedido (nivel de riesgo medio): los metadatos se copian en el registro pero el contenido no, pero no marca el metadato como transcrito hasta que se asegura de que el contenido se escribe en disco. Es el nivel por defecto en la mayoría de las distribuciones de Linux. Reescritura (nivel de riesgo alto): los metadatos se copian en el registro pero el contenido no. El contenido del archivo puede escribirse en disco antes o después de que guarden los datos en el disco, lo que puede generar incoherencias entre las propiedades del archivo real y las que aparecen en el registro. Como ext3 se diseño para resultar compatible con ext2, no incorpora características recientes que si incorporan otros sistemas de archivos, lo que puede resultar una desventaja frente a sus competidores, como también lo son que no soporta compresión de forma oficial (pero sí de forma oficiosa). Ext4: es la evolución de ext3 (por tanto también implementa journaling) y está empezando a sustituirlo en muchas distribuciones. Aunque se diseño como una mejora
  30. 30. de ext3 que fuera compatible con él, proporciona importantes cambios, entre los que destacamos: Soporta volúmenes con tamaño de hasta un exabyte (que es 260 bytes). Soporta archivos con un tamaño de hasta 16 terabytes. Soporta un número ilimitado de subdirectorios (en ext3 el número máximo eran 32000). Usa extent, sustituyendo al esquema de bloques tradicional. Extent se basa en la reserva de bloques contiguos para un archivo, lo que reduce notablemente la fragmentación y mejora el rendimiento a la hora de trabajar con ficheros de gran tamaño. Mejora la fiabilidad del journal mediante chequeos de checksum. Permite chequeos del sistema de archivos más rápidos. Podemos destacar que un sistema ext3 puede ser montado como ext4 sin problemas; sin embargo, una partición ext4 solo puede ser montada como ext3 si esta no usa extent. ReiserFS: Fue el primero de los sistemas con journaling en ser incorporado en el kernel estándar de Linux. Este sistema de archivos trata a toda la partición como si fuera una única base de datos; los archivos, directorios y metadatos se organizan en una estructura de datos llamada árbol balanceado, de modo que no depende de los bloques. ReiserFS tiene una ventaja respecto a otros sistemas en el uso del espacio: aunque el tamaño del bloque por defecto es 4096 kbs, hace que el almacenamiento de los archivos pequeños sea más eficiente, y esto es así porque ReiserFS no utiliza un bloque entero para almacenar un único archivo, solo utiliza el espacio del bloque que necesita, pudiendo haber varios archivos distintos en un mismo bloque. En general, ReiserFS tiene la ventaja de proporcionar un sistema de almacenamiento eficiente, pero la desventaja de que el uso de los arboles balanceados requiere una gran capacidad de procesamiento. XFS: es un sistema de archivos rápido y eficiente de 64 bits. Como características principales podemos destacar las siguientes: proporciona una rápida recuperación tras un problema en el sistema, es bastante estable, tiene un buen rendimiento al trabajar con archivos grandes (se diseño como un sistema de archivos de alto rendimiento), y realiza las transacciones de forma rápida. JFS: este sistema de archivos fue creado por IBM para conseguir servidores de alto rendimiento, si bien actualmente está disponible con licencia GNU GPL, aunque no es de los más conocidos. Podemos destacar de él su estabilidad y eficiencia en el consumo de CPU y también en el uso del disco. NTFS: Aunque este sistema de archivos es realmente conocido por ser utilizado en las distribuciones de Microsoft, también es un sistema de archivos transaccional al que se puede acceder desde las distribuciones Linux. Después de haber explicado las características de los distintos sistemas de archivos, solamente nos queda indicar que es difícil decir cuál de estos sistemas es mejor que los demás, y que debes elegir uno u otro en función de las necesidades que vaya a
  31. 31. tener tu máquina; por ejemplo, si vas a trabajar con archivos muy pequeños (como un servidor de correo) ReiserFS sería una buena opción, o si vas a trabajar con archivos muy grandes XFS sería la tuya. Ext3 y ext4 serían buenas elecciones para usos de propósito general. Sistemas de archivos de acceso concurrente, los cuales permiten el acceso de varias máquinas al sistema de archivos a la vez; se suelen utilizar en la redes SAN y en los clústeres. En Linux podemos mencionar como sistemas de acceso concurrente a Global File System (GFS), Oracle Clúster File System (OCFS) o General Paralell File System (GPFS). El punto de montaje de un dispositivo será el directorio en el cual se almacene el contenido del sistema de archivos montado. Forzar que lo monte con el comando mount : mount (-t tipo) (-o opciones) dispositivo punto_montaje
  32. 32. Tenemos que indicar que dispositivo vamos a montar (indicaremos el fichero que lo representa en /dev) y el punto de montaje para él. Además podemos indicarle que tipo de sistema de archivos es con la opción –t y algunas opciones con –o, como que lo monte solo en lectura o que lo monte en lectura y escritura. Tanto la opción –o cómo –t son opcionales. Por ejemplo para montar en el directorio /media/men_usb un pendrive que en /dev está representado por /dev/sda1 teclearíamos: Para desmontar un dispositivo basta con ejecutar el comando umount acompañado del punto de montaje del dispositivo. Para el ejemplo anterior sería: En el archivo /etc/fstab se guarda una lista de todos los dispositivos que se montan en el arranque, junto con sus puntos de montaje y opciones de montaje. Podemos ver todo lo que está montado en el sistema en un momento concreto visualizando el archivo /etc/mtab
  33. 33. Editor VIM:
  34. 34. En modo inserción, al que se accede desde modo normal pulsando i, nos moveremos en las distintas direcciones utilizando las flechas de dirección. El resto de teclas tendrán el significado habitual que tendrían en otro editor de texto. Para salir de modo inserción hay que pulsar la tecla ESC. FIND: Se trata del comando más potente a la hora de hacer búsquedas de archivos y directorios en modo texto en un sistema Linux. Veamos su sintaxis: find [ruta] [criterios] [acciones] Si no le ponemos ningún criterio, find nos mostrará todos los archivos del directorio actual y de todos sus subdirectorios. Si solo le indicamos la ruta, nos mostrará todo lo que contenga el directorio que le indiquemos. Si solo le pasamos los criterios de búsqueda, asume que tiene que buscar en el directorio actual y subdirectorios. Ruta: le indicamos dónde (en que directorio, y por extensión en sus subdirectorios) queremos que busque. Podemos indicarle tanto rutas absolutas (la ruta la comenzamos a dar desde raíz /) como rutas relativas (le damos la ruta tomando como punto de partida nuestra ubicación actual). Para pasarle la ruta, pueden utilizarse metacaraceteres (tales como *, ?). Buscar todos los archivos con extensión “txt”
  35. 35. Buscar los archivos qacg del 1 al 3 Al pasarle una ruta, find busca dentro de todos los subdirectorios del mismo, y si estos subdirectorios también tienen subdirectorios, también busca en ellos, y así sucesivamente. Para evitar esto, existen 2 parámetros que nos permiten indicar en qué profundidad de subdirectorios deseamos buscar, son estos (pueden combinarse): -maxdepth n siendo n un número; se le indica hasta que profundidad queremos que busque. Por ejemplo, si el directorio en el que buscamos tiene 5 subdirectorios y solo queremos que busque en los 3 primeros teclearíamos find /home –maxdepth 4 Ponemos 4 a pesar de que queremos ver el hasta el contenido del subdirectorio 3 por lo siguiente: si indicamos maxdepth 1 solo buscara dentro del directorio actual y no dentro de los subdirectorios, y si le indicamos maxdepth 2 buscara dentro del directorio actual y dentro del primer subdirectorio pero no en los subdirectorios que este pudiera tener, y así sucesivamente. -mindepth n siendo n un número; se le indica desde que subdirectorio hasta el final se quiere buscar. Por ejemplo, si tenemos un directorio con 5 subdirectorios, y solo queremos buscar en el último de ellos, sería mindepth 5 o si solo queremos buscar en los 2 últimos sería mindepth 4 Criterios: -name nombre pasamos el nombre del archivo que buscamos. Podemos usar expresiones regulares, pero si las utilizamos deben ir metidas entre comillas dobles (“”). Hay que tener cuidado con los metacaracteres y find por lo siguiente: cuando vamos a hacer un patrón de búsqueda como por ejemplo este –name “*p*” para encontrar un archivo que lleve p, no nos mostrara los que comiencen por p y no tengan ninguna otra en su nombre, ya que para find la p no podrá ser la primera letra de la palabra pues la presencia de un * o un ? al principio de la búsqueda implica que siempre hay un carácter al que sustituye (no es como en la Shell, donde podría o no haberlo), por tanto si la palabra empieza por p, no hay ninguna letra delante suya, y por eso no coincide con el patrón de búsqueda.
  36. 36. -type tipo buscamos un tipo de fichero, que puede ser: fichero normal (f), directorio (d), dispositivo de tipo bloque (b), dispositivo de tipo carácter (c) o enlace simbólico (l). Por ejemplo si buscamos un elemento que sabemos que es un directorio, sería: -empty Busca todos los directorios y archivos vacíos. Si solo nos interesan los directorios, a los criterios de búsqueda añadiremos también -type d -ctime [+/-]días busca los archivos y directorios cuya fecha de último cambio de estado (se refiere a cambios en la información de su i-nodo) sea inferior (ponemos -) o sea superior (ponemos +) al número de días indicado. Por ejemplo si queremos ver los modificados en los 2 últimos días y no antes, sería –ctime -2 De igual sintaxis que ctime son los parámetros -mtime [+/-]días (busca en función de que el contenido fue creado o modificado en esos días) y -atime [+/-]días (busca en función de la última vez que fue accedido el archivo, pero sin realizar cambios en su contenido). -gid num siendo num el número identificador de un grupo del sistema. Por ejemplo si queremos buscar los archivos pertenecientes al grupo cuyo GID es 1000 sería: -uid num siendo num el identificador de un usuario del sistema. Si queremos buscar los archivos pertenecientes al usuario cuyo UID es 0 sería: -user usuario le pasamos como parámetro el nombre de un usuario y nos buscará los archivos que le pertenezcan. -group grupo le pasamos como parámetro el nombre de un grupo y nos buscará los archivos que le pertenezcan. -size [+/-]tam[unidad] siendo tam el tamaño que queremos buscar. Podemos buscar que nos indique por un tamaño exacto (no ponemos n + ni -), o por un tamaño superior (ponemos + delante del tamaño) o inferior (ponemos -). Detrás del tamaño le ponemos la unidad en la que queremos que esté ese tamaño, sus abreviaturas son las siguientes: c es bytes; k es kilobytes; M es megabytes; G es gigabytes.
  37. 37. Acciones: en las acciones definimos si queremos hacer algo (ejecutar algún comando) sobre los archivos encontrados. Por defecto, los resultados se muestran, de modo que no hay que pasarle como acción visualizarlos. Para ejecutar las opciones se hace con – exec comando ; (el ; es porque cuando se pone la ejecución de un comando en find, la expresión debe terminar en ; , y para quitar el significado especial de ; lo precedemos de una ); si el comando que queremos ejecutar requiere llevar como parámetro el archivo encontrado lo indicaremos poniendo {} o sea –exec comando {} ; Lo mejor es verlo con un ejemplo, si queremos ejecutar un ls –l de todos los archivos que find encuentre sería: find /home/user empty busca todos los archivos que se encuentran vacíos a partir del directorio /home/user. LOCATE: permite buscar archivos o directorios, es el equivalente a ejecutar un find – name loquesea sin embargo es mucho más rápido que él, ya que no busca el archivo en el disco, si no que lo busca en una base de datos que crea para estos fines. Por ello, antes de ejecutar una búsqueda con locate o después de instalar un nuevo software, es conveniente actualizar manualmente esta base de datos con el comando updatedb si bien, en muchas distribuciones el sistema se encarga de hacer una actualización de la misma todas las noches. Su sintaxis básica es: locate palabra -c no muestra lo que ha encontrado, si no le número de coincidencias encontradas. -i ignora mayúsculas y minúsculas a la hora de hacer la búsqueda (por defecto NO las ignora). -n num siendo num un número, solo nos mostrará el número de resultados indicado. En primer lugar, debemos saber que el script que arranca el servicio de red de nuestra máquina está en el directorio /etc/init.d y su nombre es networking, de modo que: Si queremos arrancar las conexiones de red ejecutaremos: Si queremos reiniciar el servicio de conexiones de red, ejecutaremos: Y para pararlas, será:
  38. 38. Una vez que tenemos el servicio arrancado, para ver la configuración IP de todas las interfaces de nuestra máquina ejecutamos el comando: Vemos que para nuestra máquina, su resultado nos muestra 2 “secciones”, que corresponden a las conexiones que tiene la máquina, la primera llamada lo y la segunda llamada eth0. Por lo se refiere a la llamada interfaz de loopback, que se trata de una interfaz de red que siempre existe en los equipos Linux. Esta interfaz proporciona una conexión TCP/IP con la propia máquina. La eth0 representa a la primera tarjeta de red Ethernet que se localiza en nuestra máquina. Para todas las conexiones nos muestra una serie de información: En la primera línea, que comienza con el nombre del adaptador de red, se nos muestran los atributos de este adaptador: si está levantado (UP) o no (DOWN), si es una interfaz de loopback, su mtu… Para ver el estado de los adaptadores de red también podemos usar los comandos ifconfig o ip a que nos mostraran una información más o menos similar. Si queremos deshabilitar (DOWN) un interfaz de red concreta (por ejemplo eth0): ifconfig eth0 down o ifdown eth0 Y para levantarlo: ifconfig eth0 up o ifup eth0 Si sólo queremos ver el estado físico de una de nuestras tarjetas de red, lo haremos con el comando ip –s link show dispositivo Una vez que sabemos el estado de nuestra interfaz de red, puede interesarnos configurarla de otra forma, para ello disponemos de varios comandos: ifconfig dispositivo ip netmask mascara Por ejemplo: ifconfig eth0 192.168.1.2 netmask 255.255.255.0 ip address add IP/mascara brd broadcast dev dispositivo Por ejemplo: ip address add 192.168.1.2/24 brd 255.255.255.0 dev eth0 Este comando sería válido solo en el caso de que nuestra tarjeta no tuviera ninguna Ip en el momento en el que lo ejecutamos, si ya tenía una IP, la mantendrá y pondrá una segunda IP (alias) a la tarjeta de red. Si queremos borrar una de las IPs de la tarjeta sería así: ip address del IP dev dispositivo
  39. 39. Por ejemplo: ip address del 192.168.5.106 dev eth0 En Ubuntu, Knoppix, Debian y Fedora está configuración se encuentra en /etc/network/interfaces y en Suse, Mandriva se encuentra en el directorio /etc/sysconfig/network. Por partes, en la primera sección se configura la interfaz de loopback. En la primera línea de su configuración se indica “auto lo” esto primero indica el modo en que la interfaz será levantada: de forma automática (auto), si la levanta algún subsistema ("allow-") o si depende de otro dispositivo físico (mapping); y después el nombre del dispositivo. Esta primera línea la llevan todos los dispositivos de red, adaptándola a sus necesidades. En la segunda línea se nos indica en nombre de la interfaz (iface lo), y su configuración IP (inet loopback). Veamos la siguiente sección en la que se configura una conexión con IP estática: en la primera línea, al igual que ocurría con la interfaz de loopback, le indicamos el modo de arranque y su nombre. En la segunda mostramos su nombre (iface eth0) y el tipo de configuración que tendrá (inet static), en este caso estática, de modo que le tendremos que dar los valores correspondientes a esta configuración: le pasamos la IP (campo address), la puerta de enlace (campo gateway) y la máscara de red (campo netmask): Por último, vemos la configuración de una conexión que tomará su IP de un servidor DHCP. En su configuración, al igual que en la de las demás, la primera línea debe contener su nombre y el modo de arranque. En la siguiente, la indicamos el nombre de la interfaz (iface eth1) y su modo de configuración (inet dhcp). Los servidores DNS responden a las peticiones de nuestra máquina. Esto se configura en el archivo /etc/resolv.conf que puede tener un aspecto similar a este: Indicamos a nuestra máquina cuales son los servidores DNS a los que nuestro equipo realizará las peticiones, y esto se le indicamos con la directiva nameserver IPdelservidor Además podemos indicarle el nombre de dominio en que queremos que haga la búsqueda con la directiva domain nombredominio Este dominio de búsqueda
  40. 40. nos sirve para que cuando buscamos un nombre del host del cual no hemos puesto el dominio al que pertenece, lo intenta buscar dentro de este dominio. Un aspecto importante del equipo es su nombre, para modificarlo hay que hacerlo en el archivo /etc/hostname, el nombre que conste en este archivo será el de la máquina. Otros comandos que pueden interesarnos a la hora de configurar nuestra red son: Este comando nos muestra las rutas por las que saldrán las peticiones de nuestro equipo a los distintos destinos. Por ejemplo: Lo que vemos es que para ir a las redes 192.168.5.0/24, 192.168.1.0/24 y 169.254.0.0/16 se utiliza el dispositivo eth0, de modo que todo paquete que queramos enviar a esas redes saldrá por esa tarjeta de red. Por otro lado, en la última línea, lo que se define es la ruta por defecto que se seguirá para todos los demás destinos que no se listen anteriormente; por ejemplo para ir a la red 192.168.3.0/24, como no hay ninguna referencia a ella en la tabla de rutas, irá usando la interfaz por defecto eth0. ip route add red_destino dev dispositivo Este comando permite añadir rutas a la tabla de enrutamiento, lo que sirve para que cuando un paquete vaya a un determinado destino, si hemos añadido una ruta para él, siempre irá por ese camino. Por ejemplo, queremos que las peticiones de nuestra máquina que vayan a la red 192.168.1.0/24 vayan por la tarjeta eth1, sería así: ip route add 192.168.1.0/24 dev eth1 ip route add default via IP_gateway Con este comando añadimos la ruta por defecto, es decir, cuando queramos conectar con una red que no tiene ninguna entrada en la tabla de enrutamiento, irá por la puerta de enlace definida como por defecto. Por ejemplo, para añadir como ruta por defecto la puerta de enlace cuya IP es la 192.168.1.1 haríamos: ip route add default via 192.168.1.1 ip route delete red_destino dev dispositivo Nos permite quitar una entrada de la tabla de enrutamiento. Si quisiéramos quitar la ruta por defecto sería ip route delete default Para quitar por ejemplo el enrutamiento definido antes para la red 192.168.1.0/24 por la interfaz eth1, el comando sería: ip route delete 192.168.1.0/24 dev eth1 Ping: el comando ping nos permite comprobar la conectividad entre 2 hosts, su funcionamiento consiste en que un host envía un mensaje ICMP a otro, el cual debe
  41. 41. contestarlo con otro paquete ICMP que contendrá una secuencia de 32 bits y un identificador igual que el que le envío el otro host. Sintaxis: ip [opciones] ip_destino Algunas opciones destacables: I dispositivo nos permite especificar a través de que interfaz queremos que se haga la petición. Por ejemplo para hacer un ping a google.es por la eth3 sería: ip –I eth3 google.es c num num será el número de paquetes que mandaremos al host de destino del ping. En Linux, el número de paquetes enviado es indefinido, así que si no indicamos cuantos enviar, para parar el envío de estos mensajes tendremos que hacer un Ctrl+C. El comando ip addr list vendría a ser lo mismo que ejecutar ifconfig. Se puede ejecutar con el mismo resultado como ip address show o ip address list. También podemos usar el comando ip link show para ver la información en capa 2 (data link layer) de las interfaces de red del sistema. Para habilitar o deshabilitar una interfaz de red seguiremos utilizando ip link.
  42. 42. En el ejemplo anterior de como al levantar o tirar la interfaz desaparece la flag de UP en el ip addr list. En ifconfig se hace del siguiente modo. Configurar una IP para la interfaz Con ip addr add podemos especificar la IP, máscara (también en formato CIDR como vemos a continuación y la IP de broadcast. Para eliminar la IP: Telnet: el comando telnet nos permite comprobar si tenemos conectividad con un determinado puerto de otra máquina. Por ejemplo si queremosprobar la conectividad de nuestro equipo contra el puerto 25 de un servidor de correo llamado qacg.com sería: Netstat permite ver la conectividad de nuestra red, sus opciones: -t Nos permite ver las conexiones TCP activas. -u Nos permite ver las conexiones UDP activas -r Muestra una tabla de enrutamiento. -p Muestra el programa que tiene la conexión abierta -l No muestra los puertos que están escuchando (esperando una conexión). Estas opciones se pueden usar conjuntamente, lo que hace este comando de gran ayuda, por ejemplo para ver todos los puertos que están esperando conexiones TCP, teclearíamos: netstat –lt y para ver esa misma información y además el nombre del programa que la ha abierto sería
  43. 43. Traceroute: nos enseña la ruta que sigue nuestro paquete hasta llegar a su destino. Nos muestra la lista de routers por los que nuestro paquete pasa hasta llegar a su destino. Donde se encuentre 'Dir' indica directorio, todos los demás son archivos. Archivos de configuración en /etc Permite agregar alias (nicks) a nombres reales de usuarios de /etc/aliases correo electrónico. Funciones y alias disponibles para todos los usuarios, variables /etc/bashrc de entorno globales en /etc/profile. /etc/cron.d Dir, archivos de cron personalizados para programas específicos. Dir, scripts de usuarios o de programas específicos que se /etc/cron.daily ejcutan cada día, según lo definido en crontab. Dir, scripts de usuarios o de programas específicos que se /etc/cron.hourly ejcutan cada hora, según lo definido en crontab. Dir, scripts de usuarios o de programas específicos que se /etc/cron.monthly ejcutan cada mes, según lo definido en crontab. Dir, scripts de usuarios o de programas específicos que se /etc/cron.weekly ejcutan cada semana, según lo definido en crontab. Controla archivos de cron para usuarios individuales o para el /etc/crontab usuario root. Sustitue 'fedora' por el nombre de tu distro para ver la versión /etc/fedora-release específica de tu distribución Linux. Definición de directorios a compartir a través del sistema de /etc/exports archivos en red NFS. Se usa para probar el orden de sistemas de archivos cuando se /etc/filesystems monta un dispositivo con la opción auto.
  44. 44. /etc/fstab /etc/group /etc/gshadow /etc/host.conf /etc/hosts /etc/hosts.allow /etc/hosts.deny /etc/inittab /etc/issue /etc/login.defs /etc/logrotate.conf /etc/mtab /etc/motd /etc/passwd /etc/printcap /etc/profile /etc/rc.d /etc/rc.d/init.d /etc/rc.d/rc.local /etc/rc.d/rc0.d /etc/rc.d/rc1.d Lista los sistemas de archivos montados automáticamente al arranque del sistema Almacena la información de los grupos del sistema, complemento de /etc/passwd Guarda las contraseñas de los grupos asi como información de la caducidad de la misma, similar a /etc/shadow Indica como en que orden se resuelven los nombres de equipo o de dominio. Define nombres de equipos igualándolos con sus direcciones IP. Define un formato de acceso o lista de control de acceso de que equipos pueden ingresar al sistema. Define un formato de acceso o lista de control de acceso de que equipos no pueden ingresar al sistema. Archivo de configuración para el comando init, determina el nivel de ejecución del sistema y define scripts de arranque. Mensaje de bienvenida para todos las consolas antes del login. Controla la configuración del login de usuarios (contraseña, caducidad, etc.) en sistemas que usan /etc/shadow Configura los parámetros del programa logrotate que a la vez administra archivos de bitácora (logfiles). Archivo dinámico que contiene una lista de los sistemas de archivos montados actualmente. Inicializado por init y actualizado por mount. "Message Of The Day", mensaje que aparece a todos los usuarios después de loguearse a una terminal. La base de datos de usuarios del sistema, nombre, directorio de inicio, id del usuario, etc. Se complementa con las contraseñas almacenadas en /etc/shadow Archivo de configuración para las impresoras. Variables de entorno globales a todos los usuarios. Funciones y alias van en /etc/bashrc Dir, directorio que contiene los scripts de arranque del sistema y los directorios de los niveles de ejecucción. Dir, scripts de arranque/detener de los diferentes programas servidores del sistema. en algunas distros esta en /etc/init.d Último script que se ejecuta al arranque del sistema, es el más adecuado para agregar nuestros propios script de arranque. Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al nivel de ejecución 0 (apagado del equipo). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al
  45. 45. nivel de ejecución 1 (monousuario, single user). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al /etc/rc.d/rc2.d nivel de ejecución 2 (multiusuario). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al /etc/rc.d/rc3.d nivel de ejecución 3 (red completa, multiusuario). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al /etc/rc.d/rc4.d nivel de ejecución 4 (personalizado). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al /etc/rc.d/rc5.d nivel de ejecución 5 (modo gráfico X11, red completa, multiusuario). Dir, scripts de arranque(Start)/detener(Kill) cuando se ingresa al /etc/rc.d/rc6.d nivel de ejecución 6 (reinicio del equipo). Configura la(s) dirección(es) del servidor de nombres de domino /etc/resolv.conf que resuelve para el equipo. Identifica las terminales en las que el usuario root puede /etc/securetty loguearse. Lista de los servicios de red (tcp y udp) según la última lista de la /etc/services iana.org /etc/shells Lista de los shell (línea de comandos) confiables. Complemento de /etc/passwd, archivo donde se guarda la /etc/shadow contraseña encriptada y demás datos de la misma de los usuarios del sistema. Lista de usuarios con privilegios especiales de root y los /etc/sudoers comandos que pueden ejecutar. Dir, directorio donde se almacenan archivos de configuración /etc/sysconfig relativos al equipo, teclado, mouse, red, etc. Permite definir la zona horaria y otros parámetros de la fecha y /etc/ " /clock hora. Parámetros LC (locale) y otros de internacionalización como /etc/ " /i18n sistema de medida, de moneda, código de teléfono, etc. /etc/ " /init Variables de control de la forma en que inicia el sistema. Iptables toma por default este archivo para cargar sus reglas al /etc/ " /iptables arranque del sistema. /etc/ " /network variables de configuración global de parámetros de red. /etc/ " Dir, directorio que contiene la configuración de los dispositivos de /networking/devices red. Cada dispositivo (eth0, eth1, etc.) de red tiene su archivo de /etc/ " / " / " /ifcfg-eth0 variables de configuración. /etc/sysctl.conf Variables de configuración del kernel. /etc/syslog.conf Control y configuración sobre la bitacorización de eventos del
  46. 46. /etc/termcap /etc/version sistema. Configuración de los atributos de la terminal o shell. Generalmente el número de versión de la distro. Es importante señalar que no todos los archivos aqui mostrados existen en todas las distribuciones de Linux, puede haber y de hecho las hay importantes diferencias, pero en su gran mayoría esta guía aplica. Practicas 1. Ir al directorio /usr/share/doc/info y allí copia los ficheros AUTHORS y copyright al directorio /tmp. 2. En /tmp haz una copia del archivo AUTHORS que se llame AUTHORS2 3. Ahora añade el contenido del archivo copyright al archivo AUTHORS. Comprueba que dicho contenido se ha añadido. 4. Reescribe lo que hay en AUTHORS con lo que hay en AUTHORS2. Muestra el contenido de AUTHORS haciendo un filtro que muestre solo las líneas dónde aparece la palabra “file” (sin comillas). En este mismo directorio crea un archivo vacio que se llame errores.txt.
  47. 47. 7. Ahora ejecuta el comando ls –l noexiste redirigiendo la salida de errores al archivo Errores.txt. Crea un archivo vacio llamado todo.txt. Ejecutar el comando ls –l AUTHORS noexiste y redirige tanto la salida estándar como la de Errores.txt al archivo Todos.txt. 1. Ve al directorio /usr/share/doc/cron Haz un filtro del archivo copyright, para mostrar las líneas que empiecen por C (en mayúsculas). 5. Filtra las líneas de ese archivo que contiene la palabra GNU en mayúsculas y minúsculas. 4. Las líneas de copyright que contenga algún digito del 0 al 9.
  48. 48. Ejercicios con comandos básicos 1. Muévete al directorio /tmp y crea un directorio llamado Ejemplo1 que contenga un archivo llamado FileLinux.txt y un subdirectorio llamado NivelInterno. 2. Copia el directorio Ejemplo1 y su contenido a la home de tu usuario (su ruta será /home/nombreusuario). Copia el directorio Ejemplo1 y su contenido a la home de tu usuario pero esta vez llámalo Ejemplo1-2Rename. 3. Muévete a la home de tu usuario. Accede a Ejemplo1-2Rename y cambia el nombre de FileLinux.txt a Archivo1.txt. Muestra el peso del directorio Ejemplo1-2Rename. Muestra el peso del archivo Archivo1.txt. 4. Borra el directorio Ejemplo1-2Rename. Vuelve a /tmp y cámbiale el nombre al directorio Ejemplo1 por PruebaLinux
  49. 49. 5. Mueve el directorio PruebaLinux a la home de tu usuario. Muestra el peso de la home de tu usuario. Ejecuta el comando cd ~ y después ejecuta el comando pwd para saber en qué ruta te encuentras 6. Ingresa con root con el comando su y luego vuleve a la sesión que tenías y luego reinicia el equipo. Ejercicios con comandos para el trabajo con archivos y enlaces Como ayuda para hacer los ejercicios, has de saber que el comando cd ~ te lleva directamente a la home del usuario. 1. En el home crea un archivo llamado file1 con el comando cat y agrega algún contenido durante su creación 2. Ahora crea un archivo sin contenido llamado file2.
  50. 50. 3. Ejecuta un comando que te diga si file1 y file2 son iguales. 4. Ve al directorio /var/log y muestra las 10 últimas líneas del archivo llamado pmpowersave.log. 5. En ese mismo directorio muestra las 5 primeras líneas del archivo llamado syslog. 6. Muestra en tiempo real el final del archivo Xorg.0.log. Para salir de esta vista tienes que pulsar la combinación de teclas Ctrl+C 7. Accede al directorio prueba que está en tu home desde el ejercicio pasado. Cambia la fecha de última modificación a la actual del archivo que contiene.
  51. 51. 8. Crea un enlace simbólico del archivo Archivo.bin en /tmp que se llame Acceso_Directo_Archivo.bin. 9. Comprueba a que i-nodo apunta Archivo.bin. Comprueba a que i-nodo apunta el enlace simbólico Acceso-Directo- Archivo.bin. 10. Crea en el directorio prueba de tu home un archivo llamado p1. Crea un enlace duro al mismo llamado p2, y comprueba si ambos comparten i-nodo o no. 11. Ejecuta el comando adecuado para ver quién es el propietario y el grupo del último enlace creado. Ejercicios con comandos para el trabajo con consola 1. Muestra los 3 últimos comandos almacenados en el histórico.
  52. 52. 2. Ahora limpia la pantalla 3. Muestra la fecha y hora del sistema y cámbiala a un día más tarde (se necesitan permisos de administrador). 5. Comprueba en que terminal está conectado el usuario root (a la hora de interactuar con él nos interesará el descriptor del terminal, no del escritorio que este sabemos que es tty7). La sesión en tty7 es la que tiene en el escritorio, y la pts/2 la del terminal en ese escritorio. 6. Envía un mensaje a root a su consola. 7. Muestra los últimos accesos al sistema
  53. 53. Ejercicios de compresión y empaquetado 1. Crear un directorio en tu home que se llame PracticaHome. Dentro de este directorio crea 2 ficheros llamado Datos.bin, Datos.txt. Crea además un directorio llamado SubDirHome que contenga un archivo llamado Docto.txt. 2. Copia el directorio /usr/share/doc/passwd el archivo NEWS.gz a la carpeta PracticaHome. 3. Descomprime el archivo NEWS.gz que se copio en el ejercicio anterior 4. Empaqueta con tar el directorio SubDirHome mostrando los mensajes de salida. 5. Comprime con gzip el paquete que generaste con SubDirHome. Vemos como al comprimirlo con gzip, le añade la extensión .gz al nombre del archivo.
  54. 54. 6. Comprime con bzip2 NEWS. 7. Desempaqueta y descomprime SubDirHome con mensajes de salida. 8. Empaqueta y comprime con bzip2 SubDirHome. Ficheros de configuración La tarea de asignar un gid a cada usuario, ponerle el tiempo de expiración de la contraseña, asignar los permisos que deberá tener por defecto cuando inicie sesión, etc uno a uno puede ser una tarea tediosa y puede alargarse mucho en el tiempo. Para simplificar la tarea existe el fichero /etc/login.defs. El contenido del fichero debería ser similar a este:
  55. 55. En él se pueden definir variables que usarán por defecto los comandos useradd y usermod a la hora de crear nuevos usuarios. A continuación se definen algunas de las variables que aparecen en el fichero: MAIL_DIR Directorio que se usará para albergar el correo. CREATE_HOME Si está puesto a "yes" creará un directorio a cada usuario que creemos por defecto. PASS_MIN_LEN Longitud mínima que debe tener la contraseña para que sea aceptada por el sistema. PASS_MAX_DAYS Número máximo de días que deben pasar entre cambios de contraseñas. Para el resto de opciones basta con leer la descripción asociada a ellas. Además del fichero /etc/login.defs existen también otros ficheros que podremos modificar para cambiar el comportamiento por defecto a la hora de trabajar con los usuarios que inicien sesión. Estos se encuentran en la ruta /etc/skel/ Si nos vamos a esa ruta y hacemos un ls para mostrar el contenido de la carpeta no veremos nada, esto es porque son ficheros ocultos y llevan un "." delante del nombre. Para mostrarlos debemos usar la opción -a: ls –a En el fichero .bash_logout se definen las acciones, programas, etc que se ejecutarán cuando se cierre la sesión. En el fichero .bashrc se definen los programas a ejecutar una vez iniciada la sesión del usuario. En el fichero .bash_profile se define sobre todo la configuración del entorno del usuario que se ejecutará al iniciar sesión.
  56. 56. Prácticas con la búsqueda 1. Vamos a preparar un directorio de búsquedas, para ello en tu home crea un directorio llamado busquedas. Para esta practica ejecutar los siguientes comandos: Visualizar la estructura vista con el comando tree: 2. Busca todo lo que contienen los directorios dir1, dir2 y dir3. 4. Muestra todo el contenido de las rutas que no empieza por F.
  57. 57. 5. Muestra todo el contenido hasta el primer nivel de los subdirectorios. 6. Muestra todo el contenido a partir del segundo nivel de subdirectorios. 7. Muestra todo el contenido del primer y segundo nivel de subdirectorios. 8. Muestra todo cuyo nombre empiece por Dir
  58. 58. 9. Muestra todo lo del primer nivel cuyo nombre acabe en un número del 1 al 3 10. Ahora dentro del directorio otro crea un enlace simbólico al archivo otro que contiene, llamado link. Además, en el propio directorio busquedas crea un link simbólico a f0 llamado link2. 11. Muestra todos los archivos de tipo directorio del directorio busquedas y todos sus subdirectorios. 12. Muestra todos los enlaces simbólicos a partir del primer nivel de subdirectorios. 13. Ve al directorio /dev y busca todos los archivos de tipo dispositivo de bloque.
  59. 59. 14. Vuelve al directorio busquedas de tu home y busca todos los archivos vacios. 15. Ve a tu home y busca todos los archivos cuyo nombre contenga una l y que hayan sido modificados o creados en los 4 últimos días. 16. Ve al directorio /etc y busca los archivos pertenecientes al usuario root.
  60. 60. 17. Busca como root en el directorio /etc los archivos con un peso superior a 50 kbs. 20. Con locate, busca todo cuyo nombre sea o contenga la palabra todo. 21. Con locate, muestra las 3 primeras coincidencias que detecte al buscar por config. 22. En el directorio /etc, busca emulando a root los archivos de todo tipo modificados o creados hace menos de 2 días cuyo propietario sea root y cuyo nombre contenga alguna e (pero no comience por e).
  61. 61. Comandos de gestión de usuarios El comando para añadir nuevos usuarios al sistema es useradd Algunos de los parámetros que se le pueden pasar son los siguientes: -u uid Con esta opción le asignamos el identificador de usuario manualmente al nuevo usuario del sistema. -g gid Con esta opción le asignamos el identificador del grupo primario al que pertenecerá el nuevo usuario del sistema. -G gid Con esta opción incluimos al usuario en otros grupos adicionales además del primario. -d directorio Con esta opción definimos el directorio de trabajo por defecto del nuevo usuario del sistema. -e fecha de expiración Con esta opción definimos la fecha de expiración de la cuenta del nuevo usuario en formato AAAA-MM-DD -p "contraseña" Con esta opción definimos en el propio comando useradd la nueva contraseña del usuario. -s shell Con esta opción definimos el intérprete de comandos que podrá utilizar el usuario. Como norma general se utiliza bash como intérprete de comandos por defecto. -c comentario Con esta opción le asignamos un comentario a la cuenta del usuario que vamos a crear. Como ejemplo, si quisiéramos crear un nuevo usuario que se llame "Pepito" con UID 5000, cuyo directorio home fuera /home/pepito y cuya cuenta expirara el 1 de enero de 2012 utilizaríamos el siguiente comando: useradd -u 999 -g 850 -d /home/pepito -e 2012-01-01 Pepito Para más opciones sobre useradd así como cualquier comando del sistema basta con consultar su página man man useradd Una vez creado el usuario podemos asignarle la contraseña con el comando passwd. La sintaxis del comando es la siguiente: passwd parámetros usuario Algunos de los parámetros usados por el comando son: -l Con esta opción bloqueamos la cuenta del usuario. Convierte la contraseña en una cadena inválida añadiéndole el carácter "!". -u Con esta opción hacemos lo contrario que con la opción -l. Desbloquea la cuenta del usuario y le quita el prefijo ! -n días Con esta opción indicamos el tiempo mínimo de vida en días para la contraseña del usuario. -x días Con esta opción indicamos el tiempo máximo de vida en días para la contraseña del usuario. -w días Con esta opción indicamos el número de días a partir del cual el usuario recibe un warning diciendo que debe cambiar la contraseña antes de que expire. Cuando se crea un nuevo usuario del sistema, su información se almacena en el fichero /etc/passwd al cual sólo puede acceder el usuario root y no se deberían modificar dichos permisos a no ser que sea imprescindible. Además de los usuarios que creemos nosotros, en ese fichero aparecen también las cuentas de los usuarios del sistema como Apache2 o bind9.
  62. 62. Si mostramos el contenido del fichero /etc/passwd tendremos algo parecido a esto: cat /etc/passwd El formato del fichero especifica siete campos distintos, cada uno de ellos separado por ":" Los campos corresponden con lo siguiente: 1. Nombre de la cuenta del usuario. 2. Contraseña del usuario codificada. No nos serviría de nada intentar modificar la contraseña del usuario aquí ya que no único que conseguiríamos es que la cuenta quedara bloqueada. La x hace referencia también a que se está usando el archivo /etc/shadow. 3. El número del identificador de usuario (UID) 4. El número del identificador del grupo al que pertenece el usuario (GID) 5. El comentario que le hayamos asignado al usuario. Si no le hemos asignado ningún comentario, este campo quedará vacío. 6. El directorio de trabajo del usuario al cual se conectará por defecto al iniciar sesión en el sistema. 7. La shell o intérprete de comandos que utilizará el usuario al iniciar sesión en el sistema. No todo el contenido de las cuentas de los usuarios se almacena en el fichero /etc/passwd. Dado que cualquier usuario puede leer el fichero (aunque no modificarlo), es posible que con el tiempo y una buena herramienta de desencriptado, cualquier usuario llegara a conocer las contraseñas de los demás si estas aparecieran en el fichero. Para solucionar este problema existe el fichero /etc/shadow. La x que aparece en el campo contraseña de los usuarios en el fichero /etc/passwd significa que se está utilizando el archivo /etc/shadow al cual sólo puede acceder root y de esta forma se evita que cualquier usuario del sistema acceda a las contraseñas cifradas. Si no se hiciera uso de /etc/shadow, en el campo de contraseña aparecería directamente la contraseña cifrada.
  63. 63. El contenido del archivo /etc/shadow debería ser similar a este: Podemos apreciar cómo aparece la contraseña cifrada de root y cómo no aparece la de los usuarios del sistema al no tener ninguna asignada y por lo tanto no poder iniciar sesión en el sistema. Los campos que aparecen en el fichero /etc/shadow se corresponden con: 1. Nombre del usuario. 2. Contraseña cifrada. En el caso de que aparezca "*" la cuenta no puede iniciar sesión. 3. Número de días transcurridos desde el 1 de enero de 1970 hasta la fecha en la que la contraseña fue cambiada por última vez. 4. Número de días hasta que la contraseña se pueda cambiar. 5. Días en los que expira la contraseña y por lo tanto hay que cambiarla. 6. Días antes de la expiración de la contraseña a partir del cual se le enviarán notificaciones al usuario para que la cambie. 7. Número de días después de que expire la contraseña tras los cuales se inhabilitará. 8. Día en el que caduca la cuenta. Se cuenta a partir del 1 de enero de 1970. Para modificar la información de un usuario creado previamente se utiliza el comando usermod. La sintaxis del comando es la siguiente: usermod parámetros usuario A parte de los comandos que se le pasan a useradd se le pueden pasar entre otros: -L Bloquea la cuenta de un usuario impidiendo que acceda al sistema. -U Desbloquea una cuenta de usuario bloqueada previamente con la opción -L
  64. 64. -l nuevo nombre de usuario Cambia el nombre de usuario con el que iniciará sesión en el sistema. -a nombre de grupo Añade al usuario a otro grupo. Hay que usarlo siempre con la opción -G. -G grupos Especifica el grupo o los grupos a los que se añadirá al usuario. Para poder eliminar un usuario, se utiliza el mandato userdel. La sintaxis del comando es la siguiente: userdel parámetros usuario Userdel, si no se le pasa ningún parámetro eliminará la cuenta del usuario de los ficheros /etc/passwd y de /etc/shadow pero no eliminará ni su directorio de trabajo ni los ficheros que hubiera ahí. Si le pasamos la opción -r se eliminará la cuenta de /etc/passwd y /etc/shadow y también su directorio de trabajo y los archivos que haya en el. Si el usuario está logueado en el sistema no dejará eliminarlo. Por último, la opción -f hace lo mismo que -r pero da igual si el usuario se encuentra logueado o no. El comando chage para modificar los tiempos de expiración de las contraseñas entre otras cosas. La sintaxis del comando es: chage parámetros usuario Los parámetros más utilizados son los siguientes: -m días Número mínimo de días entre cambios de contraseñas. -M días Número máximo de días entre cambios de contraseñas. -E fecha Día en el que expira la cuenta en formato AAAA-MM-DD -W días Número de días antes de que el usuario tenga que cambiar la contraseña en el que se le empezarán a enviar "warnings" Por ejemplo, si quisiéramos que la cuenta de pepe expirara el día 31/dic/2011, lo haríamos de la siguiente forma: chage -E 2011-12-31 pepe Además de los comandos aquí expuestos, hay otros que resultan útiles a la hora de trabajar con usuarios y grupos como son los siguientes: id nombre de usuario Muestra información sobre la identidad del usuario. Ejemplo: id knoppix finger nombre de usuario Muestra información detallada de los usuarios. finger knoppix
  65. 65. groups nombre de usuario Muestra los grupos en los que está incluido un determinado usuario. groups knoppix Gestión de usuarios 1. Conéctate a tu máquina virtual Centos y utiliza la cuenta de root. Accedemos a la máquina vía putty o bien a través de la propia terminal que lleva incorporada y usamos la cuenta de root: su – 2. Crea seis cuentas de usuario llamadas ana, mercedes, luis, ruben, yolanda y miguel con contraseña "12345" sin las comillas. Comprueba que estén creadas correctamente. Creamos las cuentas de usuario: A continuación les asignamos las contraseñas:
  66. 66. Comprobamos que se han creado correctamente: cat /etc/passwd cat /etc/shadow 3. Haz que las contraseñas de las cuentas recién creadas deban ser cambiadas cada 60 días y que la cuenta de yolanda expire el día 31/12/2011. Comprueba que se ha asignado correctamente. Hacemos que las contraseñas de los usuarios recién creados caduquen cada 60 días: Ahora hacemos que la cuenta de user4 expire el día 31/12/2011: Comprobamos que las 4. Se decide establecer una política de seguridad por la cual, todas las contraseñas deben ser cambiadas cada dos meses. Define en el sistema la política por defecto para que las cuentas creadas en el futuro tengan que cambiar la contraseña también cada 60 días. Crea una cuenta llamada prueba y comprueba si se le aplica la política que hemos modificado. Borra la cuenta prueba y también sus carpetas. A continuación definimos la política por defecto para que las nuevas cuentas que se creen tengan que cambiar la contraseña también cada 60 días: joe /etc/login.defs Modificamos el parámetro PASS_MAX_DAYS del fichero: A partir de ahora todas las cuentas que se creen deberán cambiar la contraseña cada 60 días. Creamos la cuenta llamada prueba: useradd prueba Comprobamos que se aplica la política: cat /etc/shadow
  67. 67. Efectivamente le pide cambiar la contraseña cada 60 días. Borramos la cuenta prueba así como sus carpetas: userdel -r prueba 5. La contraseña especificada "12345" es muy sencilla y por lo tanto poco segura, haz que los usuarios tengan que cambiar su contraseña inmediatamente en el siguiente inicio de sesión. Hacemos que los usuarios cambien su contraseña la próxima vez que inicien sesión: chage -d 2010-01-01 ana chage -d 2010-01-01 mercedes chage -d 2010-01-01 luis chage -d 2010-01-01 ruben chage -d 2010-01-01 yolanda chage -d 2010-01-01 miguel Con especificar cualquier día anterior al actual es suficiente. 6. Añade una política para hacer que las contraseñas tengan un mínimo de 7 caracteres para añadirle complejidad. Prueba a conectarte con miguel a la máquina. Se te debería pedir que cambies la contraseña del usuario y esta debería tener un mínimo de 7 caracteres. Vamos a añadir la política por defecto para que las contraseñas tengan un mínimo de 7 caracteres. Editamos el fichero /etc/login.defs y fijamos el parámetro PASS_MIN_LEN a 7: joe /etc/login.defs Probamos a loguear con miguel: Al introducir la contraseña nos aparece un cartel diciendo que debemos cambiarla: Ahora si intentamos introducir una contraseña de menos de 7 caracteres no nos dejará. También podemos probarlo conectándonos por ssh vía consola: ssh miguel@127.0.0.1 7. Crea un séptimo usuario llamado gonzalo mediante la herramienta gráfica systemconfig-users, asígnale la contraseña "g.2011," y el uid 2011
  68. 68. Vamos a crear el usuario gonzalo. Con la cuenta de root, en la terminal de la máquina escribimos lo siguiente: system-config-users Con lo que se nos abrirá el interfaz gráfico de creación de usuarios. Nos vamos a añadir usuario: En nombre de usuario escribimos gonzalo, de contraseña le asignamos "g.2011,", marcamos la casilla "especificar el ID del usuario manualmente" y le asignamos el 2011, le damos a aceptar. Comprobamos que se ha creado correctamente: Gestión de grupos El comando para añadir nuevos grupos es groupadd que se construiría así: groupadd parámetros grupo Podemos cambiar la información de un grupo mediante groupmod: -g GID Le cambiamos el GID al grupo. -n nuevo nombre del grupo Se le cambia el nombre al grupo. -A usuario Se añade al usuario al grupo especificado. Podemos eliminar un grupo mediante el comando groupdel La información sobre los grupos que hay creados así como los usuarios que pertenecen a cada uno se puede ver en el fichero /etc/group Si mostramos el contenido de dicho fichero deberíamos ver algo parecido a lo siguiente: Los campos de dicho fichero se corresponden con: 1. Usuario. 2. Contraseña del grupo. Aparece una x al no tener contraseña, si tuviera alguna, se mostraría encriptada. 1. El GID o identificador de grupo. 4. Grupos a los que pertenece el usuario. 1. Conéctate a tu máquina Centos y utiliza la cuenta de root. Accedemos a la máquina vía putty o bien a través de la propia terminal que lleva incorporada y usamos la cuenta de root:
  69. 69. su 2. Añade los grupos cpi, gestion y comercial con los gid 2001, 2002 y 2003 respectivamente. Comprueba que se han creado correctamente. Añadimos los grupos con los gid especificados: Comprobamos que se han creado correctamente: cat /etc/group 3. Cámbiale el nombre al grupo gestion por el de administracion. Comprueba que ha cambiado su nombre. Le cambiamos el nombre al grupo gestion por el de administracion: Comprobamos el cambio de nombre: cat /etc/group 4. Añade a ana y miguel al grupo auxiliar cpi, a luis y ruben al grupo auxiliar comercial y a yolanda y mercedes al grupo auxiliar administración. Comprueba que han sido asignados correctamente. Añadimos a los usuarios a sus respectivos grupos: usermod -aG cpi ana usermod -aG cpi miguel usermod -aG comercial luis usermod -aG comercial ruben usermod -aG administracion yolanda usermod -aG administracion mercedes Ahora comprobamos que han sido asignados correctamente: cat /etc/group
  70. 70. 5. Ahora añade a gonzalo a todos los grupos auxiliares anteriores mediante la herramienta gráfica. Con la cuenta de root, en la terminal de la máquina escribimos lo siguiente: system-config-users Seleccionamos el usuario gonzalo y le damos a propiedades: Se nos abrirá un cuadro con las opciones que podemos modificar del usuario gonzalo. Nos vamos a la pestaña grupos: Ahora deberemos marcar los grupos a los que queremos añadir a gonzalo y darle a aceptar.Nos vamos a la pestaña grupos de la pantalla de inicio y comprobamos que ha sido agregado correctamente: El sistema de cuotas La administración del espacio en disco es vital para cualquier sistema. Los recursos de los que dispone una máquina son limitados y por lo tanto si varios usuarios van a trabajar en un determinado equipo se debe implementar algún mecanismo que establezca un límite en el número de recursos que se van a utilizar. Con el fin de gestionar el espacio en disco existe el concepto de cuota. Las cuotas se establecen en una determinada partición del sistema y se pueden aplicar a usuarios usrquota, a grupos grpquota o a ambos. El comando quotacheck se utiliza para analizar el espacio en disco, crear o reparar archivos de cuota. Algunos de los parámetros que se le pueden pasar son:
  71. 71. -m Se fuerza al sistema a comprobar el sistema de archivos en modo lectura-escritura. -a Comprueba todos los sistemas de archivos. -v Va informando del progreso de la operación mientras esta se ejecuta. -u Sólo se comprueban las cuotas de usuario. -g Sólo se comprueban las cuotas de grupo. Con los comandos quotaon y quotaoff podemos habilitar o deshabilitar las cuotas en el sistema de archivos. quotaon: -v Enseña un mensaje por cada sistema de archivos en el que las cuotas están activadas. -a Activa las cuotas para todos los sistemas de archivos. quotaoff: -a Deshabilita las cuotas en todos los sistemas de archivos. -v Enseña un mensaje por cada sistema de archivos afectado. Con el comando repquota se puede obtener información del estado de las cuotas en un determinado sistema de archivos. -a Saca un reporte completo del estado de las cuotas. -u Saca por pantalla las cuotas de los usuarios. -n No resuelve los UID/GID en nombres, esto puede acelerar considerablemente el proceso de reporte. Con el comando edquota podemos establecer la cuota de un determinado usuario. Al ejecutarlo, se modificará el fichero mediante el editor vi y habrá varias columnas que modificar. Las columnas "blocks" e "inodes" son informativas e indican la cantidad de bloques e inodos utilizados actualmente por el usuario. Lo habitual es establecer los límites (soft, hard) en el número de inodos o en el de bloques pero no en los dos a la vez aunque esto sería también posible. Los bloques ocupan un 1KB por lo tanto para establecer una cuota de 5MB a un usuario deberíamos asignarle 5000 bloques. Los inodos representan el número de archivos que un usuario puede crear en el sistema. Cuando el usuario rebase el límite soft se le notificará la usuario y entrará en el "periodo de gracia". Cuando se acabe el periodo de gracia (por defecto 7 días) o el usuario llegue al límite hard, no podrá crear más archivos hasta que elimine algunos. Algunos de los parámetros de edquota son: -p usuario1 usuario2 Copia el patrón de cuotas del usuario1 al usuario2. -u Edita las cuotas de los usuarios. -g Edita las cuotas de los grupos. Vamos a implementar el sistema de cuotas para usuario en nuestro sistema Centos. Para ello habrá que añadir la opción usrquota a la partición / y volver a montarla para que surtan efecto los cambios. Usando el usuario root editamos el fichero /etc/fstab. El fichero /etc/fstab indica las particiones disponibles así como las opciones aplicadas a cada partición. joe /etc/fstab y añadimos la opción usrquota en las opciones de la partición /
  72. 72. Volvemos a montar la partición / con la opción que le acabamos de añadir: mount -o remount / Con la opción -o le decimos a mount que vuelva a montar (remount) la partición. Le decimos al sistema que cree el fichero necesario para gestionar las quotas mediante el comando: quotacheck -mavu Lo cual debería habernos generado en la raíz / el fichero aquota.user: ls -a / Finalmente le decimos al sistema que habilite las quotas con el comando: quotaon / Ya tenemos habilitado el sistema de cuotas. Gestión de cuotas de usuarios 1. Conéctate a tu máquina virtual Centos y utiliza la cuenta de root. Accedemos a la máquina vía putty o bien a través de la propia terminal que lleva incorporada y usamos la cuenta de root: su 2. Establece una cuota de disco para el usuario miguel de 50MB. Comprueba que se le ha asignado correctamente. Establecemos la cuota del usuario miguel: edquota miguel El fichero se editará con vi. Le damos a la "i" para insertar. Vamos al valor de hard de los bloques y para asignarle 50MB le ponemos el valor 50000. Una vez que hayamos acabado le damos al "Esc" , escribimos ":x!" sin las comillas y le damos al "enter" para salir guardando Comprobamos que la cuota ha sido asignada correctamente: repquota –a 3. Loguéate como miguel y ejecuta el comando dd if=/dev/zero of=archivo bs=1k count=4000. ¿te ha dejado crearlo? Comprueba la cuota que le queda al usuario. Nos logueamos como miguel: ssh miguel@127.0.0.1 Ejecutamos el comando dd if=/dev/zero of=archivo bs=1k count=4000:
  73. 73. Comprobamos la cuota del usuario: quota Tiene ocupados 4 de los 50MB. 4. Ahora ejecuta el comando dd if=/dev/zero of=archivo2 bs=1k count=100000 ¿Te ha dejado crearlo? Ejecutamos el comando dd if=/dev/zero of=archivo bs=1k count=100000: En lugar de los 100MB que tenía que tener el archivo, lo ha dejado en 47 MB debido a que el usuario ha alcanzado el límite de su cuota. quota 5. Vuelve a usar la cuenta de root y crea un archivo con el comando dd if=/dev/zero of=archivo3 bs=1k count=50000 en /home/miguel. ¿Te deja? ¿Por qué? Usamos la cuenta de root: su – Vamos a la carpeta de miguel: cd /home/miguel Creamos el archivo3 con el comando dd if=/dev/zero of=archivo3 bs=1k count=50000 El archivo se ha creado correctamente porque la cuota se aplica por usuario y no por directorio. Miguel tiene la cuota llena pero el fichero creado por root no altera esa cuota en ningún momento.
  74. 74. 6. Utiliza como plantilla la cuota de miguel para asignarle la misma al resto de usuarios. Comprueba que se ha establecido correctamente. Le asignamos la cuota al resto de usuarios con la cuota establecida para miguel como plantilla: edquota -p miguel ana edquota -p miguel luis edquota -p miguel ruben edquota -p miguel mercedes edquota -p miguel yolanda edquota -p miguel Gonzalo Comprobamos que se ha establecido correctamente: repquota –a De esta forma se agiliza el proceso de asignación de cuotas. El comando dd transfiere datos de un dispositivo a otro. En este caso se ha utilizado para, desde el fichero origen /dev/zero, producir un archivo con bloques de tamaño 1k, hasta completar tantos bloques como aparezcan en el parámetro "count" Así podemos hacer pruebas con las cuotas de los usuarios. Gestión de permisos de usuario Existen tres tipos de permisos: r=lectura Cualquier usuario que tenga permiso de lectura sobre un directorio podrá mostrar su contenido. Si el permiso de lectura lo tiene sobre un archivo, podrá ver su contenido. w=escritura El usuario que tenga permisos de escritura sobre un determinado directorio podrá crear y borrar nuevos archivos en el. Si está asignado a un archivo, podrá modificar su contenido. x=ejecución Cuando se tiene este permiso sobre un directorio, el usuario puede acceder a el, mientras que si se trata de un archivo, este podrá ser ejecutado. Podemos mostrar los permisos de los archivos de un directorio mediante el comando ls -l, a continuación se muestran, por ejemplo, los permisos de la carpeta /tmp:
  75. 75. Hay nueve campos en total separados por espacios. Vamos a coger, por ejemplo, el último directorio que aparece "virtual-root.eflZcm" El primer campo lo compone drwx-----El primer carácter que aparece "d" indica el tipo de archivo que en este caso es un directorio "d", los siguientes nueve caracteres indican los permisos efectivos para ese archivo. De esos nueve caracteres, los tres primeros rwx indican los permisos para el propietario del archivo. En este caso el propietario tendría permisos de lectura, escritura y ejecución. Los siguientes tres caracteres indican los permisos efectivos para el grupo propietario del archivo. En este caso, el grupo propietario no tendría ningún permiso sobre el archivo en cuestión. Los últimos tres caracteres indican los permisos efectivos para "otros", es decir, cualquiera que no sea el propietario o pertenezca al grupo de propietarios. En este caso no tendrían ningún permiso efectivo sobre el archivo. Así pues, cada grupo de tres caracteres representa los permisos efectivos del propietario, el grupo y otros. El siguiente campo de los nueve que nos interesa es el tercero. Ese campo nos dice quién es el propietario del archivo en cuestión, en este caso root. El cuarto campo corresponde al grupo propietario del archivo, en este caso root. El quinto campo nos dice el tamaño del archivo en bytes. El resto de campos se corresponden con la fecha y la hora en la que el archivo fue modificado por última vez. Todos los usuarios cuando crean cualquier archivo en el sistema se crea con unos permisos determinados. Estos permisos vienen dados por la llamada "máscara" que se aplica a los usuarios. Esta máscara se puede definir en el fichero /etc/profile para que la usen todos los usuarios del sistema o bien podemos asignarla sólo al usuario que deseemos añadiendo la opción umask en el fichero .bashrc_profile que se encuentra en el directorio home de cada usuario. Su función es quitar a los ficheros y directorios, los permisos que le hayamos especificado. Los directorios tienen permisos 777 y los ficheros 666, de tal forma que si para un usuario tenemos una máscara 022, los permisos efectivos que tendrían los directorios que creara serían 775 y ficheros 664. Podemos cambiar la máscara que está usando el usuario en ese momento mediante el comando umask, por ejemplo, ejecutar umask 077 en la sesión de Fernando haría que todos los ficheros creados a partir de ese momento por el se crearan con permisos 600 y todos los directorios con permisos 700. Este cambio sólo duraría mientras el usuario esté conectado, para hacer el cambio permanente tendríamos que modificar los ficheros nombrados anteriormente (/etc/profile o .bashrc_profile según nuestras necesidades) Para modificar los permisos de los archivos tenemos el comando chmod que puede ser usado de dos formas: mediante notación binaria o mediante el uso de caracteres. El comando se construye de la siguiente forma: chmod permisos directorio/archivo opciones
  76. 76. Si nos decidimos a usar el comando mediante el uso de caracteres hay que seguir el patrón usuario acción permisos u Usuario propietario del archivo. g Grupo propietario del archivo. o Otros usuarios. a Todo el mundo. + Añadir permisos. - Quitar permisos. = Sólo deja ese permiso. r Permiso de lectura. w Permiso de escritura. x Permiso de ejecución. Por ejemplo, si quisiéramos darle permisos a otros de lectura y ejecución sobre el directorio "virtual-root.eflZcm", el comando quedaría así: chmod o+rx virtual-root.eflZcm/ Ahora si hacemos un ls -l: Vamos a quitarle los privilegios recién otorgados al directorio usando - en lugar de +: chmod o-rx virtual-root.eflZcm/ Si por el contrario preferimos trabajar en binario con el comando chmod deberemos hacerlo de la siguiente forma: Lo primero que hay que tener claro es que cada grupo de tres caracteres representa los permisos efectivos del propietario, del grupo y de otros respectivamente, por lo tanto cada grupo de tres será tratado independientemente. Los valores en binario corresponden a los siguientes: 0 ___ 0: ningún permiso 1 __x 1: permiso de ejecución 2 _w_ 2: permiso de escritura 3 _wx 3: permiso de ejecución + escritura (1+2) 4 r__ 4: permiso de lectura 5 r_x 5: permiso de lectura + ejecución (4+1) 6 rw_ 6: permiso de lectura + escritura (4+2) 7 rwx 7: permiso de lectura, escritura y ejecución (4+2+1) Cada grupo de tres deberá tener un valor comprendido entre 0 y 7 incluidos a la hora de establecer los permisos. Así por ejemplo, si quisiéramos asignar todos los permisos al propietario, lectura y ejecución al grupo y lectura y ejecución a otros sobre el fichero virtual-root.ef1Zcm quedaría de la siguiente forma: chmod 755 virtual-root.eflZcm/ Mostrando los permisos:
  77. 77. Si quisiéramos dejarle los permisos como estaban, es decir, que el grupo y otros no tuvieran ningún privilegio, se haría de la siguiente forma: chmod 700 virtual-root.ef1Zcm/ Algunos de los parámetros que se le pueden pasar a chmod son: -R Cambia recursivamente los permisos de los archivos y directorios que haya debajo del directorio seleccionado. -v Saca una descripción de las acciones tomadas sobre cada fichero. -c Muestra una descripción de los ficheros a los que les hayan cambiado los permisos realmente. Para modificar el usuario propietario de un archivo existe el comando chown chown usuario archivo Algunos de los parámetros que se le pueden pasar a chmod son: -R Cambia recursivamente el propietario de los archivos y directorios que haya debajo del directorio seleccionado. -v Saca una descripción de las acciones tomadas sobre cada fichero. -c Muestra una descripción de los ficheros a los que les haya cambiado propietario realmente. Así pues, si quisiéramos cambiar el propietario del archivo "virtual-root.ef1Zcm" para que el nuevo fuera pepe, usaríamos el siguiente comando: chown pepe virtual-root.ef1Zcm/ Haciendo un ls -l: Volvemos a dejarlo como estaba: chown root virtual-root.ef1Zcm/ También podemos modificar el grupo propietario de un archivo mediante el comando chgrp chgrp grupo directorio/archivo Algunos de los parámetros que se le pueden pasar a chmod son: -R Cambia recursivamente el grupo propietario de los archivos y directorios que haya debajo del directorio seleccionado. -v Saca una descripción de las acciones tomadas sobre cada fichero. -c Muestra una descripción de los ficheros a los que les haya cambiado grupo propietario realmente. Cambiemos, por ejemplo, el grupo propietario del fichero virtual-root.ef1Zcm a "pepe": chgrp pepe virtual-root.ef1Zcm/ Dejémoslo como estaba: chgrp root virtual-root.ef1Zcm/ Podemos cambiar el propietario y el grupo propietario a la vez mediante el comando chown. Por ejemplo si quisiéramos cambiar el propietario y el grupo del fichero virtualroot.ef1Zcm por pepe en ambos casos: chown pepe:pepe virtual-root.ef1Zcm/ Lo dejamos como estaba: chown root:root virtual-root.ef1Zcm/
  78. 78. En lugar de usar el nombre de los usuarios también podríamos utilizar su UID y GID respectivamente. Permisos especiales El primero de ellos es el "Sticky bit". Cuando el sticky bit está habilitado en un determinado directorio, todos los archivos que haya dentro de ese directorio sólo podrán ser eliminados por el usuario que los haya creado. Esto evita el problema de que cualquier usuario con permisos de escritura sobre un directorio pueda eliminar estos archivos. Para habilitar el sticky bit hay que añadir un 1 a los permisos normales. Por ejemplo, creamos un directorio que se llame sticky en /tmp: mkdir /tmp/sticky A continuación le asignamos permisos 755 al directorio y le asignamos el 1 del sticky bit: chmod 1755 /tmp/sticky Ahora si miramos los permisos del directorio: ls -l /tmp/sticky Comprobamos que aparece una "t" en lugar de la x de ejecución en los permisos. A partir de ahora sólo el propietario de los archivos creados en ese directorio podrá borrarlos. El segundo tipo de permiso especial es el "bit sgid". El bit sgid se utiliza para establecer directorios colaborativos. Cuando un directorio tiene el bit sgid habilitado, cualquier archivo que se cree dentro de él pertenecerá al grupo propietario del directorio y no al del creador. Para habilitarlo basta con añadir un 2 a los permisos normales. Vamos a habilitar el bit sgid en el directorio sticky: chmod 2755 /tmp/sticky Ahora mostramos los permisos: ls -l /tmp/sticky Se aprecia cómo ha desaparecido la "t" del sticky bit y ahora en los permisos del grupo aparece una "s" en lugar de la x de ejecución. Ahora todos los archivos que se creen dentro del directorio sticky pertenecerán al grupo propietario del directorio, es decir, root. El último tipo de permiso especial es el "bit suid". Cuando un archivo tiene habilitado el bit suid, cualquiera que ejecute dicho archivo lo hará con los mismos privilegios que el creador del mismo. Hay que tener mucho cuidado con este permiso porque por ejemplo, si el administrador crear un archivo y le asigna el bit suid, cualquiera que pueda ejecutar ese archivo lo hará con los mismos privilegios que el administrador. Para habilitarlo basta con añadir un 4 a los permisos normales. Vamos a crear un archivo en /tmp llamado suid: touch /tmp/suid A continuación le asignamos el bit suid: chmod 4755 /tmp/suid Comprobamos los permisos: ls -l /tmp/suid
  79. 79. Comprobamos que aparece una s en lugar de la x de ejecución en los permisos del propietario. El comando sudo En ocasiones es necesario proporcionar acceso a ciertas funciones del sistema propias del usuario root a otros usuarios que, de otra forma, no podrían ejecutar. Sudo proporciona acceso a otros usuarios a comandos sólo accesibles por root. Por ejemplo, si el usuario crear usuarios, intentaría ejecutar sudo /usr/sbin/useradd obteniendo el siguiente resultado tras introducir su contraseña: Para otorgar privilegios mediante el comando sudo a los distintos usuarios, existe el fichero /etc/sudoers. Podemos modificar dicho fichero mediante el editor de texto que prefiramos sin embargo, la modificación suele realizarse mediante el comando visudo el cual lo edita con el editor por defecto que debería ser vi. Es recomendable utilizar el mandato visudo debido a que tiene dos grandes ventajas: Cuando se edita el fichero lo bloquea de tal manera que no pueda haber dos personas a la vez modificándolo y por lo tanto uno modifique el trabajo del otro. Una vez guardado el fichero, visudo comprueba la sintaxis del mismo y si detecta algún error en la misma no deja salir de él hasta que ha sido subsanado. El contenido del fichero sería como este: Se pueden definir privilegios en el fichero /etc/sudoers siguiendo el siguiente patrón: usuario host=comando/s Si quisiéramos que el usuario pepe pudiera crear usuarios, editaríamos el fichero de la siguiente forma: visudo y añadiríamos la siguiente línea: pepe ALL=/usr/sbin/useradd Logueamos con el usuario pepe y probamos a crear un usuario: su - pepe sudo /usr/sbin/useradd pruebasudo cat /etc/passwd
  80. 80. Con el objetivo de agilizar la tarea podemos definir alias. Para crear un alias de usuarios usaríamos la siguiente sintaxis: User_alias NOMBRE_DEL_ALIAS = Usuarios Para crear un alias de host: Host_alias NOMBRE_DEL_ALIAS = hosts Finalmente, para crear un alias de comandos: Cmnd_alias NOMBRE_DEL_ALIAS = comandos Listas de acceso o ACLS En ocasiones, los permisos tradicionales que se le asignan a los distintos archivos se quedan cortos y es necesaria una mayor granularidad. Cuando queremos otorgarles privilegios a otros usuarios sobre un archivo sin tener que recurrir al grupo "otros" necesitamos utilizar las ACLS. Para que nuestro sistema trabaje con ACLS es necesario que la partición en cuestión estÀs para añadirl1

×