Raspberry Pi
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
Ahora cada 5 minutos se ejecutara y escribira 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
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
pi ALL=(ALL) NOPASSWD: ALL
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