Jugando con la Raspberry Pi – Configuración Inicial

Muy buenas a todos, rasperos y rasperas. En el artículo anterior de esta serie, Jugando con la Raspberry Pi 01 – Instalación, vimos como grabar la imagen de un sistema para la Raspberry Pi en una tarjeta SD, más concretamente Raspbian o Raspbian Lite. En este nuevo artículo vamos a ver como podemos hacer una serie de cambios tras el primer arranque de nuestra RbPi que aunque no son absolutamente necesarios a mi me gusta aplicarlos para dejar la RbPi configurada y partir de este sistema base poder añadir nuevos servicios y funciones a esta pequeñaja.

Antes de nada, para poder seguir los siguientes pasos debemos tener como mínimo una tarjeta SD con un sistema ya instalado como vimos en el artículo anterior (en mi caso he instalado 2017-09-07-raspbian-stretch-lite) y un cable de red para conectar la RbPi a la red de casa.
Ahora tenemos dos posibilidades: Conectar la RbPi a una pantalla, ya sea monitor o TV con un cable HDMI y un teclado para poder escribir o si no disponemos de todo esto, podemos simplemente conectarla a la red local con el cable de red y veremos como configurarla sin necesidad de pantalla.

 

 

Con monitor/TV y teclado

En este caso insertamos la SD en la RbPi, la conectamos al router con el cable de red, conectamos el teclado y con un cable HDMI la conectamos al monitor/TV. Encendemos y listo, podremos operar con ella como si de un pc normal se tratase.
Nota: Por defecto el teclado estará en inglés así que debemos tener en cuenta en este caso que la “tecla -“ será la “/”, la “tecla ?” será el “-“ y Shift+ñ serán los “:” entre otras.

Si hemos instalado Raspbian Desktop veremos directamente el escritorio pero si estamos usando Raspbian Lite (mi caso) para acceder la primera vez usaremos el usuario y contraseña por defecto:

Usuario: pi
Contraseña: raspberry

Por tanto si estáis usando Raspbian Desktop podéis saltar directamente a la sección Activar SSH. Si queréis ver como se configura una RbPi sin pantalla seguid leyendo.

 

Como pollo sin cabeza (sin monitor)

Estaréis pensando que si no disponemos de un monitor o cable HDMI cómo vamos a configurar la RbPi si no podemos ver en pantalla lo que está pasando. Que no cunda el pánico porque esto tiene una sencilla solución. Como aquí en Frikisdeatar nos gusta hacer las cosas así sin miedo, vamos a prescindir de pantalla y teclado y vamos a conectarnos directamente por SSH. Veamos cómo:

Antes de insertar la SD en la RbPi la volvemos a insertar en nuestro pc. Se montará automáticamente la partición boot. Esto ocurrirá tanto en GNU/Linux como en Windows ya que boot es la primera partición de la tarjeta y además es una partición FAT32 por lo que no tendremos problema para acceder a ella desde Windows.

Para que SSH esté activado la primera vez que arrancamos la RbPi tenemos que crear en la partición boot un archivo nuevo vacío llamado ssh (sin extensión). ¡Ojo Windowseros! tenéis que tener visibles las extensiones de los archivos para aseguraros de que el archivo ssh no tiene extensión, ni .txt ni ninguna.

Una vez que hayamos creado este archivo vacío en boot. Desmontamos la tarjeta (en Windows mediante extracción segura) y ahora sí, insertamos la SD en la RbPi, la conectamos al router con el cable de red y la encendemos.

Lo primero que hace la RbPi en el primer arranque (tanto en Raspbian como en Raspbian Lite) es expandir el sistema de archivos para que ocupe todo el espacio disponible en la SD, de esta forma si nuestra tarjeta SD es de 8GB tendremos una partición de casi el mismo tamaño. Tras esto se reinicia ella sola.
Si estamos viendo en pantalla lo que pasa veremos todo el proceso, si no, esperamos un par de minutos a que termine (no tarda mucho). Mientras tanto vamos a conseguir la IP de la RbPi para poder conectarnos a ella.

Cuando disponemos de un monitor es tan sencillo como escribir ifconfig en un terminal y veremos algo parecido a esto:

Pero cuando no tenemos monitor tenemos que recurrir a otros métodos como por ejemplo el registro dhcp de nuestro router.
Accedemos con el navegador web a la IP del router y en el dhcp veremos algo como esto:

Si no sabemos como acceder al router (cosa que debemos saber para poder abrir puertos más adelante) o simplemente no encontramos la información del dhcp, podemos usar mi herramienta de red favorita, Nmap/Zenmap.

Nmap para los que no lo conozcan es una navaja suiza para obtener información de los equipos conectados a la red y tiene un millón de usos, pero nosotros aquí sólo vamos a usarlo para averiguar la IP de nuestra RbPi.

Para instalarlo en GNU/Linux lo encontraremos en los repositorios de nuestra distribución tanto la herramienta de terminal nmap como la interfaz gráfica Zenmap. En Windows sin embargo tendremos que descargarlo desde su página web. Lo más cómodo en Windows es descargar y instalar Zenmap, podéis descargarlo pinchando aquí.

Tenemos que lanzarlo en nuestra red local, si nuestra red local es del tipo 192.168.1.0, podemos lanzarlo como 192.168.1.* o como 192.168.1.0/24 que indica también la máscara de red. En general será nuestra red local sustituyendo el último dígito de la IP por * o por 0/24.

Escribimos por tanto en la terminal:

sudo nmap -sn 192.168.1.*

El resultado será algo parecido a la siguiente imagen donde podemos ver la IP y MAC de la RbPi. Tendremos más o menos líneas pero las que hay en la imagen son las que nos interesan.

Si preferimos usar Zenmap (tenemos que lanzarlo como root en Linux) en el campo objetivo pondríamos nuestra red (ej: 192.168.1.*) y en el campo Perfil seleccionamos “Ping scan” y pulsamos el botón Escaneo. La salida será muy similar a lanzar Nmap desde la terminal. Tendremos más o menos líneas pero nos interesa sólo la línea con la IP.

Bien, una vez que sabemos la IP podremos conectarnos desde GNU/Linux escribiendo en la terminal:

ssh pi@IP_DE_LA_RBPI

La primera vez que accedamos nos preguntará si queremos guardar la RbPi en la lista de hosts de nuestro equipo. Tenemos que escribir “yes” (completo) y nos pedirá la contraseña que en nuestro caso será raspberry.

Si queremos acceder desde Windows necesitamos un cliente SSH como puede ser PuTTY. Lo podemos descargar desde su web https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

Una vez descargado lo ejecutamos y veremos esta ventana:

En el campo Host Name ponemos la dirección IP y pulsamos en Open. Nos pedirá usuario y contraseña que como dijimos antes son: pi y raspberry respectivamente.

Si todo fue bien estaremos dentro.

 

Activar SSH

Para mí lo primero es configurar el acceso por ssh y así poder trabajar con ella cómodamente desde el portátil o pc de sobremesa.

Si vuestra opción ha sido prescindir de pantalla (sección como pollo sin cabeza más arriba) para acceder por SSH no tienes que hacer nada, SSH ya se queda activado.
Si por el contrario has accedido a la RbPi directamente usando un teclado y una pantalla, el SSH todavía no está activado. Para activarlo debemos acceder al menú de configuración de Raspbian escribiendo:

sudo raspi-config

Veremos una pantalla como esta:

Iremos al punto 5 Interfacing Options

Luego al punto P2 SSH. Nos preguntará que si queremos activar SSH, le decimos que sí y luego en la siguiente pantalla nos dirá que se activó. Le damos a finalizar.

Una vez que hayamos activado SSH este se iniciará automáticamente al arrancar el sistema.

La próxima vez que entremos en la RbPi nos aparecerá una advertencia indicando que SSH está activado y es recomendable cambiar la contraseña ya que evidentemente en la propia página web de Raspbian nos indica que la contraseña es raspberry y todo el mundo la conoce. Para cambiarla escribimos passwd lo que nos pedirá la contraseña actual y la nueva dos veces. También podemos cambiarla desde el primer punto del menú de configuración raspi-config.

 

Menú de configuración (raspi-config)

La primera línea es para cambiar la contraseña como dije anteriormente y la segunda es para cambiar el hostname y darle un nombre chulo a nuestra RbPi.

 

Cambiando el idioma (locales)

Otra de las cosas que es recomendable cambiar es el idioma del sistema y del teclado. Para esto ejecutamos de nuevo:

sudo raspi-config

Ahora iremos al punto 4 Localisation Options (ya jeje)

Seleccionamos Change Locale

Aquí nos moveremos con los cursores hacia abajo hasta encontrar las UTF-8 correspondientes a nuestro idioma, en mi caso es_ES.UTF-8 UTF-8. Las seleccionamos con la barra espaciadora y seguimos adelante con Intro.

Después nos preguntará que cuales queremos usar por defecto. Seleccionamos las de nuestro idioma y pulsamos Intro.

Tras un poco terminará y volverá al menú de configuración. Después de esto volveremos a la pantalla 4 Localization options y haremos igual con la franja horaria.
Seleccionamos Change Timezone y elegimos la nuestra. En mi caso Europa -> Madrid.
Hacemos igual con la zona Wi-Fi. Seleccionamos Change Wi-Fi Country y seleccionamos el nuestro. En mi caso España.

Cuando tenemos un teclado conectado hay una opción más que no se ve en la imagen para configurar el teclado Change Keyboard Layout. Elegiremos nuestro tipo de teclado, si es uno normal o no viene en la lista el de 105 teclas está bien, luego español con tecla Windows o español a secas, y poco más.

Como esta opción no aparece si estamos conectados por SSH lo podemos acceder a ella escribiendo:

sudo dpkg-reconfigure keyboard-configuration

Tendremos que reiniciar para que el teclado escriba ya en español.

 

Opciones avanzadas

Otras opciones interesantes están en el menú 7 Advanced Options. No voy a hablar aquí de ellas pero si me gustaría destacar que si cuando se arrancó la RbPi por primera vez no es expandió el sistema de archivos hasta llenar la tarjeta SD entera (podemos comprobarlo escribiendo df -h y ver el tamaño de las particiones montadas), desde este menú podemos hacerlo con la opción Expand Filesystem.

 

Cambiando el usuario PI

Otra modificación que me gusta hacer es cambiar el usuario pi. Al igual que pasa con la contraseña, todo el mundo que use una Raspberry Pi sabe que el usuario por defecto es pi, por lo que a mí me gusta darle un toque más personal cambiándole el nombre por otro que nadie conozca.

Podemos hacer dos cosas: Cambiar el nombre del usuario así como su home, grupo, etc o crear un usuario completamente nuevo, añadirlo al grupo sudo y luego borrar el usuario pi.

Tengo que decir que yo siempre he cambiado el nombre al usuario pi ya que me parece más rápido y además mantiene todos sus privilegios y grupos. Con este método nunca he tenido problema alguno. Vamos allá.

Primero haré un inciso para los usuarios de Raspbian Desktop ya que es necesario un paso que en Raspbian Lite no es necesario. Debemos desactivar el arranque de la interfaz gráfica y el autologin. Para hacer esto ejecutamos raspi-config y nos vamos al punto 3 Boot Options, luego al punto uno Desktop / CLI y para terminar elegimos la primera opción Console.

Una vez que le demos a terminar nos pedirá reiniciar. Decimos que si.

A partir de aquí los pasos son los mismos tanto para Raspbian Desktop como para Raspbian Lite.

Cuando reinicie ya no veremos el escritorio sino la linea de comandos esperando que introduzcamos usuario y contraseña. Accedemos con pi.

Para poder cambiarle el nombre al usuario pi vamos a necesitar acceder con root, ya que no podemos cambiarle el nombre a pi si estamos conectados con él.
Si disponemos de pantalla y teclado no es necesario que toquemos el archivo de configuración de SSH, sin embargo si estamos accediendo mediante SSH ya sea porque no tenemos monitor o simplemente por comodidad, necesitaremos habilitar el acceso root por SSH de forma temporal para poder conectarnos a la RbPi.

Lo primero es hacer una copia del archivo de configuración de SSH, ya que si nos equivocamos en algo SSH no arrancará e igual luego no sabemos que hemos hecho mal. Al tener una copia siempre podremos borrarlo y restaurar la copia.

Para crear un copia bastará con escribir:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Nota: Si necesitamos restaurarla en algún momento haremos justo lo contrario:

sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config

Bien si ya tenemos la copia podemos editarlo más tranquilos.

Editamos el archivo de configuración de SSH:

sudo nano /etc/ssh/sshd_config

Buscamos la linea:

#PermitRootLogin prohibit-password

La descomentamos borrando la # que hay al principio y cambiamos prohibit-password por yes. La linea quedaría como sigue:

PermitRootLogin yes

Guardamos con Ctrl+O y luego Intro. Salimos con Ctrl+X.

Reiniciamos el servicio sshd para aplicar cambios:

sudo /etc/init.d/ssh restart

Lo siguiente es darle a root una contraseña. Por seguridad root viene sin contraseña y además no es posible iniciar sesión sin ponerle una, así estemos conectados a la RbPi directamente o por ssh necesitamos darle a root una contraseña. Para ello escribimos:

sudo passwd root

Nos pedirá una contraseña dos veces. Poned una segura ya que es para root.

Tras esto reiniciamos escribiendo reboot y cuando arranque ya podremos entrar con root.

Por ssh lo haremos así:

ssh root@IP_DE_LA_RBPI

Una vez dentro, cambiamos el nombre del usuario pi y el del home por otro a nuestra elección:

usermod -l nombreNuevo -d /home/nombreNuevo -m pi

Y por último cambiamos el grupo por defecto para que coincida también con el nombre nuevo:

groupmod -n nombreNuevo pi

Con estos dos pasos ya hemos terminado. Podemos cerrar la sesión con root escribiendo logout e iniciar de nuevo ya usando el nombre nuevo para el usuario. El usuario pi pasó a la historia.

Ahora para acceder por ssh escribimos:

ssh nombreNuevo@IP_DE_LA_RBPI

Una vez dentro podemos revisar el archivo /etc/passwd y comprobaremos que pi ya no existe y que el nombre que nosotros hemos elegido tiene el UID 1000:

sudo cat /etc/passwd | grep nombreNuevo

También podemos comprobar que seguimos perteneciendo a todos los grupos a los que pertenecía pi y que su grupo principal se ha cambiado por el nombre que hayamos elegido escribiendo groups.

Nota: Además ya no es necesario cambiar el archivo sudoers para tener privilegios de sudo ya que todos los miembros del grupo sudo los tienen.

Bien, ahora si estamos en Raspbian Desktop y queremos recuperar el autologin, es decir que Raspbian inicie con el escritorio y se logue con el nuevo nombre de usuario debemos ejecutar otra vez raspi-config, volvemos al menú Boot Options, Desktop / CLI y elegimos la cuarta opción Desktop Autologin Desktop GUI, automatically logged in as ‘nuevoNombre’ user.
Tendremos que reiniciar nuevamente y ya volveremos a ver el escritorio al iniciar.

Importante: antes de terminar debemos acordarnos de volver a bloquear el acceso ssh a root, para ello abrimos otra vez el archivo de configuración:

sudo nano /etc/ssh/sshd_config

Buscamos la linea:

PermitRootLogin yes

La comentamos escribiendo una # delante y cambiamos yes por prohibit-password. La linea quedaría como sigue:

#PermitRootLogin prohibit-password

Guardamos con Ctrl+O y luego Intro. Salimos con Ctrl+X.

Reiniciamos el servicio sshd para aplicar cambios:

sudo /etc/init.d/ssh restart

Cambios adicionales en ssh

Los cambios que propongo aquí son opcionales, aunque a mí personalmente me gusta hacerlos.

 

Cambiar puerto ssh

Una de las cosas que cambio cuando activo SSH es el puerto de acceso. ¿Por qué?, pues porque si lo que queremos es tener un servidor accesible desde Internet no imagináis la de intentos de acceso que se evitan tan sólo cambiando el puerto 22 por otro, por lo que recomiendo encarecidamente hacer esto. Además, tendremos que poner un puerto que no esté reservado.

¿Y cómo sabemos que puertos están reservados? Escribimos en una terminal:

cat /etc/services

Los puertos que vemos en este archivo están reservados para otros servicios. Podemos escoger cualquier puerto que no esté en esta lista.
Para los que anden preguntándose ¿qué leches de puerto pongo? una idea es añadir dos o tres números a nuestra elección delante o detrás de 22 y así además recordaremos que este puerto que acaba o empieza en 22 es del ssh. ej: 22455, 22100, 32122 o 55522.

Una vez que tenemos el puerto elegido, lo primero será abrir el archivo de configuración de ssh:

sudo nano /etc/ssh/sshd_config

Buscamos la linea donde pone:

#Port 22

La descomentamos borrando la # al principio de la linea y cambiamos el puerto por otro a nuestra elección que no esté reservado. Una vez hecho esto, pulsamos Ctrl+O para guardar, luego Intro (sin cambiar el nombre) y por último Ctrl+X para salir.

Para que los cambios surtan efecto debemos reiniciar el servicio sshd:

sudo /etc/init.d/ssh restart

Tras cambiar el puerto ssh nuevo y haber reiniciado el servicio sshd, nos podremos conectar a partir de ahora a la RbPi usando:

