Raspberry Pi

Índice

Mi chuleta para los despliegues y laboratorios de cacharreo con la Raspberry y su mundo

Raspi-config

Utilidad del termina que nos permite realizar algunos cambios de manera sencilla. Desde el terminal como root:

raspi-config

Menus:

  • 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 )
  • Inteface 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=0

Deshabilitar 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 = 1

Editamos /etc/rc.local y añadimos al final, si no esta ya :

exit 0

Configurar 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.1

Donde:

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.

Configurar Wifi

próximamente

Deshabilitar Wifi

iwconfig wlan0 txpower off

Kernel headers

apt install linux-headers-$(uname -r)

Alimentación

Según el fabricante:

Modelo Alimentación
Modelo A 700mA
Modelo B 1,2A
Modelo A+ 700mA
Modelo B+ 1,8A
2 Modelo B 1,8A
3 Modelo B 2,5A
3 Modelo A+ 2,5A
3 Modelo B+ 2,5A
4 Modelo B 3A
Zero W/WH 1,2A
Zero 1,2A

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-bin

Ejecutamos:

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/syslog

El cual podemos consultar para buscar patrones con el comando dmesg del siguinte 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/temp

Con la utilidad vcgencmd la cual nos lo muestra con un decimal:

vcgencmd measure_temp

Esta 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 sshd

Reiniciar:

systemctl restart sshd

Ver estado:

systemctl status sshd -l

Parar:

systemctl stop sshd

Si 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 tuneles
AllowTcpForwarding no
# Habilitar tuneles para el usuario sistemas
Match User sistemas
AllowTcpForwarding yes
# Banner
# PrintLastLog

DuckDns

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
    crontab -e
    */5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1
    Ahora cada 5 minutos se ejecutara y escribira el resultado en el fichero duck.log. Sera ok o ko.

Backup tarjeta SD

Local

Apagarmos la Rpi y la insertamos en nuestro equipo. Abrimos un terminal con privliegios de root e identificamos cual es el device de la tarjeta sd:

fdisk -l

Suponiendo 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.img

Si queremos restaurar la copia:

dd if=raspbackup.img bs=1M status=progress of=/dev/sdb

Remota

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.gz

Donde:

  • “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/sdd

Donde /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.

  • Asegúrarnos 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 contrseñ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> sudo

Comprobar 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 pi

Se 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-all

Parar un servicio:

sudo service <nombre del servicio> stop

Si el servicio arranca automáticamente:

sudo update-rc.d <nombre-del-servicio> remove

Para desinstalarlo:

sudo apt remove <nombre-del-servicio>
  • Solicitar contraseña para el uso de

Editar :

sudo visudo
Buscar :

pi ALL=(ALL) NOPASSWD: ALL
#tldr Sustitúyala por :

pi ALL=(ALL) PASSWD: ALL

Realiza 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-config

Idioma

#raspi-config