Guía de Supervivencia en Linux
Guía de Supervivencia en Linux
Linux:
Linux (GNU/Linux) es un sistema operativo al igual que Windows o Mac OS; sólo que a diferencia de
éstos su código es de libre acceso lo que permite una mayor libertad en su uso y que puede ser
desarrollado por un sinfín de personas, no limitándose a una empresa en particular.
Técnicamente hablando; Linux es el kernel o núcleo del sistema, el cual sería poco funcional si no se
complementara con una gran cantidad de softwares, la mayoría liberado bajo alguna licencia del
proyecto GNU (software libre).
Linux, o, mejor dicho, GNU/Linux es un conjunto que comprende un kernel Linux y cientos de
aplicaciones GNU que hacen utilizable el sistema.
Todo sistema se compone de una shell y un kernel, el kernel ha sido desarrollado por Linus Torvalds y
un conjunto de programadores de su confianza; mientras que la shell fue impulsada por el proyecto GNU
y es hoy desarrollada por millones de programadores en el mundo entero.
Cuando hablamos de kernel, hablamos de un software que tiene por objetivo comunicarse con el
hardware y con la Shell; nadie directamente usa el kernel, sino que es a través de la Shell que se
interactúa con el kernel y con el hardware, es por eso por lo que es más correcto llamarlo GNU/Linux y
no solo Linux ya que ambos proyectos se conjuntan para formar el total del sistema operativo.
Shortcut es un atajo que se puede acceder mediante una combinación de teclas, para así realizar
algunas tareas esenciales del sistema operativo, en el caso de Linux esta es funcional bajo terminales
TTY y PS/T.
Explicación : Intercambio entre terminales de texto, puede ser utilizado desde el F1 al F6,
desde el F7 hasta el F12 pueden ser utilizados para interfaces gráficas del sistema Operativo.
Explicación : Se utiliza para el reinicio de la interfaz gráfica, este comando puede ser utilizado
siempre y cuando estemos parados dentro de una terminal a modo gráfico, de lo contrario no tendrá
efecto alguno en un terminal a modo texto.
Shortcut : Ctrl + C
Explicación : Se utiliza para terminar un proceso de forma inmediata, se puede utilizar tanto
para una interfaz modo texto (TTY) como para una Pseudo Terminal (PTS).
Shortcut : Ctrl + Z
Explicación : Se utiliza para enviar un proceso a segundo plano, se puede utilizar tanto para
una interfaz modo texto (TTY) como para una Pseudo Terminal (PTS).
Shortcut : Ctrl + D
Explicación : Termina la sesión del usuario que inicio sesión sobre la terminal, se puede utilizar
tanto para una interfaz modo texto (TTY) como para una Pseudo Terminal (PTS).
Explicación : Se utiliza para avanzar en el buffer del sistema al momento de listar muchas líneas,
se puede utilizar tanto para una interfaz modo texto (TTY) como para una Pseudo Terminal (PTS).
Explicación : Se utiliza para avanzar en el buffer del sistema al momento de listar muchas líneas,
se puede utilizar tanto para una interfaz modo texto (TTY) como para una Pseudo Terminal (PTS).
Existe una gran cantidad de comandos (binarios del propio S.O.) destinados a obtener información
ya sea del funcionamiento actual o de volcados que generó el kernel. He preparado una selección
de los binarios más utilizados en la administración cotidiana de un sistema operativo Linux.
man comando : Muestra el manual de usuario del comando que estén consultando.
whoami : Sirve para mostrar con que usuario me encuentro logueado actualmente.
who : Muestra todos los usuarios que están logueados en el sistema operativo.
ps –ax : Variante de ps
lsmod : Muestra los módulos que están siendo usados por el kernel.
Otra fuente interesante para obtener información del sistema operativo, son los propios ficheros de
configuración. He dejado los más comunes de analizar y las rutas absolutas de donde se encuentran
almacenados.
NOTA: Las rutas pueden variar según la distribución que se esté utilizando; sin embargo, los ficheros
que son ejemplificados más abajo típicamente son encontrados en esa ruta.
Los programas del sistema pueden ser utilizados tanto de forma gráfica (GUI) como a modo texto (CLI);
existen algunos aplicativos que utilizan TUI, una especie de interfaz más intuitiva pero siempre a modo
de texto.
La administración de usuarios y grupos vía CLI agiliza los trabajos de administración, es verdad que es
requerido un nivel de experticia más elevado que solo utilizar la interfaz gráfica (GUI), pero los beneficios
en optimización de tiempos son mucho mayores, adicionalmente es necesario saber que no todo binario
de administración posee su versión en GUI.
Recuerde que usted puede utilizar la ayuda y el manual para ver más información sobre el binario a
utilizar
Mkdir : Binario utilizado para crear una carpeta sobre el sistema operativo.
Rm : Binario que es utilizado para eliminar archivos y carpetas del sistema operativo, es
posible utilizar la opción -r para aplicarlo de forma recursiva (rm -r /folder). Utilizando la sobrecarga -f
(force), eliminará sin solicitar confirmación de la acción a ejecutar (rm -rf /folder)
El ejemplo plasmado en la tabla 1 entrega permisos efectivos de RWX al usuario, R-X al grupo y sin
permisos efectivos aplicados a otros. La aplicación de ese permiso efectivos será de la siguiente
manera → chmod 750 /folder
NOTA: Usar con mesura el -r y solo si se está seguro de cómo y dónde se aplicará este binario, dado
que su aplicación puede ser nociva e invasiva para el sistema operativo, siendo la tarea de romper algo
funcional muy simple, pero en cambio, la tarea de reparar es muy laboriosa y tardía.
Chgrp : Permite cambiar solo el grupo al cual le pertenece la carpeta, la sintaxis es chgrp
grupo/carpeta, este binario también permite la aplicación de forma recursiva al igual que chown.
OBS: Se debe tener las mismas consideraciones de cuidado al utilizar CHOWN y CHGRP.
EDITORES DE TEXTO
Nano : Editor de texto basado en texto plano un tanto más amigable que vi y vim.
ADMINISTRACIÓN DE USUARIOS
usermod : Se utiliza para la modificación de usuarios, se pueden usar las siguientes opciones,
-L para bloquear la cuenta del usuario, -U para desbloquear la cuenta del usuario, podemos usar el –
aG para agregar grupos secundarios al usuario; por otro lado, la opción –G sin la a elimina toda la lista
de grupos secundarios dejando solo el último agregado como grupo, la opción -g lo que nos hace es
cambiar el grupo principal del usuario.
gropus : Este comando muestra los grupos a los cuales pertenece un usuario que
está logueado en el sistema.
Fdisk : Este binario sirve para la partición de discos, siempre debe estar apuntando
donde se encuentra el disco completo, es decir en el caso que sea un disco scsci seria /dev/sda, en
el caso que sea un disco ata /dev/hda, si es que existe más de un disco dentro del computador este
los toma como hdb,hdc si es que es un sda sería algo como sdb, sdc las particiones varían con un
número por ejemplo /dev/sda1, generalmente la primera partición es la partición del boot.
fdisk –l : Variante del comando fdisk sirve para listar las particiones que tienen en el
disco
Mount : Binario de importancia dentro del sistema operativo, sirve para dejar en
producción en tiempo real las particiones del sistema operativo, es decir una partición /dev/sda, existe
una opción importante del binario que especifica el tipo de partición (Opción → –t)
En el caso que la partición sea una etiqueta se puede utilizar como es mostrado en el ejemplo de más
abajo.
e2label : Binario para etiquetar las particiones de Linux, bastante cómodo al momento
de particionar el sistema operativo, tiene bastantes variantes según el tipo de partición que exista
dentro del sistema, es importante tener en cuenta que las particiones deben estar desmontadas para
poder aplicarles etiquetas, la forma de hacer las particiones las veremos en el ejemplo:
TUNE2FS : El comando tune2fs es bastante versátil ya que nos permite especificar cada
cuanto reinicio o cada cuanto tiempo queremos que nos haga un chequeo del sistema de archivos;
por otro lado se pueden aplicar etiquetas con el parámetro –L, permite especificar a los grupos de
usuarios que tienen acceso a la partición, se pueden especificar muchas cosas para mayor
información utilice man tune2fs
Ejemplos:
tune2fs -c 80 /dev/sda1 (cada 80 reinicios)
tune2fs –L MP3 /dev/sda3 ( aplica etiqueta MP3)
tune2fs -i 2m /dev/sda1 (cada 2 meses)
tune2fs -i 2w /dev/hda3 (cada 2 semanas)
tune2fs -i 2d /dev/sda1 (cada 2 dias)
tune2fs -l /dev/sdb1 (ver registro completo de la partición)
tune2fs -l /dev/hda3 | grep ‘Last checked’ (ver fecha del último escaneo)
tune2fs -l /dev/hda3 | grep -i check (veces que se fuerza el chequeo)
tune2fs -i 0 /dev/hda3 (desactivar chequeo)
showfsck (saber cuántas reiniciadas faltan hasta el próximo chequeo)
tune2fs -l /dev/hda3 | grep -i ‘mount count’ (lo mismo que el anterior)
e2fsck -fpD /dev/sda1 (para optimizar la partición)
FCSK : El S.O. cuando reinicia hace un chequeo del sistema de ficheros y si detecta
alguna inconsistencia ejecuta la utilidad fsck para intentar recuperarlo. Esto suele pasar cuando el
sistema se ha apagado de manera incorrecta. Si no consigue reparar el sistema por sí mismo,
arranca en modo consola y solo como lectura para poder repararlo de manera manual.
fsck es una utilidad para chequear la consistencia de un sistema de ficheros en sistemas Unix/Linux.
Se emplea para corregir los posibles errores y devolverlo a su estado normal. Debe emplearse
cuando la partición este desmontada.
Espacio de intercambio es una zona del disco (un fichero o partición) que se usa para guardar las
imágenes de los procesos que no han de mantenerse en memoria física, a este espacio se le suele
llamar swap, del inglés "intercambiar". La memoria swap sirve como una memoria ram adicional a
nuestra computadora, a pesar de que el sistema operativo puede funcionar sin un área de intercambio,
en rigor es necesaria para poder liberar la memoria ram de ser utilizada por procesos poco utilizados
así dejar la memoria ram disponible para la memoria cache de operaciones de I/O.
Como crear una partición tipo swap a partir de una partición Linux código 82
Como crear una partición tipo swap a partir de un archivo de texto plano
Esto forma parte de los conocimientos básicos y mínimos de cualquier usuario de Linux, y podemos leer
sobre ello en Permisos de ficheros del manual Seguridad en Linux y Redes. También es muy conocida
la existencia de los bits SUID y SGID, formados por los dos bits más significativos del octal más
significativo. Aplicados sobre un fichero ejecutable, permiten que el programa se ejecute como si lo
hiciera el usuario propietario (SUID) o el grupo propietario (SGID) del fichero.
StickyBit:
Cuando el sticky bit está activado en un directorio, los archivos de ese directorio solo pueden
ser cambiados por root o su propietario. Sin el bit, alguien capaz de escribir en el directorio
puede borrar o renombrar archivos. El sticky bit se encuentra comúnmente en los directorios,
como / tmp, que son con permisos de escritura.
Extracto man Linux
Permisos Adicionales:
Ya dejamos claro que los sistemas linux emplean típicamente tres permisos o modos adicionales.
Estos permisos especiales se asignan a archivos o directorios en conjunto, no a cada clase de forma
separada
• Permiso set user ID, setuid o SUID: cuando un archivo que tiene este permiso asignado se
ejecuta, el proceso resultante asumirá la ID de usuario efectiva dada a la clase de usuario. El
ejemplo típico es el cambio de una clave de usuario: ningún usuario debería poder modificar
/etc/passwd/ directamente. La única forma de poder modificarlo debería ser a través del
comando correspondiente, que necesariamente deberá tener asignado el setuid. Es decir, el
comando /usr/bin/passwd ejecutado por un usuario se ejecutará como si lo hubiese invocado
el super usuario, de manera de poder modificar /etc/passwd.
• Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado
se ejecuta, el proceso resultante asumirá la ID de grupo efectiva dada a la clase de grupo.
Cuando el setgid le es asignado a un directorio, archivos nuevos y directorios creados
debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del
comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el
grupo de archivos nuevos y directorios.
• Permiso de sticky bit (o menos común, bit pegadizo): El comportamiento típico del sticky bit
en archivos ejecutables fuerza al kernel a retener la imagen del proceso resultante luego
de su terminación. Originalmente, esta era una característica para ahorrar memoria, pero
hoy en día, los precios de las memorias han disminuido y existen mejores técnicas para
manejarlo, así que no se lo suele utilizar más para optimizaciones en archivos. En un
directorio, por el contrario, el sticky bit previene que los usuarios renombren, muevan o
borren los archivos que allí se encuentran, pertenecientes a usuarios otros que ellos
mismos, incluso si tienen permiso de escritura en el directorio. Solo el propietario del
directorio y el super usuario quedan exentos de esto.
Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten
8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada
combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del
0000 al 7777. = – específica un modo (sobrescribiendo el modo anterior)
Una de las características en los sistemas Linux actuales, especialmente en entornos corporativos, es
la posibilidad de especificar los permisos de acceso a los ficheros con mayor granularidad. Los sistemas
Linux siguen el modelo de permisos Unix tradicional segmentando el tipo de acceso en tres categorías:
También conocido como modelo UGO (User, Group, Other).Sin embargo, estas tres categorías se
revelan insuficientes en una gran cantidad de situaciones, donde desearíamos poder especificar
permisos diferenciados para varios usuarios o grupos determinados.
Aquí es donde entran en juego los permisos basados en Listas de Control de Acceso, más conocidos
como ACLs. En este sistema de permisos los ficheros no tienen un juego fijo de permisos (como en el
modelo tradicional, que tiene tres permisos y sólo tres), sino que los permisos del fichero son en realidad
una lista de Entradas de Control de Acceso (o ACEs). Cada una de estas ACEs contiene un par
(usuario/grupo, permiso) que indica un tipo de acceso determinado para un usuario o grupo, y el
conjunto de todas ellas forman la ACL que marca el tipo de acceso permitido en un archivo.
Este sistema es el utilizado entre otros, por los sistemas de ficheros NTFS (de Windows NT y
sucesores), el sistema UFS de Solaris y el sistema HFS de HP-UX.
Una vez que hemos compilado el kernel con soporte para ACLs y que hemos compilado las
herramientas necesarias para poder trabajar con ellas (además de parchear aquellas utilidades de
gestión de ficheros y sistemas de ficheros para que reconozcan las ACLs y las respeten y sepan
interpretarlas), podemos ya dedicarnos a la gestión de las propias ACLs en sí.
Ambas utilidades se hayan perfectamente documentadas en sus respectivas páginas del manual
(setfacl(1) y getfacl(1)), y podemos encontrar una pequeña introducción en la página del manual de
acl(5), vamos a ver aquí algunos ejemplos sencillos que ilustrarán el uso básico de estas
utilidades.
ACL Predeterminada
Las ACLs por defecto nos permiten indicar cuál es el juego de ACEs que queremos que se apliquen
automáticamente a los nuevos archivos y carpetas que se creen dentro de un directorio dado. Se
dice en estos casos que los permisos se heredan desde el directorio padre.
La sintaxis es idéntica a la de una ACE normal, con la diferencia de que debemos usar además la
opción -d:
opción 2
Por otro lado, las ACLs también puede configurarse de forma de entregarle permisos tanto a los
usuarios como a grupos de usuarios, para esto utilizamos el mismo comando setfacl.
opción 1 → Usuarios
opción 2 → Grupos
Si ejecutamos el comando y nos muestra el mensaje de que Operación no soportada es por qué
debemos habilitar las acl en nuestra partición. Se debe modificar con un editor de texto el /etc/fstab
y añadir la opción acl de la forma que muestra el ejemplo más abajo:
Ejemplo:
Original :
UUID=6884bdde-1ad1-4aa2-8900 / ext3 relatime,errors=remount-ro 0 1
Modificado:
UUID=6884bdde-1ad1-4aa2-8900 / ext3 acl,relatime,errors=remount-ro 0 1
Una vez modificado la opción de acl dentro del fstab solo debemos remontar la partición del disco con
el siguiente comando mount -o remount -o acl /dev/sda1 /
Sistemas Linux con gran cantidad de usuarios, como servidores de correo, servidores samba, etc.,
tarde o temprano tienen el problema de usuarios que almacenan demasiada información en sus
directorios de trabajo, pudiendo incluso en casos extremos llenar completamente discos duros
haciendo el sistema inservible. Con el uso de cuotas de disco (disk quotas) es posible limitar la
cantidad de espacio disponible para cada usuario o de manera global para todos.
Tipos de Quotas
Por Bloques (blocks): Un bloque corresponde a 1 kb y una cuota por bloques correspondería al total
de bloques que un usuario puede utilizar en el sistema. Recuerda que los archivos se guardan en
bloques de disco. Así un archivo de 100 bytes ocupará un bloque de 1kb en el disco duro.
Por Inodos (inodes): Un inodo o inode en inglés (Index Node) es un número que actúa como apuntador
para el sistema de archivos de Linux y le indica en que bloques específicos del disco duro se encuentran
los datos de un archivo. También el inodo en su referencia guarda información sobre permisos,
propietario, atributos, etc. Se podría ver en una analogía simple que un inodo es como un número de
serie único para cada archivo del sistema y a través de este número el sistema recupera sus datos
(bloques) y sus atributos (permisos, propietario, fechas, etc.).
En el caso de las cutoas, una cuota por inodos indicaría el total de inodos a los que el usuario tiene
derecho, casi representaría el total de archivos que el usuario puede crear y digo "casi" porque los
usuarios podemos crear enlaces simbólicos (ln -s) sobre archivos ya existentes que no aumentan las
cantidad de inodos. Pero por simplicidad puedes verlo como un 1 inodo = 1 archivo.
Límites de Quotas
Tanto las cuotas por bloques o por inodos, tienen límites de uso y son de dos tipos:
HARD: (Duro) Cuando se establece (para bloques o inodos), es el límite absoluto. El usuario no podrá
exceder este límite.
SOFT: (Suave) Este límite (para bloques o inodos) que es siempre menor al HARD, puede ser excedido
por el usuario, pero será constantemente advertido que el límite de uso para bloques o inodos ya ha
sido excedido. Podría verse como un límite de advertencia que le estará indicando al usuario que su
límite ya se excedió y tome medidas.
Cuando se usa el límite SOFT, dos situaciones pueden ocurrir, la primera es que NO se tenga
establecido un tiempo de gracia, y entonces el usuario podrá seguir usando bloques o inodos hasta
llegar al límite HARD que será su límite absoluto de uso.
La segunda situación es que SI se tenga establecido el tiempo de gracia, que puede ser en días, horas,
minutos o segundos. En este caso, el usuario podrá seguir usando bloques o inodos hasta que termine
el tiempo de gracia o llegue al límite HARD, cualquiera que ocurra primero.
El tiempo de gracia se puede establecer por usuario o globalmente y más adelante veremos como
establecerlo.
Las cuotas se establecen por sistema de archivos, es decir que se debe decidir en donde es más
conveniente aplicarlas ya sea bien por usuario o por grupo de usuarios.
El sistema de archivos "/algo" está listo ahora para soportar cuotas de disco. El siguiente paso es
verificar las quotas y activarlas por sistemas de archivos que soporten cuotas. Este comando crea,
verifica o repara el control de cuotas en los sistemas que lo soporten, en este caso creará el soporte
para las quotas.
Para editar las quotas a un usuario sobre la partición que posee la opción de quotas
➔ edquota -u nombreUsuario
➔ edquota -p user1 user2 user3 user4
En prácticamente todas las distribuciones de Linux se usa la versión Vixie Cron, por la persona que la
desarrolló, que es Paul Vixie, uno de los grandes gurús de Unix, también creador, entre otros sistemas
de BIND que es uno de los servidores DNS más populares del mundo.
La primera es realizar un crontab –e para el usuario que estamos actualmente logueado al sistema
operativo y aplicarle los parámetros necesarios para realizar la tarea, realizar un crontab –e
<<nombre de usuario>> para hacer un crontab a un usuario específico, más abajo se muestra como
es la sintaxis del cron.
La segunda es en el directorio /etc, donde muy seguramente encontrarás los siguientes directorios:
• [Link]
• [Link]
• [Link]
• [Link]
Si se coloca un archivo tipo script en cualquiera de estos directorios, el script se ejecutará cada hora,
cada día, cada semana o cada mes, dependiendo del directorio.
Como tercer modo de ejecutar o usar cron es a través de manipular directamente el archivo /etc/crontab.
En la instalación por defecto de varias distribuciones Linux, este archivo se verá a algo como lo siguiente:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root HOME=/
# run-parts
01 * * * * root run-parts /etc/[Link]
02 4 * * * root run-parts /etc/[Link]
22 4 * * 0 root run-parts /etc/[Link]
42 4 1 * * root run-parts /etc/[Link]
SHELL → Es el 'shell' bajo el cual se ejecuta el cron. Si no se especifica, se tomará por defecto
el indicado en la línea /etc/passwd correspondiente al usuario que este ejecutando cron.
PATH → Contiene o indica la ruta a los directorios en los cuales cron buscará el comando a ejecutar.
Este path es distinto al path global del sistema o del usuario.
MAIL TO → Es a quien se le envía la salida del comando (si es que este tiene alguna salida). Cron
enviará un correo a quien se especifique en esta variable, es decir, debe ser un usuario válido del
sistema o de algún otro sistema. Si no se especifica, entonces cron enviará el correo al usuario
propietario del comando que se ejecuta.
HOME → Es el directorio raíz o principal del comando cron, si no se indica entonces, la raíz será la
que se indique en el archivo /etc/passwd correspondiente al usuario que ejecuta cron.
Después de lo anterior vienen las líneas que ejecutan las tareas programadas propiamente. No hay
límites de cuantas tareas pueda haber, una por renglón. Los campos (son 7) que forman estas líneas
están formados de la siguiente manera:
Un asterisco * como valor en los primeros cinco campos, indicará inicio-fin del campo, es decir
todo. Un * en el campo de minuto indicará todos los minutos. Para entender bien esto de los
primeros 5 campos y el asterisco usaré mejor varios ejemplos: