Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

LPIC 102 - EXAM

Gestion usuarios

Contraseñas, usuarios y grupos
/etc/passwd
nombre_usuario:contraseña:UID:GID:información:directorio_home:shell
/etc/shadow
nombre_usuario:contraseña_encriptada:última_modificación:minimo:maximo:aviso:inactivo:expiración:reservado
/etc/group
nombre_grupo:contraseña:GID:lista_de_usuarios
Useradd
ParámetroNota
-cCustom comments
-dCustom home
-eDate disable user
-fPassword expire time until disable
-gGID
-GSecondary groups
-kSkeleton path
-mCreates home if it does no exists
-MNot create home
-sShell
-uUID
Passwd
$ passwd -S # O passwd -status
carol P 12/07/2019 0 99999 7 -1
CampoNota
P​/L​/NPPassword, Locked, NoPass
12/07/2019Último cambio pass
0Minima edad cambio pass
99999Máxima edad
7Warning period
-1Periodo inactividad antes bloqueo
OpcionesNota
-SStatus
-lLock
-uUnlock
Chage
$ chage -l israel
Last password change					: Apr 17, 2025
Password expires					: never
Password inactive					: never
Account expires						: never
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7
OpcionesNota
-m 5 userMinimo días entre cambios pass
-M 30 userPass expiration
-d 10 userCambiar el numero de dias pass changed. 0 fuerza cambio pass next login
-W 10 userWarning period
-I 10 userDias inactividad antes de ser lock
Log users
$ last
israel   tty7         :0               Sun Jun 29 08:13    gone - no logout
reboot   system boot  6.8.0-62-generic Sun Jun 29 08:12   still running
israel   tty7         :0               Sat Jun 28 18:30 - 23:07  (04:36)
reboot   system boot  6.8.0-62-generic Sat Jun 28 18:30 - 23:07  (04:36)
israel   tty7         :0               Sat Jun 28 12:39 - 14:40  (02:01)

$ who
israel   tty7         2025-06-29 08:13 (:0)

$ w
 07:40:18 up  1:27,  1 user,  load average: 2,20, 1,94, 1,89
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU  WHAT
israel            -                08:13    1:26m  0.00s  0.05s lightdm --session-child 13 20
ComandoNota
lastListar los últimos accessos
whoUsuarios activos conectados
wLo mismo que who​ pero con más info

Getent

  • passwd​: Para consultar la base de datos de usuarios.
  • group​: Para consultar la base de datos de grupos.
  • hosts​: Para consultar la base de datos de nombres de host.
  • services​: Para consultar la base de datos de servicios de red.
  • protocols​: Para consultar la base de datos de protocolos de red.

Especificar BBDD: getent -s files hosts aaa.com

Nsswitch

El archivo de configuración es /etc/nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd:         files systemd
group:          files systemd
shadow:         files systemd
gshadow:        files systemd

hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
ConfiguraciónNota
[!UNAVAIL=return]Si el servicio está down, dejar de buscar en el resto
[result=action]Realizar resultado si se obtiene result
[NOTFOUND=return]Si la busqueda funciona, pero no encuentra resultado. Stop

/etc/resolv.conf

ComponenteNota
nameserverDNS server IP
searchAñade dominio a los hosts em ñas busquedas
domainDefine dominio local
optionAñadir opciones como timeout:3

Cron

* * * * * comando_a_ejecutar

Los cinco primeros campos representan el tiempo y tienen el siguiente significado:

  1. Minuto: (0-59) El minuto en que se ejecutará el comando.
  2. Hora: (0-23) La hora en que se ejecutará el comando (en formato de 24 horas).
  3. Día del mes: (1-31) El día del mes en que se ejecutará el comando.
  4. Mes: (1-12) El mes en que se ejecutará el comando.
  5. Día de la semana: (0-7) El día de la semana en que se ejecutará el comando, donde 0 y 7 representan el domingo.
Ejemplos de programación
  1. Ejecutar un comando cada minuto:

    * * * * * comando_a_ejecutar
    
  2. Ejecutar un comando a las 3:30 AM todos los días:

    30 3 * * * comando_a_ejecutar
    
  3. Ejecutar un comando todos los lunes a las 5 PM:

    0 17 * * 1 comando_a_ejecutar
    
  4. Ejecutar un comando el 1 de cada mes a la medianoche:

    0 0 1 * * comando_a_ejecutar
    
  5. Ejecutar un comando cada 15 minutos:

    */15 * * * * comando_a_ejecutar
    
  6. Ejecutar un comando a las 10 AM el primer día de cada mes:

    0 10 1 * * comando_a_ejecutar
    
Caracteres especiales
  • **Asterisco (**​ *) : Representa "cada" unidad de tiempo. Por ejemplo, *​ en el campo de minutos significa "cada minuto".
  • **Barra (**​ /) : Se utiliza para especificar incrementos. Por ejemplo, */5​ en el campo de minutos significa "cada 5 minutos".
  • **Coma (**​ ,) : Se utiliza para separar múltiples valores. Por ejemplo, 1,2,3​ en el campo de días del mes significa "el 1, 2 y 3 de cada mes".
  • **Guion (**​ -) : Se utiliza para especificar un rango. Por ejemplo, 1-5​ en el campo de días de la semana significa "de lunes a viernes".
Edición del crontab
crontab -e
Visualización de tareas programadas
crontab -l
Allow y deny

Los archivos cron.allow​ y cron.deny​son utilizados en sistemas Unix y Linux para controlar el acceso a la funcionalidad de cron, que permite a los usuarios programar tareas automáticas. Estos archivos determinan qué usuarios pueden o no pueden usar el sistema de cron.
La ruta es /etc/cron.allow​ y /etc/cron.deny

cron.conf
# Configuración global para cron

# Permitir que solo ciertos usuarios ejecuten cron
ALLOW_USERS=usuario1,usuario2

# Deshabilitar el registro de cron
NOLOGGING=true

# Establecer el directorio de trabajo predeterminado
DEFAULT_DIR=/var/spool/cron

Systemd

1. **Service Units (**​ .service)
  • Representan servicios que se ejecutan en segundo plano.
  • Se utilizan para iniciar, detener y gestionar procesos.
  • Ejemplo: httpd.service​ para el servidor web Apache.
2. **Socket Units (**​ .socket)
  • Representan sockets de red o de sistema que pueden ser utilizados por servicios.
  • Permiten la activación bajo demanda de servicios cuando hay actividad en el socket.
  • Ejemplo: ssh.socket​ para el servicio SSH.
3. **Target Units (**​ .target)
  • Agrupan otras unidades y se utilizan para organizar el inicio de servicios.
  • Permiten gestionar el arranque de múltiples servicios como un solo grupo.
  • Ejemplo: multi-user.target​ agrupa servicios necesarios para un entorno de múltiples usuarios.
4. **Mount Units (**​ .mount)
  • Representan puntos de montaje de sistemas de archivos.
  • Se utilizan para montar y desmontar sistemas de archivos en el arranque o bajo demanda.
  • Ejemplo: home.mount​ para montar el directorio /home​.
5. **Automount Units (**​ .automount)
  • Se utilizan para montar sistemas de archivos automáticamente cuando se accede a ellos.
  • Permiten la activación bajo demanda de puntos de montaje.
  • Ejemplo: media-usb.automount​ para montar dispositivos USB automáticamente.
6. **Timer Units (**​ .timer)
  • Representan temporizadores que pueden activar otras unidades (generalmente servicios) en intervalos específicos.
  • Se utilizan como una alternativa a cron​ para programar tareas.
  • Ejemplo: backup.timer​ para realizar copias de seguridad periódicas.
7. **Path Units (**​ .path)
  • Monitorean cambios en el sistema de archivos y pueden activar otras unidades en respuesta a esos cambios.
  • Se utilizan para ejecutar servicios cuando se crean, eliminan o modifican archivos o directorios.
  • Ejemplo: watch-directory.path​ para activar un servicio cuando se modifica un directorio específico.
8. **Slice Units (**​ .slice)
  • Se utilizan para agrupar y gestionar recursos del sistema, como CPU y memoria, para un conjunto de servicios o procesos.
  • Permiten la gestión de recursos de manera jerárquica.
  • Ejemplo: user.slice​ para agrupar todos los procesos de un usuario.
9. **Scope Units (**​ .scope)
  • Representan procesos que son gestionados por systemd​, pero que no son iniciados por él.
  • Se utilizan para agrupar procesos que son iniciados fuera de systemd​, como aquellos iniciados por el usuario.
  • Ejemplo: un grupo de procesos iniciados por un entorno gráfico.
Manejo units
systemctl list-units --state active --type service
sudo systemctl disable UNIT --now

At

El comando at​ en Linux se utiliza para programar la ejecución de comandos o scripts en un momento específico en el futuro.

  1. Programar un comando para que se ejecute a una hora específica:

    at 15:00
    

    Después de ejecutar este comando, puedes escribir el comando que deseas ejecutar a las 15:00 y luego presionar Ctrl+D​ para finalizar.

  2. Programar un comando para que se ejecute en 10 minutos:

    echo "comando_a_ejecutar" | at now + 10 minutes
    
  3. Programar un script para que se ejecute mañana a las 8 AM:

    echo "/ruta/al/script.sh" | at 08:00 tomorrow
    
  4. Ver las tareas programadas con at​:

    atq
    

    Este comando muestra una lista de las tareas programadas para el usuario actual.

  5. Eliminar una tarea programada:

    atrm [número_de_tarea]
    

    Donde [número_de_tarea]​ es el número que aparece en la lista de atq​.

  • Permisos: El uso de at​ puede estar restringido por los archivos /etc/at.allow​ y /etc/at.deny​. Si at.allow​ existe, solo los usuarios listados en él pueden usar at​. Si at.deny​ existe, los usuarios listados en él no pueden usar at​.
  • Salida: La salida de los comandos ejecutados por at​ se envía al correo del usuario que programó la tarea

Hora y fecha

timedatectl

$ timedatectl
               Local time: Sat 2025-06-28 18:12:10 CEST
           Universal time: Sat 2025-06-28 16:12:10 UTC
                 RTC time: Sat 2025-06-28 16:12:10
                Time zone: Europe/Madrid (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

tzselect

$ tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Asia
 5) Atlantic Ocean
 6) Australia
 7) Europe

/etc/localtime​ En un symlink. Se puede usar para cambiar la zona de forma manual

$ ls -la /etc/localtime 
lrwxrwxrwx 1 root root 33 Apr 17 19:53 /etc/localtime -> /usr/share/zoneinfo/Europe/Madrid

Idioma

El idioma y la codificación de caracteres se llaman locales. $LANG​ contiene esta información. Ejemplo de portugues de brasil: pt_BR.UTF-8

$ cat /etc/locale.conf 
LANG="en_US.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"

/etc/locale.conf​ Contiene la definición de las variables. Se pueden añadir más variables a la configuración:

LC_TIME	# Establece formato de dia y hora
LC_ALL	#Sobre-escribre todas las variables

Networking

La defición de interfaces se encuentra en /sys/class/net

drwxr-xr-x  2 root root 0 Jun 28 22:41 .
drwxr-xr-x 84 root root 0 Jun 28 18:30 ..
lrwxrwxrwx  1 root root 0 Jun 28 18:30 eno1 -> ../../devices/pci0000:00/0000:00:1f.6/net/eno1
lrwxrwxrwx  1 root root 0 Jun 28 18:30 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx  1 root root 0 Jun 28 18:30 lxcbr0 -> ../../devices/virtual/net/lxcbr0
lrwxrwxrwx  1 root root 0 Jun 28 18:30 virbr0 -> ../../devices/virtual/net/virbr0
lrwxrwxrwx  1 root root 0 Jun 28 18:30 wlp4s0 -> ../../devices/pci0000:00/0000:00:1b.0/0000:04:00.0/net/wlp4s0
Ifupdown

Depreciado: /etc/network/interfaces​ es su archivo de configuración. Se maneja con los comandos ifup​ y ifdown​. El servicio como tal se llama ifupdown

NetworkManager
- nmcli general     =>  General status and operations
- nmcli device      =>  Show devices managed
    - nmcli device desconnect `<device>`    =>  Disconnects an interface
    - nmcli device connect `<device>`       =>  Connect interface
- nmcli networking  =>  Network control
- nmcli radio       =>  Radio switches. Ej WI-Fi
- nmcli connection  =>  Manages connections
    - nmcli connection down `<connection>`  =>  Turn off a connection
- nmcli agent       =>  Polkit control
- nmcli monitor     =>  Monitor changes
Systemd-networkd
  • systemd-networkd.service​ Network Configuration
  • systemd-resolved.service​ Network Name Resolution

DIrectorios de configuración de más prioridad a menos

  1. /etc/systemd/network
  2. /run/systemd/network
  3. /lib/systemd/network

La autenticación en redes wifi se hace con un programa externo: wpa_supplicant​. Generar una clave wpa: # wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf

$ wpa_passphrase Mywifi
# reading passphrase from stdin
1234567890
network={
	ssid="Mywifi"
	#psk="1234567890"
	psk=678ce0d3122aca9c677e408b35c783346da61ae038065a7182390cb2b451bc75
}

Automáticamente crea el servicio mediante wpa_supplicant​ para crear el servicio wpa_supplicant@wlo1.service​. Despues de esto se debe crear un archivo .network con la configuración

Ip
ip addr add 192.168.5.5/24 dev enp0s8
ip link set dev enp0s8 down
ip link show dev enp0s8
ip link set enp0s8 mtu 2000

Para ver estadísticas de red

$ ip stats show dev wlp4s0
3: wlp4s0: group offload subgroup hw_stats_info
    l3_stats off used off
3: wlp4s0: group afstats subgroup mpls
3: wlp4s0: group offload subgroup l3_stats off used off
3: wlp4s0: group offload subgroup cpu_hit

3: wlp4s0: group link
    RX:  bytes packets errors dropped  missed   mcast           
    4712024637 3634572      0     438       0       0 
    TX:  bytes packets errors dropped carrier collsns           
      88842332  410661      0       0       0       0 
3: wlp4s0: group xstats_slave subgroup bond suite 802.3ad
3: wlp4s0: group xstats_slave subgroup bridge suite mcast
3: wlp4s0: group xstats_slave subgroup bridge suite stp
3: wlp4s0: group xstats subgroup bond suite 802.3ad
3: wlp4s0: group xstats subgroup bridge suite mcast
3: wlp4s0: group xstats subgroup bridge suite stp
Netstat

Actualmente está depreciado y su remplazo es ss

SS
  • ss -t​ (or ss -tlnp​ for listening TCP ports)
  • ss -u​ (or ss -ulnp​ for listening UDP ports)
  • ss -r​ (or ss -rlnp​ for routing table sockets)
$ ss -tlnp
State         Recv-Q        Send-Q                 Local Address:Port                  Peer Address:Port        Process                                           
LISTEN        0             128                          0.0.0.0:53317                      0.0.0.0:*            users:(("localsend_app",pid=2561,fd=133))        
LISTEN        0             4096                       127.0.0.1:37729                      0.0.0.0:*            users:(("kopia",pid=2910,fd=12))                 
LISTEN        0             4096                       127.0.0.1:6806                       0.0.0.0:*            users:(("SiYuan-Kernel",pid=12962,fd=43))        
LISTEN        0             4096                       127.0.0.1:34809                      0.0.0.0:*            users:(("bridge",pid=3077,fd=13))                                                    
LISTEN        0             4096                       127.0.0.1:1143                       0.0.0.0:*            users:(("bridge",pid=3077,fd=15))                
LISTEN        0             4096                       127.0.0.1:1025                       0.0.0.0:*            users:(("bridge",pid=3077,fd=18))                
LISTEN        0             4096                       127.0.0.1:33389                      0.0.0.0:*            users:(("kopia",pid=2912,fd=12)) 
ColumnaDescripción
Recv-QPaquetes recividos por el socket pero que no se han pasado al programa
Send-QPaquetes que han sido enviados pero no se ha recivido el acknowlegment
Lsof
OpcionesNota
-iPuertos en listening.
lsof -i@192.168.1.7​ para filtrar conexión
lsof -i :22​ Para filtrar puerto
-

SGUID/SUID

  • rws​ Sin permiso de ejecución
  • rwS​ Con permiso de ejecución

Busqueda. La opción -​ ignora el resto de permisos

  • find . -perm 4000​ buscar SUID activado
  • find . -perm u+s​ buscar SUID activado
  • /usr/bin/ -perm -2000​ Buscar GUID activado
  • find /usr/bin/ -perm -g+s​ Buscar GUID activado

Fuse

Listar que proceso esta usando un archivo

$ fuser -v .
		USERPID ACCESS COMMAND
/root:	580 	..c.. 	bash
AccessNota
cActual directory
eExecuting
fFile open
FFile open with writing
rroot directory
sudo fuser -vn tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root       1562 F.... apache2
                     www-data   1564 F.... apache2
                     www-data   1565 F.... apache2
OpcionesNota
-vverbose
-nNetwork
-kKill process accesing file

Ulimit

ComandoNota
ulimit -HaList hard limits
ulimit -SaList softlimits

Para cambiar un limite basta con seleccionar la opción y dar un valor: ulimit -f 500​ cambiar hard y soft file size. ulimit -Sf 500​ cambiar soft file size.

Para hacer los cambios permanetes el archivo de configuración es: /etc/security/limits.conf

Sudo

/etc/sudoers​ Archivos de configuración

# User privilege specification
root	ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

"from ALL hosts"=("as ALL users":"as ALL groups") "alow ALL comands"

Permitir acceso a ejecutar systemctl status apache2​ desde el host 192.168.0.222 con el usuario aaa

bbb	192.168.0.222=(aaa) /usr/bin/systemctl status apache2

Editar configuración con visudo​. Cambiar editor con la variable $EDITOR

Declarar alias. Ejemplo: Host_Alias SERVERS = 192.168.1.7, server1, server2

  • Host_Alias
  • User_Alias
  • Cmnd_Alias

Nologin

Para evitar que ningún usuario acceda excepto root, crear un archivo /etc/nologin​ con un mensaje. Para evitar que un usuario no acceda temporalmente: $ sudo usermod -s /sbin/nologin user

SSH

SHELL

CharacteristicsLogin ShellsNon-Login Shells
Reads System Config FilesYes (e.g.,/etc/profile​)No
Reads User Config FilesYes (e.g.,~/.bash_profile​)No (unless explicitly configured)
Environment VariablesSets up from scratchInherits from parent shell
PurposeInteractive login sessionsRunning commands or scripts
Started By/bin/login​programFrom within another shell or program
Interactive login shell
FILE CONFIGLEVELNOTE
/etc/profileglobalAplica a todo el sistema
/etc/profile.d/*globalAplica a todo el sistema el directorio
~/.bash_profilelocalConfigurar entorno de bash
~/.bash_loginlocalSolo se usa si no existe ~/.bash_login. Comandos que se usan en login
~/.profilelocalSolo se ejecuta si los anteriores no existen. Carga el directorio ~/bin en variable entorno. Hace source a ~/bashrc
~/.bash_logoutlocalLimpieza de entorno después de logout
Interactive no login shell
FILE CONFIGLEVELNOTE
/etc/bash.bashrcglobal
~/bashrclocalSources ~/.bash_aliases. User specific functions and variables
Skel

Variable añadida en /etc/adduser.conf​ el cual contiene el directorio donde crear el sistema de archivos del usuario

Variables

Las declaración de varaibles con comillas simple usan terminos literales. Declarar variables con doble comillas permite sustitución.

ComandoNota
readonly reptile=tortoiseVaribale inmutable
setLista todas las variables y funciones declaradas
unset -v <variable>
unset -f <function>
Elimina cualquier variable
export <variable>
declare -x <variable>
Convierte variable local a de entorno. Permite ser heredada
export -n <variable>Convierte variable en local
exportLista todas las variables en entorno
env
printenv <variable>
Listan todas las variables
env -i bashEjecutar un programa sin variables declaradas
VariableNota
$DISPLAYscreen number
$HISTCONTROL- ignorespace
- ignoredups
- ignoreboth
$HISTSIZETamaño historial en memoria
$HISTFILESIZETamaño total en archivo
$HOMEHome path
$HOSTNAMEHost name
$HOSTTYPETipo procesador
$LANGLocale
$LD_LIBRARY_PATHShared libary path
$MAILPath donde BASH busca emails
$MAILCHECKFrecuencia segundos revision mail
$PATHPath de ejecutables
$SHELLEn mayus variables globales. Lista shell
$USERCurrent user

Variables especiales bash

VariableNota
$?Resultado del último comando. 0 = success
$$Shell PID
$!PID del ultimo comando en backgroud
$0 - $9Parametros posicionales de una funcion
$#Numero argumentos pasados comando

Variables de scripts

VariableNota
$*
$@
Todos los argumentos pasados al script
$#Número de argumentos
$0Nombre del script
$!PID del último programa ejecutado

La notación para guardar el output de comandos $ OS=`uname -o` ​ o $ OS=$(uname -o)

Alias
alias oldshell=sh
alias ls='ls --color=auto'
unalias git-info
alias #list all alias

# Expansion dinámica y estática de los alias comillas
$ alias where?='echo $PWD'
$ where?
/home/user2
$ cd Music
$ where?
/home/user2/Music

$ alias where?="echo $PWD"
$ where?
/home/user2
$ cd Music
$ where?
/home/user2
Read
echo "Do you want to continue (y/n)?"
read ANSWER
read -p "Type your first name and last name:" NAME SURNAME
Arrays
declare -a SIZES
SIZES=( 1048576 1073741824 )
echo ${SIZES[0]}
echo ${#SIZES[@]} #Tamaño del array
Condicionales
CondiciónNota
&&Se ejecuta solo si el comando anterior return 0
-aIf file exists
-bIf is block file
-cIf is character file
-dIf is a directory
-eIf path exists
-fif path exist and is regular file
-gIf SGUID activated
-hIf is a symbolic link
-kIf have sticky bit
-pIf is a pipe file
-rIf is readable
-sIf exist directory and not empty
-SIf is a socket
-tIf is open in a terminal
-uIf SUID activated
-wIf is writteable
-xIf is executable
-OIf is owned by user
-GIf have the same group as the user
-NIf was modified since las time accessed
-ntIf path 1 is newer than path 2
-otIf path 1 is older than path 2
-efIf file 1 is a hardlink to file 2
-zIf variable is empty
-nIf variable is not empty
!If is false
-oIf EXPR1 or EXPR2 is true

User interfaces

Display name: hostname:displaynumber.screennumber

Lanzar aplicación en un monitor específico DISPLAY=:0.1 firefox &

Archivo de configuración: /etc/X11/xorg.conf

  • InputDevice
  • InputClass
  • Monitor
  • Device
  • Screen
  • ServerLayout

Comando para ver información del servidor X11 xdpyinfo

VariableNota
$DISPLAYX11 listar monitor
$WAYLAND-DISPLAYWayland listar monitor