Raspberry Pi
Raspi-config
Utilidad del termina que nos permite realizar algunos cambios de manera sencilla. Desde el terminal como root:
raspi-configMenus:
- System Options
- Password ( cambiamos la contraseña del usuario pi )
- Hostname ( cambiamos el nombre de host )
- Boot / Auto Login
- Console Text console, requiring user to login ( elegimos esta opción )
- Network at Boot ( seleccionamos no para acelerar el arranque )
- Interface Options
- SSH Enabled/disable remote command line access using SSH ( enable )
- Location options
- Locale ( configuramos correctamente el idioma )
- Timezone ( seleccionamos nuestra zona horaria )
- Keyboard ( seleccionamos nuestra distribución de teclado )
- Update ( actualizamos la herramienta )
Es necesario reiniciar para aplicar los cambios.
La red
Ahora vamos a dejar la red configurada según nuestras necesidades. Todas las operaciones son necesarias realizarlas como root y para aplicar los cambios se ha de reiniciar.
Nombrar el interface de red para humanos
Editamos /boot/cmdline.txt y añadimos al final “net.ifnames=0” quedando asi:
console=serial0,115200 console=tty1 root=PARTUUID=9b849d88-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0Deshabilitar ipv6
Editamos /etc/sysctl.conf y añadimos al final :
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv6.conf.eth0.disable_ipv6 = 1Editamos /etc/rc.local y añadimos al final, si no esta ya :
exit 0Otro modo de hacer esto, mas rápido y radical es modificando el cmdline.txt. Según modelo o sistema operativo se puede encortar en varias rutas, revisa las dos posibilidades segun tu hardware y sistema:
- /boot/cmdline.txt
- /boot/firmware/cmdline.txt
Te encontraras algo parecido a esto:
console=serial0,115200 console=tty1 root=PARTUUID=5b621bc5-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0Solo tienes que añadir un espacio y luego ipv6.disable=1, de tal forma que quedaria asi:
console=serial0,115200 console=tty1 root=PARTUUID=5b621bc5-02 rootfstype=ext4 fsck.repair=yes rootwait net.ifnames=0 ipv6.disable=1Configurar dirección ip fija
Editamos /etc/dhcpcd.conf y configuramos los parámetros correspondientes, ejemplo:
interface eth0
static ip_address=192.168.0.69/24
static routers=192.168.0.1
static domain_name_servers=9.9.9.9 1.1.1.1Donde:
interface “nombre interface de red” static ip_address “ip/mascara” static routers “default gateway” static domain_name_servers “ip dns primario” “ip dns secundario”
Reiniciamos para aplicar los cambios.
En las nuevas versiones de Raspberry Pi OS ( anteriormente Raspbian) que están basadas en Debian 12 (bookworm) o superior la configuración de la red se controla de manera distinta, utiliza network manager. Para ello se utiliza el comando nmcli. Vamos a ver rápidamente como hacer esto, desde la consola con privilegios de root:
Identificar nombres de nuestros interfaces que estén conectados, obtendremos una salida parecida e esta:
nmcli -p connection show
============================================
Perfiles de conexiones de NetworkManager
============================================
NAME UUID TYPE DEVICE
----------------------------------------------------------------------------
Conexión cableada 1 7470081f-935c-35a2-9c7b-66a33272fab5 ethernet eth0 En esta caso vamos a configurar “Conexión cableada 1” con los siguientes parámetros:
- Dirección IP 192.168.1.100
- Puerta de enlace 192.168.1.1
- Mascara de subred /24
- Servidores DNS 8.8.8.8 y 8.8.4.4
- Nombre de la interfaz de red Conexión cableada 1
Con el siguiente comando aplicamos la configuración:
nmcli connection modify "Conexión cableada 1" ipv4.method manual ipv4.addresses 192.168.1.1100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 y 8.8.4.4"Para que los cambios surtan efecto, reiniciaremos Network Manager:
nmcli con down "Conexión cableada 1" && nmcli con up "Conexión cableada 1"ℹ️ Nota: Otra opción disponible es reiniciar la Raspberry Pi.
Ahora verificamos los camios y consultamos la configuración actual de nuestra conexión ethernet. El resultado será parecido al siguiente, la salida esta cortada mostrando solo lo que nos interesa, es muy detallada ////:
nmcli -p connection show "Conexión cableada 1"
===============================================================================
Detalles del perfil de conexiones (Conexión cableada 1)
===============================================================================
///////////////////////////////////////////////////////////////////////////////
ipv4.method: manual
ipv4.dns: 8.8.8.8 y 8.8.4.4
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 192.168.1.100/24
ipv4.gateway: 192.168.1.1
ipv4.routes: --
ipv4.route-metric: -1
///////////////////////////////////////////////////////////////////////////////
802-3-ethernet.port: --
802-3-ethernet.speed: 0
802-3-ethernet.duplex: --
802-3-ethernet.auto-negotiate: no
802-3-ethernet.mac-address: --
802-3-ethernet.cloned-mac-address: --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist: --
802-3-ethernet.mtu: auto
802-3-ethernet.s390-subchannels: --
802-3-ethernet.s390-nettype: --
802-3-ethernet.s390-options: --
802-3-ethernet.wake-on-lan: default
802-3-ethernet.wake-on-lan-password: --
802-3-ethernet.accept-all-mac-addresses:-1 (default)
-------------------------------------------------------------------------------
ipv4.method: manual
ipv4.dns: 9.9.9.9,1.1.1.1
///////////////////////////////////////////////////////////////////////////////Otros que nos pueden interesar
Ip dinámica IpV4:
nmcli con modify "Conexión cableada 1" ipv4.method autoIp dinámica IpV6:
nmcli con modify "Conexión cableada 1" ipv6.method autoPara que los cambios surjan efecto, o reiniciar el servicio o la Raspberry Pi.
Evitar conexión automática, interesante con la WiFi:
nmcli con modify "preconfigured" connection.autoconnect noFuente e información sobre nmcli
Configurar Wifi
Configuración en Raspberry Pi OS 12 (Bookworm).
Desde el terminal con privilegios de root editamos el archivo de configuración de red “/etc/wpa_supplicant/wpa_supplicant.conf”. Añadir al final (cambia SSID y contraseña):
network={
ssid="TuNombreDeWiFi"
psk="TuContraseñaWiFi"
}Reinicimaos el servicio de red:
wpa_cli -i wlan0 reconfigure⚙️ Consejos útiles
- Comprbar zona/país con
raspi-config→ Localisation Options → WLAN Country. - Si no detecta redes, prueba:
rfkill unblock wifi ifconfig wlan0 up - Puedes listar redes disponibles con:
iwlist wlan0 scan | grep ESSID
Deshabilitar Wifi
iwconfig wlan0 txpower offKernel headers
apt install linux-headers-$(uname -r)Alimentación
Según el fabricante:
| Modelo | Alimentación recomendada |
|---|---|
| Raspberry Pi Zero 2 W | 600 mA |
| Raspberry Pi 5 | 5 A |
| Raspberry Pi A | 700 mA |
| Raspberry Pi B | 1,2 A |
| Raspberry Pi A+ | 700 mA |
| Raspberry Pi B+ | 1,8 A |
| Raspberry Pi 2 B | 1,8 A |
| Raspberry Pi 3 B | 2,5 A |
| Raspberry Pi 3 A+ | 2,5 A |
| Raspberry Pi 3 B+ | 2,5 A |
| Raspberry Pi 4 B | 3 A |
| Raspberry Pi Zero | 1,2 A |
| Raspberry Pi Zero W | 1,2 A |
Si tenemos problemas de alimentación puede que no arranque o bien si arranca saldrá un aviso durante el arranque y posteriormente en la esquina superior derecha en el entorno grafico. Pero si no es así lo podemos comprobar desde la consola con privilegios de root:
Instalamos el paquete necesario, si no lo tenemos ya:
apt install libraspberrypi-binEjecutamos:
vcgencmd get_throttled| Respuesta | Significado |
|---|---|
| 0x0 | todo ok |
| 0x50000 | tiene o tuvo problemas de voltaje desde el ultimo arranque |
| 0x80000 | tiene problemas de temperatura |
Los mensajes se guardan el el syslog del sistema:
/varlog/syslogEl cual podemos consultar para buscar patrones con el comando dmesg del siguiente modo, ejemplo:
dmesg | grep -iC 3 "under-voltage detected"Temperatura
Como todos sabemos uno de los problemas que nos podemos encontrar es la temperatura. La podemos leer de dos maneras:
En formato bruto con tres decimales grados centígrados:
cat /sys/class/thermal/thermal_zone0/tempCon la utilidad vcgencmd la cual nos lo muestra con un decimal:
vcgencmd measure_tempEsta información la podemos utilizar para monitorizar, tomar acciones con scripts, etc.
Servicios
Servidor ssh
El servicio ssh es el que nos proporciona acceso remoto a nuestra Rpi. Para gestionarlo utilizaremos el comando service desde la terminal:
Arrancar:
systemctl start sshdReiniciar:
systemctl restart sshdVer estado:
systemctl status sshd -lParar:
systemctl stop sshdSi estamos conectados en remoto y paramos el servicio se cortara la cnexion.
Es aconsejable realizar una serie de ajustes para que se lo mas suegro posible. El fichero donde se almacena toda la configuración del servicio esta en /etc/ssh/sshd_config.
Vamos a cambiar / definir una serie de parámetros. Antes de esto es aconsejable tener creadas las llaves de acceso remoto, aquí puedes ver como hacerlo.
Ejemplo de fichero de configuración con comentarios:
# Version del protocolo
Protocol 2
# Puerto
Port 22445
# AddressFamily any
# ListenAddress 0.0.0.0
# ListenAddress ::
# No permitir login remoto a root
PermitRootLogin no
# Tiempo necesario para introducir la contraseña
LoginGraceTime 30
# Número de intentos permitidos al introducir la contraseña
MaxAuthTries 3
# Número de logins simultáneos desde una IP
MaxStartups 3
# Lista blanca de usuarios
AllowUsers jhon fulano
# Lista negra de usuarios
DenyUsers adrian adrian2
# Lista blanca de grupos
AllowGroups admin sistemas
# Lista negra de grupos
DenyGroups marketing ventas
# Deshabilitar usuario y contraseña necesarias llaves
PasswordAuthentication no
# Habilitar el uso de llaves.
PubkeyAuthentication yes
# Nivel de log
# Deshabilitar túneles
AllowTcpForwarding no
# Habilitar túneles para el usuario sistemas
Match User sistemas
AllowTcpForwarding yes
# Banner
# PrintLastLogDuckDns
Para tener nuestra conexión localizada por ip por si la necesitamos. Registramos los dominios en Duckdns obteniendo un token. Desde el terminal con una cuenta de usuario:
- Creeamos el script:
mkdir duckdns cd duckdns vi duck.sh - Contenido:
echo url="https://www.duckdns.org/update?domains=dominio1,dominio2&token=MI_TOKEN_ULTRA_SECRETO&ip=" | curl -k -o ~/duckdns/duck.log -K - - Le damos permisos de ejecución:
chmod +x duck.sh - Lo programamos en el cron
Ahora cada 5 minutos se ejecutara y escribirá el resultado en el fichero duck.log. Sera ok o ko.
crontab -e */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
Backup tarjeta SD
Local
Apagáramos la Rpi y la insertamos en nuestro equipo. Abrimos un terminal con privilegios de root e identificamos cual es el device de la tarjeta sd:
fdisk -lSuponiendo que sea /dev/sdb, esto varia en función de lo que tengamos conectado. Utilizaremos el comando dd y opcionalmente el pv para tener una barra de progreso. al directorio que queramos. Este comando tiene la siguiente estructura:
sudo dd if=/dev/sdb bs=1M status=progress of=raspbackup.imgSi queremos restaurar la copia:
dd if=raspbackup.img bs=1M status=progress of=/dev/sdbRemoto
Puede que en algún momento necesitemos realizar una copia por red o que tengamos algo en producción con lo cual no podemos parar.Desde el terminal:
ssh [email protected] "sudo dd if=/dev/mmcblk0 bs=1M status=progress | gzip -" | dd of=backup.gzDonde:
- “pi” El usuario que se conecta y puede ejecutar sudo sin pedir contraseña.
- “192.168.1.155” Dirección ip de nuestra Rpi.
- “backup.gz” fichero donde se guardara la copia.
- “1M” Tamaño de 1 Megabyte del bloque al realizar la copia.
Tener en cuenta:
Se añade el parámetro “status=progess”, si vamos a programar la tarea en el cron lo deberíamos omitir.
La copia se realiza comprimida al añadir “gzip -”. Es opcional.
Este procedimiento no me fallado nunca, esto no quiere decir que sea infalible tener en cuenta que esta en funcionamiento y se realiza el caliente.
Restore tarjeta SD
Local
Desde nuestro terminal como root donde tengamos el de la copia:
gzip -dc fichero_backup.gz | dd bs=1M status=progress of=/dev/sddDonde /dev/sdd es nuestra tarjeta sd donde restauraremos el backup.
Consejos de seguridad
Consejos de seguridad
- No utilizar el inicio de sesión automático ni contraseñas vacías.
Las contraseñas son una parte muy importante de la seguridad de nuestro sistema.
-
Asegurarnos de que todos los accesos críticos piden una contraseña.
-
Buscar contraseñas vacías:
sudo awk -F: '($2 == "") {print}' /etc/shadow- Bloquear las cuentas no seguras:
passwd -l <nombre de usuario>- Cambiar la contraseña por defecto del usuario pi, logueados como usuario pi:
passwd- Deshabilitar el usuario pi:
Crear un nuevo usuario:
sudo adduser <nombre de usuario>Dar privilegios sudo, si es necesario:
sudo adduser <nombredeusuario> sudoComprobar que todo funciona correctamente (acceso ssh, sudo, …). Copiar los archivos del usuario pi al nuevo usuario si es necesario:
sudo cp /home/pi/Documentos/* /home/<nombredeusuario>/Documentos/ ...Eliminar el usuario pi:
sudo deluser -remove-home piSe puedes empezar por bloquear la cuenta y eliminarla sólo cuando se compruebe que con el nuevo usuario todo esta ok.
- Deshabilitar servicios innecesarios
Tener servicios en ejecución es una clara brecha de seguridad en cualquier sistema.
Listar servicios en ejecución:
sudo service --status-allParar un servicio:
sudo service <nombre del servicio> stopSi el servicio arranca automáticamente:
sudo update-rc.d <nombre-del-servicio> removePara desinstalarlo:
sudo apt remove <nombre-del-servicio>- Solicitar contraseña para el uso de
Editar :
sudo visudopi ALL=(ALL) NOPASSWD: ALLpi ALL=(ALL) PASSWD: ALLRealiza esta operación con los usuarios que tengan que utilizar sudo
-
Realizar backup´s periódicamente de la tarjeta SD.
-
Securizar servicio ssh.
Fecha y hora
#raspi-configIdioma
#raspi-config