ssh usuario@IP_DE_LA_RBPI -p PUERTO

Si usamos PuTTY en el campo que pone puerto debemos cambiarlo por el nuevo puerto.

 

Prohibir el acceso ssh a root con contraseña

En las últimas versiones de Debian el acceso de root por ssh está restringido sin tener que hacer nada, cosa que me parece muy bien ya que nunca acostumbro a acceder con root sino con un usuario sin privilegios y luego uso sudo si lo necesito, pero reconozco que para según que situaciones es buena idea tenerlo activado como hemos visto antes a la hora de renombrar el usuario pi por ejemplo.

Como ya hemos visto, la línea del archivo de configuración que se encarga de esto es:

#PermitRootLogin prohibit-password

Esta línea como vemos está comentada (#) y no se tiene en cuenta. Si la descomentamos quitando la # la opción prohibit password (anteriormente llamada without-password) significa que tendremos acceso root no con contraseña sino con una clave RSA, pero esto no lo vamos a ver aquí.

Lo que yo hago es descomentar la línea y cambiar prohibit-password por no, negándola explícitamente:

PermitRootLogin no

De esta forma consigo el mismo efecto que cuando la línea está comentada, es decir, root no puede acceder. ¿Entonces?, ¿por qué lo hago?, pues primero por viejas costumbres ya que en versiones más antiguas de SSH se hacía así y segundo por comodidad ya que cuando quiero acceder con root sólo tengo que cambiar no por yes como ya hicimos antes y para mí es más rápido que tener que descomentarla y cambiarla como venía de serie.

Yo lo comento aquí pero si dejáis esta línea tal y como venía, comentada y demás, no compromete la seguridad del sistema ya que root no podrá logarse por SSH, así que tranquilos.

Si decidimos hacer esta modificación debemos reiniciar después el servicio sshd:

sudo /etc/init.d/ssh restart

Copia de seguridad de todo el trabajo (y restauración)

Una vez que he hecho todos estos cambios y tengo el sistema ya listo para otras cosas, acostumbro a crear una copia de él para poder restaurarla en caso de liarla parda, ya me entendéis xD.

Bien para hacer una copia que mejor que dd del que ya hablamos en el artículo anterior para instalar la imagen del sistema.
Ahora lo usaremos para justo lo contrario, hacer una copia del sistema. Además podemos comprimir la copia a la vez que se va haciendo combinando dd con gzip y ahorrar así unos cuantos megas de espacio.

Para hacer la copia insertamos la tarjeta SD en un pc con GNU/Linux y la desmontamos si se montase automáticamente.

Para hacer una copia sin comprimir:

sudo dd if=/dev/NuestraSD of=/ruta_destino/imagen.img bs=4M

Para restaurar una copia sin comprimir:

sudo dd if=/ruta_imagen/imagen.img of=/dev/NuestraSD bs=4M; sync

Para hacer una copia comprimida con gzip:

sudo dd if=/dev/NuestraSD bs=4M | gzip > /ruta_destino/imagen.gz

Para restaurar una copia comprimida con gzip:

sudo gzip -dc /ruta_imagen/imagen.gz | dd of=/dev/NuestraSD bs=4M; sync

Cuando pongo “NuestraSD” me refiero al nombre de la SD y no a la primera partición de la SD que sería “NuestraSDp1”. Si no sabéis de que hablo echad un vistazo a como grabar una imagen en una SD con dd en el primer artículo de esta serie.

Para hacer una copia y restaurarla en Windows podemos usar Win32DiskImager, lo podemos descargar de aquí.
Una vez descargado seleccionamos la unidad de la SD, elegimos una ruta y un nombre para la imagen y pulsamos en Read para crear la copia de seguridad. Si lo que queremos es restaurarla, seleccionamos donde está la imagen, la unidad de la tarjeta y pulsamos en Write.

 

 

Bueno pues esto ha sido todo por hoy. Hemos visto como hacer algunos cambios en la RbPi como configurarla sin monitor, cambiar el idioma, activar ssh, cambiar el usuario pi, cambiar el puerto ssh y dar acceso o no a root por ssh.
En el próximo artículo veremos como conectar un disco duro externo a nuestra pequeña.

Saludos linuxeros.

 


Serie Jugando con la Raspberry Pi:

Jugando con la Raspberry Pi – Instalación
Jugando con la Raspberry Pi – Configuración Inicial

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *