Cap 5
Cap 5
5.1 Comando ls
El comando ls (del inglés list, cuya traducción es lista, listado o listar), muestra un listado con los
archivos y directorios de un determinado directorio. Los archivos y directorios cuyo nombre
comienza con . (punto) no se muestran con la instrucción ls, por lo que se suelen denominar
«archivos ocultos».
ls -a
ls -l
ls -la
4- Saber quien creo el archivo (viendo el usuario al lado de cada archivo) y con formato
largo
ls --author -l
ls -g
ls --block-size=M -l
ls --block-size=K -l
7- Ordenar por nombre teniendo en cuenta cuando se modificaron por última vez.
ls -cl
ls -lh
ls -F
46
ls -r
ls -R
ls -lS
ls --version
ls -n
ls -m
47
5.2 Comando ps
Presenta una lista con los procesos activos en el equipo, indicando:
● PID es una ID de proceso del comando en ejecución (CMD)
● TTY es un lugar donde se ejecuta el comando en ejecución
● TIME informa sobre cuánto tiempo usa la CPU mientras ejecuta el comando
● CMD es un comando que se ejecuta como un proceso actual
ps -u USUARIO
ps -A
Otra cosa que es posible es filtrar el resultado por uso de CPU o memoria. Con esto, se
puede obtener información sobre los procesos que consumen los recursos, para hacer esto
vamos a usar el parámetro -aux
ps -aux | less
Para hacer esto usando el parámetro -C, seguido del nombre o ID. Digamos que queremos
mostrar procesos de firefox. Podemos escribir:
ps -C firefox
48
5.3 Comando Kill, pkill y killall
Al matar un proceso se envía una señal de interrupción a uno o a varios procesos. Suele
usarse para finalizar su ejecución.
kill 63772
SIGINT
SIGTERM
SIGKILL
Esta señal provoca un apagado forzoso del proceso. A diferencia de las anteriores, no
puede ser ignorada ni manejada por un controlador de señales. Es la manera más segura
de matar un programa si no podemos hacerlo de las formas anteriores.
kill -9 63772
3- Pkill es una variación del comando kill. Con esta variación puedes especificar el nombre
del proceso o un patrón para encontrar un proceso:
pkill firefox
Un ejemplo de killall es
killall firefox
Aclaración: La diferencia básica entre killall y kill es que killall puede terminar el proceso
por nombre mientras el comando kill usa el pid.
49
Esto es similar a pkill. Sin embargo, killall hace una coincidencia de nombre exacto,
mientras que pkill puede hacer una coincidencia de patrón. Esta es una de las razones por
las que killall es más seguro en comparación con pkill.
50
5.4 Comando Find
find es un comando común en sistemas Unix que se utiliza para encontrar archivos
en un determinado directorio a partir de diversas reglas de búsqueda, tales como
nombre exacto de archivo, fecha de creación, tamaño, permisos, etc.
Estructura
touch /home/nk2/Documentos/buscar.txt
find / -name "buscar.txt"
-name busca pero distingue entre mayúsculas y minúsculas. Si no estas seguro o no sabes
si el archivo a buscar tiene o alguna letra en mayúscula o minúscula, es recomendable usar
-iname que busca sin distinguir:
3- Buscar y eliminar
f – archivo normal
d – directorio o carpeta
l – enlace simbólico
c – dispositivos de caracteres
b – dispositivos de bloque
51
Buscar archivos por su fecha de acceso y fecha de modificación, hay 3 registros de tiempo
que podemos usar:
Tiempo de acceso (-atime) – Fecha más reciente en que el archivo fue leído o escrito.
Hora de cambio (-ctime) – Fecha más reciente en que se actualizaron los metadatos del
archivo.
5.1- Esta opción debe usarse con un número. Este número especifica el número de días
desde que se accedió, modificó o cambió el archivo. La forma más sencilla de buscar
archivos por tiempo es:
find / -atime -1
Este ejemplo se localizaran todos los archivos a los que se accedió hace un día desde el
momento actual. Por lo tanto se listaran todos los archivos que fueron leídos y/o escritos
desde el día anterior.
5.2- Podemos hacer que nuestras consultas sean más precisas con los signos más (+) y
menos (–) precediendo al número de días. Por ejemplo:
find / -mtime +2
Esto listará todos los archivos que tienen un tiempo de modificación de más de dos días.
5.3- Para buscar todos los archivos cuyos metadatos de inodo se actualizaron hace menos
de un día, ejecuta lo siguiente:
find / -ctime -1
5.4- Vamos a ver argumentos adicionales además de estos 3 que también están
relacionados con las búsquedas por fecha. El argumento -mmin buscará archivos que se
modificaron hace menos de un minuto.
find / -mmin -1
52
k: Kilobytes
M: Megabytes
G: Gigabytes
8.1- Buscar archivos que tengan permisos 644, que corresponde a archivos de lectura y
escritura.
8.2- Mostrará todos los archivos que tengan al menos el permiso 644.
find / -empty
Vamos a crear una estructura de carpetas y archivos para realizar búsquedas avanzadas:
mkdir /home/nk2/Prueba
cd /home/nk2/Prueba
mkdir /home/nk2/Test1
53
mkdir /home/nk2/Test2
mkdir /home/nk2/Test3
touch /home/nk2/Test1/texto1.txt
touch /home/nk2/Test2/texto2.txt
touch /home/nk2/Test3/texto3.txt
cd /home/nk2/Prueba
54
5.5 Comando Locate
El comando locate es otra forma de buscar un archivo en Linux, este comando locate se
encarga de realizar las búsquedas haciendo uso de una base de datos donde se encuentra
toda la información y locate la consulta a ella directamente.
/var/lib/mlocate/mlocate.db
3- Una vez instalado locate en el sistema, vamos a ejecutar el comando para actualizar la
base de datos:
updatedb
locate -b "texto1.txt"
5- Locate permite saber cuántas veces coincide una palabra clave de búsqueda en la base
de datos, para ello, vamos a usar el parámetro -c en el comando, donde -c es igual a
conteo:
mkdir /home/nk2/Documentos/Prueba
locate -c Prueba
Locate a veces puede mostrar archivos que han sido eliminados. Esto se debe a que el
comando locate busca en la base de datos principal del sistema operativo Linux. Si esa
base de datos no se actualiza, incluso los archivos eliminados pueden aparecer en los
resultados de búsqueda.
55
5.6 Comando TOP
El comando top nos ayuda a conocer los procesos de ejecución del sistema (y más cosas)
en tiempo real y es una de las herramientas más importantes para un administrador. Nos
mostrará una gran cantidad de datos que se actualizan cada 3 segundos.
3- %Cpu(s): 1,7 us, 0,3 sy, 0,0 ni, 98,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
Línea Número 3, nos muestra los porcentajes de uso del procesador diferenciado por el uso
que se le de.
4- KiB Mem: 2051776 total, 988684 used, 1063092 free, 55764 buffers
Línea número 4, hace referencia al uso de la memoria física del equipo.
● Memoria total.
● Memoria utilizada.
● Memoria libre.
● Memoria utilizada por buffer.
5- KiB Swap: 1012732 total, 0 used, 1012732 free. 513300 cached Mem
56
Línea número 5, utilización de la memoria virtual
● Memoria total.
● Memoria utilizada.
● Memoria libre.
● Memoria en caché.
7- Podemos utilizar las siguientes teclas para ampliar el uso de TOP, esto es mientras está
corriendo:
57
5.7 Comando Uname
El comando uname proviene de la abreviatura Unix Name. Es una herramienta de línea de
comandos cuyo fin es el de mostrar información del sistema operativo como la versión del
mismo, kernel y detalles del equipo entre otras cosas.
5- Muestra el nombre de nuestro equipo (el que asignamos al momento de instalar el SO).
uname -n
7- Muestra toda la información sobre el sistema que se está utilizando. Digamos que este
combina los anteriores.
uname -a
8- Da información del procesador. (en este caso al ser una virtual aparece como unknown)
uname -p
58
5.8 Comando LSOF
Lsof es una potente herramienta presente en la terminal de Linux sea cual sea la
distribución, y su función es mostrar los archivos abiertos en el sistema. Nos permite saber
de forma rápida, qué archivos está utilizando un determinado proceso (PID) o usuario e
información adicional como el puerto utilizado por dichos servicios/ficheros, sockets en uso,
etc.
lsof -p PID
Ejemplo, vamos a listar los ficheros abiertos de un PID perteneciente a Firefox, también
veremos los sockets y puertos en los que escucha el proceso:
Para evitar el típico fallo de no poder desmontarlo porque la partición o el dispositivo está en
uso: lsof /partición
lsoft /dev/mapper/cl-root
lsof -u nk2
lsof -i
5- Si no queremos ver la actividad en tiempo real sino una foto del momento en el que
ejecutamos el comando, los parámetros a especificar son:
lsof -P -i -n
59
6- Comprobar servicios/puertos que están escuchando
lsof -i -nP
lsof -c top
lsof +D /etc
man lsof
60
5.9 Editor de texto nano
Nano (oficialmente GNU nano) es el editor por defecto de distribuciones Linux como Debian,
si bien existe vi o vim, para algunos usuarios resulta un poco complejo.
Vamos a ver como usar nano, junto con los atajos del teclado que nos serán de mucha
utilidad.
La siguiente lista muestra algunas combinaciones con tecla CTRL, ALT y la tecla ESC más
usuales.
Comando Función
61
Alt+G Va a una línea.
Ejemplos avanzados
nano -v nano.txt
3- Abrir un archivo de configuración del sistema utilice la opción -w, esto evita que las líneas
muy largas se ajusten al tamaño del shell, lo que produce problemas de visualización y
eventualmente, errores en la edición:
nano -w archivo.txt
62
5.10 Editor VI/VIM
El editor vi es un editor de texto que maneja en memoria el texto entero de un archivo. Es el
editor clásico de UNIX (se encuentra en todas las versiones de Linux). Puede usarse en
cualquier tipo de terminal con atajo de teclas, aunque puede ser un poco difícil de usar al
utilizarlo por primera vez.
Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto Vi, presente en
todos los sistemas UNIX. Su autor, Bram Moolenaar, presentó la primera versión en 1991,
fecha desde la que ha experimentado muchas mejoras. La principal característica tanto de
Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para
realizar ciertas operaciones, lo que los diferencia de la mayoría de editores comunes, que
tienen un solo modo en el que se introducen las órdenes mediante combinaciones de teclas
o interfaces gráficas. Esta guía servirá tanto para vi como para vim.
MODOS DE VI:
63
Comando Acción
Comando Acción
Es importante destacar que todo lo que se borra queda almacenado en un buffer (área
temporal de memoria), de modo que si se borró algo por error, puede volver a escribirse (si
se hace antes de realizar otros cambios, es decir, inmediatamente luego de eliminar el texto
por error. Esto se hace simplemente ejecutando el comando p.
Esto implica mover partes del archivo de un lugar a otro del mismo. Para esto se debe:
● Cortar el texto que se desea mover utilizando alguno de los comandos usados para
borrar texto. (para cortar una línea presionamos dd)
● Mover el cursor (con alguno de los comandos utilizados para desplazar el cursor en
el texto) hasta el lugar donde se desee pegar el texto.
● Pegar el texto con el comando p en minúscula pegará hacia abajo. Con P mayúscula
pegará el contenido arriba de la línea del cursor.
En este caso lo que se hace es repetir partes del texto en otro lugar del archivo.
64
● Utilizar el doble y (yy), cuya función es copiar la línea donde se está el cursor.
● Mover el cursor (con alguno de los comandos utilizados para desplazar el cursor en
el texto) hasta el lugar donde se desee pegar el texto.
● Pegar el texto con el comando p en minúscula pegará hacia abajo. Con P mayúscula
pegará el contenido arriba de la línea del cursor.
Comando Acción
:%s/Curso/Curso2/gc
Explicación:
:%s Para buscar y reemplazar
/Curso palabra a reemplazar
/Curso2 nuevo término a utilizar
/gc
● g: se realizará el reemplazo con todas las coincidencias.
● c: solicita confirmación.
En este modo se ingresa el texto deseado, usando las opciones por ejemplo i. Para pasar
de modo texto a modo comando nuevamente se debe presionar la tecla ESC.
65
5.10.3 MODO LÍNEA:
Para ingresar al modo línea desde el modo comando, se debe utilizar alguna de las
siguientes teclas:
● /
● ?
● :
Para volver al modo comando desde el modo última línea, se debe apretar la tecla ENTER
(al finalizar el comando) o la tecla ESC (que interrumpe el comando).
Comando Acción
Para ver los nombres de los archivos que están abiertos en el modo comando hacemos:
:buffers
66
man vi
67
5.11 Comando tar
Tar es una herramienta de línea de comandos utilizada para crear y manipular archivos de
almacenamiento en sistemas Linux y Unix. Tar puede extraer desde tar, pax, cpio, zip, jar,
ar, imágenes ISO 9660 y por supuesto, puede crear los archivos respectivos.
1- Comprimir archivos
4- Explicación:
c: Crear
z: gzip
v: verbose
f: nombreArchivo
x: Extraer
t: Listar
68
5.12 Comando systemctl
Los servicios, o demonios como también son conocidos en Linux, se gestionan mediante los
demonios Init o Systemd.
El primer servicio que inicia el Kernel de Linux es Init o Systemd. Seguidamente, init o
systemd son los encargados de cargar el resto de servicios del sistema operativo. Por lo
tanto Init o Systemd son los padres de todos los demonios o servicios que se inicializan en
nuestro sistema operativo.
Init y Systemd siempre están activos hasta que el sistema se apaga. Mientras estos
servicios estén activos los podremos usar para administrar los servicios que se inician y
paran en nuestro ordenador o servidor.
El comando systemctl es una herramienta que sirve para poder administrar los distintos
servicios que corren en nuestra distribución. Es el reemplazo a una herramienta que
conocíamos como SysVinit (SysVinit es uno de los más antiguos y vigentes Administradores
de sistemas y servicios para Sistemas basados sobre Linux. Todavía es muy usado sobre
muchas de las Distros GNU/Linux de trayectorias, y nuevas, como Devuan.).
La gran mayoría de los sistemas Linux modernos ya usan systemctl para administrar
systemd.
Para a ver cómo trabajar con esta herramienta, usando el servicio cron para mostrar el
funcionamiento.
systemctl
3- Iniciar un servicio
4- Parar un servicio
5- Reiniciar un servicio
69
7- Deshabilitar un servicio
El reinicio del servicio se utiliza para parar y volver a iniciar el servicio, cada vez que
ejecutamos reiniciar, los usuarios existentes se desconectarán y se creará un nuevo PID
siendo el parámetro restart muy disruptivo, mientras que reload recargará sin dejar de dar
servicio.
70
5.13 Comandos para la administrar memoria RAM
1- Free
El primero en la lista es el clásico Free sumado a -m para dar un detalle, total, usado y libre,
también muestra el cache.
free -m
2- MEMINFO
Por medio de este comando podemos visualizar todo lo relacionado a la memoria, dentro
podemos encontrar subrayados los que se miran con más frecuencia, aunque haciendo uso
del agregado | grep MemFree nos dará el resultado de solo lo que pedimos.
cat /proc/meminfo
3- VMSTAT
Vamos a ver el comando vmstat para informar las estadísticas de memoria virtual y
proporcionar información sobre eventos del sistema, como carga de CPU, paginación,
número de cambios de contexto, interrupciones de dispositivo y llamadas del sistema.
71
Los campos relacionados al CPU son:
us: El porcentaje de tiempo que el CPU ejecutó código de nivel del usuario.
sy: El porcentaje de tiempo que el CPU ejecutó código de nivel del sistema.
id: El porcentaje de tiempo que el CPU estaba desocupado.
wa: Esperas de E/S.
st: Tiempo robado (stolen) de una máquina virtual. Para Linux anterior a 2.6.11 era
desconocido.
4- Liberar memoria
72
5.14 Crear un script simple
Para crear un script, vamos a hacer uso de un editor de texto, si siguen el blog verán que a
mi me gusta usar nano, pero existen muchos otros como vi, vim, gedit, etc. Solo debemos
considerar 2 cosas importantes al hacerlo:
Guardar el archivo con un nombre, recomiendo que sea descriptivo del servicio, y debe
terminar con extensión .sh.
Para que el sistema sepa que es un script debemos colocar como primera línea #!/bin/bash
al principio del mismo.
Por ejemplo vamos a hacer un script, que limpie la memoria cache de nuestro Linux, sin
necesidad de reiniciar lo voy a llamar limpiar_memoria.sh
nano limpiar_memoria.sh
Ahora vamos a valernos de los comandos para liberar memoria, así que pegamos lo
siguiente:
#!/bin/bash
sync && echo 3 > /proc/sys/vm/drop_caches
Guardamos, si usamos nano F2, y solo falta darle permisos de ejecución, dado que si no el
script nunca correrá.
chmod +x limpiar_memoria.sh
Listo el script, como verán es bastante simple de hacer y podemos lanzarlo para probar
como funciona con sh script o ./script.sh
73
5.15 Cron y Crontab
Cron y Crontab son 2 elementos muy importantes a la hora de programar tareas y que se
ejecuten sin que tengamos que estar pendientes de su estado, en Windows existe su
equivalente llamado programador de tareas. Veamos las diferencias:
Cron es un administrador regular de procesos que corre en segundo plano (también llamado
demonio) permite ejecutar procesos a intervalos regulares (por ejemplo, cada minuto, día,
semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se
especifican en el fichero crontab.
Crontab es un simple archivo de texto, donde se guarda una lista de comandos a ejecutar
en un tiempo especificado por el usuario. Crontab verificará la fecha y hora en que se debe
ejecutar un script o un comando, también mirara los permisos de ejecución y se realizará en
background (segundo plano). Generalmente cada usuario del sistema posee su propio
fichero Crontab. Se considera que el ubicado en la carpeta etc pertenece al usuario root.
Para generar el archivo propio, cada usuario deberá hacer uso del comando crontab (dicho
comando es igual para cada usuario).
Teniendo un script creado y habiendo entendido que cron es el servicio y crontab el archivo
de configuración, vamos a programar una tarea que limpie la memoria.
Antes que nada vamos a ver como funciona crontab y sus parámetros, teniendo en cuenta
que voy a hacer todo con permisos de root:
crontab -l
crontab -e
3- Define el directorio de crontab del usuario (este debe tener permisos de escritura y
ejecución del usuario) con -c carpeta
crontab -c dir
crontab -u usuario
crontab -l -u root
crontab -e usuario2
crontab -r -u usuario
74
Las tareas que crearemos, requieren una sintaxis determinada. Tienen 5 asteriscos al
principio seguidos del comando a ejecutar. Veamos en detalle para qué sirve cada cosa.
* * * * * /root/limpiar_memoria.sh
Minutos: de 0 a 59.
Horas: de 0 a 23.
Día del mes: de 1 a 31.
Mes: de 1 a 12, siendo 1 Enero … 12 Diciembre.
Día de la semana: de 0 a 7, siendo 0 el domingo, también es posible utilizar las tres
primeras letras del nombre del día en inglés, como Sun, Mon, etc
6- Con los operadores es posible especificar varios valores en un campo; existen tres
posibles valores:
El asterisco (*): Este operador abarca todos los valores posibles; un asterisco en un campo
minutos es igual a ejecutar el script cada minuto.
la coma (,): Este operador permite especificar una lista de valores; por ejemplo si queremos
ejecutar un comando los lunes y miércoles: «1,3» en el campo de los días.
El guión (-): Este operador especifica una serie de valores de manera agrupada con un cota
inferior y una superior; por ejemplo si quisiéramos ejecutar un comando de lunes a viernes
podríamos colocar el siguiente valor en el campo día: «1-5», que es equivalente a 1,2,3,4,5.
crontab -e
Ejemplo 1
* * * * * /root/limpiar_memoria.sh
Ejemplo 2
40 * * * * /root/limpiar_memoria.sh
Ejemplo 3
75
30 7 1 10 * /root/limpiar_memoria.sh
Ejemplo 4
0 3 * * * /root/limpiar_memoria.sh
Ejemplo 5
0 22 * * * /root/limpiar_memoria.sh
Ejemplo 6
30 2 * * 1-5 /root/limpiar_memoria.sh
Ejemplo 7
5 2 * * 1-5 /root/limpiar_memoria.sh
9- Logs de cron
Podemos visualizar los logs de cron en /var/log/syslog, pero vamos a ir un poco más allá y
verificar si la tarea que creamos esta corriendo y ejecutándose.
76
5.16 Programar tareas con el comando AT
El comando at utiliza el daemon atd – Sirve para programar una tarea para que se ejecute
una sola vez. Nos permite programar tareas de forma similar a cron, pero en lugar de
programar tareas repetitivas se usa para programar tareas que ejecutamos una vez a una
determinada hora.
apt install at -y
4- Programar un trabajo
at 10:00 PM
sh /root/limpiar_memoria.sh
atq
o
at -l
atrm 2
77
at -d 3
atq
at -c 1
6- Ejemplos
at 10:00 AM sun
6.3- Programar una tarea a las 10:00 AM del próximo 5 de junio de 2021
at 10:00 AM 6/5/2021
at 10:00 AM 6.5.2021
6.4- Programar una tarea a las 11 de la mañana el mismo día del próximo mes
at 11:00 AM tomorrow
at now + 1 hour
at now + 30 minutes
at now + 1 week
at now + 2 weeks
at now + 1 year
78
at now + 2 years
at midnight
7- Aclaración
Hora:
9pm
20:45
now (ahora)
noon (12pm)
midnight (00:00)
Fecha:
today (hoy)
tomorrow (mañana)
Sep 10 (10 de septiembre)
Jan 5 (5 de enero)
Incremento:
+minutes
+hours
+days
+weeks
+months
+years
(Para el incremento también se aceptan las formas singulares minute, hour, day, week,
month, y year). El incremento se utiliza para «sumar» una cierta medida de tiempo al
momento indicado para la ejecución de la tarea.
79
5.17 Memoria SWAP
Cuando la memoria RAM llega al límite y no queda más espacio, el sistema operativo suele
matar procesos, comenzando por aquellos que no afecten el funcionamiento del sistema,
pero si nuestro servidor web mata servicios como apache, el sitio web no funcionará lo que
será muy disruptivo.
La memoria swap es un espacio de intercambio, que bien puede ser una partición lógica en
el disco o simplemente un archivo. En lugar de utilizar espacio en memoria RAM, el swap
utiliza espacio en disco duro para almacenar datos temporales, reduciendo así el uso de la
RAM. Este proceso de descargar la memoria ram al disco se denomina swapping.
El conjunto combinado de memoria RAM y swap crean una memoria virtual mayor a la que
trae una pc o servidor por defecto. Así, el Kernel de Linux puede ejecutar procesos que
requieren de más memoria de la que se encuentra físicamente disponible.
El valor devuelto a menudo es 60, que es el valor por defecto de swap. Si queremos
reducirlo escribiremos:
Cuidado, esto durará mientras no reiniciemos el PC, si se reinicia los valores vuelven a 60
nuevamente por defecto. Pero si vemos que con la reducción de swappiness se obtuvo un
mejor rendimiento, podemos hacer permanente este valor abriendo el archivo de
configuración con el comando:
80
Y escribiendo en la última línea:
vm.swappiness=10
swapon -s
cat /proc/swaps
2- Desactivar la swap
swapoff -v /dev/sda5
nano /etc/fstab
Eliminamos lo siguiente:
cfdisk
swapon -s
dd: comando para usar la aplicación "duplicate date" con el fin de crear un archivo de swap.
81
if=/dev/zero: Indicamos que como fichero de origen (input file) se debe usar el dispositivo
/dev/zero, dicho dispositivo /dev/zero genera una cadena de ceros con las características
que definiremos con los comandos bs y count.
of=/swapfile: indicamos que se genere un archivo con nombre swapfile en la raíz de nuestro
linux. Este archivo será generado por el dispositivo /dev/zero y estará formado por una
cadena de ceros con las características que definiremos con los comando bs y count.
bs=1M: Definimos que la información que se escribe en el fichero /swapfile sea en bloques
de 1 MegaByte.
Por lo tanto ejecutando el comando creamos el archivo de swap en /swapfile que ocupará 2
GB y estará formado por 2048 bloques de 1MB. (2048 x 1 = 2GB).
3.1- Agregamos el archivo swap a fstab para que se inicie con el sistema.
nano /etc/fstab
4- Verificar
swapon -s
1.1- Agregamos el archivo swap a fstab para que se inicie con el sistema.
nano /etc/fstab
82
1.2- Verificamos
swapon -s
Vemos que la partición de Swap /dev/sda5 tiene una prioridad más alta que el archivo
/var/swap (-2 Versus -3). Por lo tanto la primera Swap que se usará será la /dev/sda5 y
cuando esté completamente llena empezará a usarse el archivo de swap /swapfile.
2- Establecer prioridad
swapon -s
free
83
5.18 Sudo
Utilizar el comando sudo (super user do, por sus siglas en inglés) nos asegura poder otorgar
privilegios root —temporalmente— a un usuario. Esta es la forma recomendada y la mejor
práctica para ejecutar acciones con privilegios elevados. La gran diferencia, es que los
comandos precedidos con sudo son ejecutados por el propio usuario, no por root.
1- Instalación
Debian
apt install sudo
CentOS
dnf install sudo
nano /etc/sudoers
visudo
(usuario:grupo): Especificamos los usuarios y los grupos que podrán usar el usuario de
sudo cuando ejecuta los comandos. Para poder ejecutar comandos con un usuario y grupo
84
específico tendremos que usar los comandos sudo -u y sudo -g. Si no indicamos ningún
usuario ni ningún grupo se usará el usuario root y el grupo root.
5- Dar permisos de usuario root a un usuario normal para ejecutar cualquier comando en
nombre de cualquier usuario. Esta configuración es utilizada por el 99% de usuarios
domésticos en sus equipos.
Vamos a editar el archivo /etc/sudoers.
visudo
Introduciendo esta línea damos permiso al usuario nk1 para que en el equipo debian pueda
ejecutar cualquier comando en nombre del usuario root.
A diferencia del caso anterior en este caso el usuario nk1 únicamente podrá usar comando
sudo en el equipo debian y únicamente lo podrá hacer en nombre del usuario root.
7- Dar permisos para que todos los usuarios de un grupo tengan permisos de administrador
Introduciendo esta línea damos permisos a todos los usuarios del grupo nk1 para que en
cualquier equipo pueda ejecutar cualquier comando en nombre del usuario root.
8- Dar permisos a un usuario para que únicamente pueda usar solo los comandos que se le
permita.
Con este comando damos permiso al usuario nk1 para que en cualquier equipo pueda
cambiar la contraseña de cualquier usuario exceptuando la contraseña del usuario root.
85
durante un período de 5 minutos que es por defecto. A veces se considera que este período
de gracia es mucho tiempo y representa una brecha de seguridad.
Defaults:ALL timestamp_timeout=0
Defaults:ALL timestamp_timeout=2
Así el usuario nk1 podrá ejecutar cualquier comando con sudo sin necesidad de introducir
ninguna contraseña.
11- En el caso que quisiéramos que un usuario solo pudiera usar determinados comandos
sin tener que utilizar contraseña podríamos reemplazar el comando anterior por el siguiente:
De este modo el usuario nk1 podría gestionar los paquetes del equipo y apagar el equipo
sin necesidad de introducir ninguna contraseña. Para el resto de tareas de administrador
tendría que introducir la contraseña.
12- Configurar sudo para limitar los intentos que un usuario tiene para adivinar la
contraseña
Defaults:ALL passwd_tries=2
86
En Debian y distros derivadas: /var/log/auth.log
En Fedora y distros derivadas: /var/log/secure
Si usamos Arch y distros derivadas: /var/log/sudo-io
En CentOS: /var/log/secure
journalctl _COMM=sudo
Defaults logfile=/var/log/sudo
less /var/log/sudo
87