Prepación de la tarjeta SD con el SO
Configurar usuario principal (si es necesario)
Configurar SSH ( /etc/ssh/sshd_config
Descripción script configurar.sh
Configuración script configurar.sh
Script configurar.sh (Versión 1.00)
Script montar.sh (Versión 1.00)
Esta guía tiene por finalidad montar en la RaspBerry Pi un servidor Ubuntu que
dé acceso a los usurios de la familia a los recuros del NAS WD.
SO: Ubuntu server 22.04.1
Advabce options:
Enable SSH
Set username and password
Username: juanp
Contraseña: 1212
Colocar la tarjeta SD en la raspberry pi y encenderla.
El acceso puede realizase desde consola o por ssh si se conoce la IP asiganda.
ssh juanp@192.168.0.137
Si no se ha configurado el nombre del usuario y la contraseña, su valores por
defecto serán:
Usuario : ubuntu
Contraseña: ubuntu
Crear y configurar el usuario principal (juanp) si no se ha hecho ya.
.- Crear usuario
.- Añadir al grupo sudo
.- Crear el archivo /root/.credenciales con dos líneas:
username=invitado
password=CONTRASEÑA
En un USB (FAT 32) se copia el scrip de configuración, el scrip para el
montaje y aquello que pueda ser necesario.
Ver/Leer los apartados sobre los script de configuracion y el de montaje.
Scripts:
Tras conectar el USB se obtiene el nuevo dipositivo de almacenamiento en el
directorio /dev
sudo fdisk -l
sudo fdisk -l | grep /dev
Crear en /mnt un directorio para montar el USB
sudo mkdir /mnt/prv
Montar el dispositivo USB
sudo mount /dev/sdxxx /mnt/prv
Ejecutar el scrip de configuración.
sudo bash /mnt/prv/configurar.sh
Habiliar exclusivamente a los usuarios creados a accecer via SSH al servi-
dor, copiar en /etc/ssh/sshd_config las siguientes lineas.
# INICIO MODIFICACIONES REALIZADAS ####################################
AllowUsers juanp diego pablo marisa
# FIN MODIFICACIONES###################################################
Editar configuración servidor
sudo nano /etc/ssh/sshd_config
Reinciniar el servicio.
sudo service ssh restart
Script para configurar el servidor ubuntu en la Raspberry PI.
.- Actualiza el sistema operativo _update_SO
.- Instala los paquetes necesarios cifs-utils
Debe existir el usuario principal (juanp)
.- Usuarios: Crea los usuarios en base a al información contenida en aUsers
aUsers -> [Usuario;Contraseña;]
Añade al usuario juanp a cada grupo principal de cada usuario
que se crea.
.- Extructura de carpetas en la que montará para cada usuario las carpetas de
red (NAS WD) a la que tendrán acceso.
Se crea en base a la información contenida en aFolders, la primera posición
de aFolders contiene la carpeta que contendrá las diferentes carpetas con
los recursos compartidos.
..- Folder base: Directorio en /mnt que contendrá las carpetas de cada
usuario.
..- Nombre folder a crear
..- Nombre Usuario
..- Nombre Grupo
..- Permisos en formato octal (0777)
..- Modo: read&write - rw / read only - ro [fstab]
..- Origen: dirección al recursos [fstab]
/mnt|
|user_1 |
| |NameFolder_1
| |NameFolder_2
| |NameFolder_N
|user_2 |
|NameFolder_1
|NameFolder_2
|NameFolder_N
.- Lineas fstab: Crea las líneas necesarias montar las directorios de red en
los directorios creados.
La configuración se realiza cargando la información en las matrices:
.- aPackages
.- aUsers
.- aCredenciales
.- aFolders
Cada línea ha de finalizar con ;
.- aPackages
Contiene el nombre de los paquetes que se desean instalar.
.- aUsers
Contiene el nombre y contraseña de cada usuario que se va a crea.
.- aCredenciales
Contiene el nombre y contraseña de cada usuario para acceser la NAS WD,
los nombres de los usuarios deben coincidir con los indicados en aUsers.
.- aFolders[]
El primer directorio se creará directamente en /mnt y de él colgarán los
directorios en los que se montarán los recursos. A este directorio el
usuario tendrá acceso exclusivamente de acceo y lectura (550) de forma
que no pueda crear directorios ni archivos en él y sólo pueda hacerlo en
los directorios en los que se montan los recursos.
.- Folder base
.- Nombre folder a crear
.- Nombre Usuario
.- Nombre Grupo
.- Permisos
.- Modo de acceso:
..- rw : read & write
..- ro : read only
#!/bin/bash
# Script para configurar el servidor ubuntu en la Raspberry PI.
# .- Crea una copia de seguridad de /etc/fstab y /etc/ssh/sshd_config
# .- Actualiza el sistema operativo _update_SO
# .- Instala los paquetes necesarios cifs-utils
# Debe existir el usuario principal (juanp)
# .- Usuarios: Crea los usuarios en base a al información contenida en aUsers
# aUsers -> [Usuario;Contraseña;]
# Añade al usuario juanp a cada grupo principal de cada usuario
# que se crea.
# .- Extructura de carpetas en la que montará para cada usuario las carpetas de
# red (NAS WD) a la que tendrán acceso.
# Se crea en base a la información contenida en aFolders, la primera posición
# de aFolders contiene la carpeta que contendrá las diferentes carpetas con
# los recursos compartidos.
# ..- Folder base: Directorio en /mnt que contendrá las carpetas de cada
# usuario.
# ..- Nombre folder a crear
# ..- Nombre Usuario
# ..- Nombre Grupo
# ..- Permisos en formato octal (0777)
# ..- Modo: read&write - rw / read only - ro [fstab]
# ..- Origen: dirección al recursos [fstab]
# /mnt|
# |user_1 |
# | |NameFolder_1
# | |NameFolder_2
# | |NameFolder_N
# |user_2 |
# |NameFolder_1
# |NameFolder_2
# |NameFolder_N
# .- Lineas fstab: Crea las líneas necesarias montar las directorios de red en
# los directorios creados.
# Pendiente:
# Configurar usuario principal incluido su archivo de credenciales. Ver qué es
# necesario si no se configura juanp como usuario en el instalador de PI
# Configurar ssh:
# .- Puerto
# .- Usuarios
# .- banner
# Versión 1.01
# Fecha: 02/12/22
# Crear copia de seguridad
_crear_backup(){
local l_backup="$(dirname "$0")/backup"
echo ""
echo "Creando copias de seguridad de fstab y sshd_config"
if [ ! -d "$l_backup" ]; then
mkdir $l_backup
if [ ! $? -eq 0 ]; then
echo "Error al crear el directorio para guardar las copias de seguridad."
echo "Se cancela el script"
exit 1
fi
fi
cp /etc/fstab "$l_backup/fstab.bck"
if [ ! $? -eq 0 ]; then
echo "Error al crear la copia de seguridad de /etc/fstab"
echo "Se cancela el script"
exit 1
fi
cp /etc/ssh/sshd_config "$l_backup/sshd_config.bck"
if [ ! $? -eq 0 ]; then
echo "Error al crear la copia de seguridad de /etc/ssh/sshd_config"
echo "Se cancela el script"
exit 1
fi
echo "Ok"
echo ""
# Instala paquete
_install(){
echo ""
echo "-------------------------------------------------------------------------------"
echo "Instalando $1"
echo ""
apt install $1
if [ ! $? -eq 0 ]; then
echo ""
echo "Error en la instalción: apt install $1"
echo ""
exit 1
fi
_install_packages(){
local -n l_array=$1
local l_i
for l_i in "${l_array[@]}" ; do
_install $l_i
done
# Actualiza el SO
_update_SO(){
echo ""
echo "-------------------------------------------------------------------------------"
echo "Actualizando las listas de paquetes de los repositorios."
echo ""
apt update
if [ ! $? -eq 0 ]; then
echo ""
echo "Error en la ejecución de: apt update"
echo ""
exit 1
fi
echo ""
echo "-------------------------------------------------------------------------------"
echo "Instalando las versiones más recientes de todos los paquetes"
echo "actualmente instalados en el sistema"
echo ""
apt upgrade -y
if [ ! $? -eq 0 ]; then
echo ""
echo "Error en la ejecución de: apt upgrade -y"
echo ""
exit 1
fi
echo ""
echo "-------------------------------------------------------------------------------"
echo "Eliminando paquetes innecesarios."
echo ""
apt autoremove
if [ ! $? -eq 0 ]; then
echo ""
echo "Error en la ejecución de: apt autoremove"
echo ""
exit 1
fi
_add_lines_fstab(){
local l_r=1
local l_f=$(mktemp)
local l_fb="$(dirname "$0")/fstab.backup"
echo ""
echo "-------------------------------------------------------------------------------"
echo "Las líneas actuales del fstab son las siguientes:"
sleep 1
echo ""
cat /etc/fstab
echo ""
echo "-------------------------------------------------------------------------------"
echo "Las líneas a incluir en /etc/fstab son las siguientes:"
sleep 1
echo ""
cat $1
echo "-------------------------------------------------------------------------------"
while true; do
read -p "ATENCION: ¿Incluir las líneas en /etc/fstab (Y/N) " yn
case $yn in
[Yy]* ) l_r=0;break;;
[Nn]* ) echo 'No se incluyen las líneas';break;;
* ) echo "La respuesta ha de ser yes o no.";;
esac
done
if [ $l_r -eq 0 ]; then
echo "-------------------------------------------------------------------------------"
echo ""
echo "Se incluyen las nuevas lineas en /etc/fstab"
echo ""
echo "Se crea copia de seguridad de /etc/fstaba en $l_fb"
echo ""
cp /etc/fstab $l_f
if [ ! $? -eq 0 ]; then
echo "Error al copiar de /etc/fstab"
echo "Se cancela"
rm -f $l_f
exit 1
fi
cp /etc/fstab $l_fb
if [ ! $? -eq 0 ]; then
echo "Error al crear copia de seguridad de /etc/fstab"
echo "Se cancela"
rm -f $l_f
exit 1
fi
cat $1 >> $l_f
if [ ! $? -eq 0 ]; then
echo "Error al incluir las lineas en /etc/fstab"
echo "Se cancela"
rm -f $l_f
exit 1
fi
cp $l_f /etc/fstab
if [ ! $? -eq 0 ]; then
echo "Error al incluir las lineas en /etc/fstab"
echo "Se cancela"
rm -f $l_f
exit 1
fi
echo ""
echo "-------------------------------------------------------------------------------"
echo "El nuevo archivo /etc/fstab tiene las siguientes lineas:"
echo ""
sleep 2
cat /etc/fstab
echo ""
echo "-------------------------------------------------------------------------------"
echo "El nuevo archivo /etc/fstab tiene los siguientes premisos:"
echo ""
ls -l /etc/fstab
fi
rm -f $l_f
# aFolders[]
# .- Folder base
# .- Nombre folder a crear
# .- Nombre Usuario
# .- Nombre Grupo
# .- Permisos
# .- Modo
# .- Origen
crear_linea_fstab(){
local l_aDatos
local l_i
local l_org=""
local l_des=""
local l_cre=""
local l_gid=""
local l_uid=""
local l_fil=""
local l_dir=""
local l_mod=""
readarray -d ";" -t l_aDatos <<< "$1"
if [ "${l_aDatos[6]}" != "" ]; then
l_org="${l_aDatos[6]}"
l_des="${l_aDatos[0]}/${l_aDatos[1]}"
l_cre="/root/.cre_${l_aDatos[2]}"
l_gid="${l_aDatos[2]}"
l_uid="${l_aDatos[3]}"
l_fil="${l_aDatos[4]}"
l_dir="${l_aDatos[4]}"
l_mod="${l_aDatos[5]}"
echo "# $l_des - modo: $l_mod"
echo "$l_org $l_des cifs credentials=$l_cre,gid=$l_gid,uid=$l_uid,file_mode=$l_fil,dir_mode=$l_dir,iocharset=utf8,$l_mod 0 0"
fi
crear_lineas_fstab(){
local -n l_array=$1
local l_aDatos
local l_i
readarray -d ";" -t l_aDatos <<< "${l_array[1]}"
echo ""
echo "#-------------------------------------------------------------------------------"
echo "# Recursos en disco WD para usuario ${l_aDatos[2]}"
for l_i in "${l_array[@]}" ; do
if [[ "$l_i" != "" ]]; then
crear_linea_fstab "$l_i"
fi
done
echo ""
# 1-> Usuario
# 2-> Contraseña
crear_file_cre(){
l_file="/root/.cre_"$1
l_i=0
l_r=0
while true; do
read -p "El archivo de cerdenciales de [$1] existe, ¿sustituirlo? (Y/N) " yn
case $yn in
[Yy]* ) l_r=1;break;;
[Nn]* ) echo 'No se incluyen las líneas';break;;
* ) echo "La respuesta ha de ser yes o no.";;
esac
done
if [ $l_r -eq 1 ];then
echo "username=$1">$l_file
if [ ! $? -eq 0 ]; then
echo "Error al crear el archivo de credenciales de $1"
l_i=1
fi
echo "password=$2">>$l_file
if [ ! $? -eq 0 ]; then
echo "Error al crear el archivo de credenciales de $1"
l_i=1
fi
chown root:root $l_file
if [ ! $? -eq 0 ]; then
echo "Error al crear el archivo de credenciales de $1"
l_i=1
fi
chmod 0600 $l_file
if [ ! $? -eq 0 ]; then
echo "Error al crear el archivo de credenciales de $1"
l_i=1
fi
if [ $l_i -eq 0 ];then
echo "Creado el archivo de credenciales de $1"
ls -l $l_file
fi
fi
crear_files_cre(){
local l_datos
local -n l_array=$1
local l_i
for l_i in "${l_array[@]}" ; do
readarray -d ";" -t l_datos <<< "$l_i"
echo ""
crear_file_cre "${l_datos[0]}" "${l_datos[1]}"
echo ""
done
crear_user(){
l_user_main=$1
l_user=$2
l_pswd=$3
echo ""
echo "Creando usuario: $l_user"
echo ""
# Si existe previamente
if [ "$(cut -d: -f1 /etc/passwd | grep $l_user)" = "$l_user" ]; then
if [ "$(cut -d: -f1 /etc/passwd | grep $l_user_main)" != "$l_user" ]; then
# Eliminando usuario principal de los grupos de los usuarios
deluser "$l_user_main" "$l_user" > /dev/null 2>&1
if [ ! $? -eq 0 ]; then
echo "Error al quitar el usuario $l_user_main del grupo $l_user"
else
echo "OK: Se ha elimiando el usuario $l_user_main del grupo $l_user"
fi
fi
# Eliminar usuario y su archivos/configuración
userdel -r "$l_user" > /dev/null 2>&1
if [ ! $? -eq 0 ]; then
echo "Error al eliminar $l_user"
else
echo "OK: Se ha elimiando $l_user"
fi
fi
# Crear usuarios y su home directory (-m)
useradd -m "$l_user" > /dev/null 2>&1
if [ ! $? -eq 0 ]; then
echo "Error al crear el usuario $l_user"
echo "Se cancela el script"
exit 1
else
echo "OK: Se ha creado el usuario $l_user"
fi
# Asignar contraseña
chpasswd <<< "$2:$3" > /dev/null 2>&1
if [ ! $? -eq 0 ]; then
echo "Error al asignar la contraseña al usuario $l_user"
else
echo "OK: Se ha asignado correctamente la contraseña al usuario $l_user"
fi
# Asignar el grupo del usuario creado como grupo secundario del
# usuario principal
usermod -aG "$l_user" "$l_user_main" > /dev/null 2>&1
if [ ! $? -eq 0 ]; then
echo "Error al asignar $l_user_main al grupo $l_user"
else
echo "OK: Asignado $l_user_main al grupo $l_user"
fi
_check_read_only_directory(){
if [ "$(grep "$1 ro" /proc/self/mountinfo)" != "" ]; then
echo 1
else
echo 0
fi
crear_users(){
local l_datos
local -n l_array=$2
local l_i
for l_i in "${l_array[@]}" ; do
readarray -d ";" -t l_datos <<< "$l_i"
echo ""
crear_user "$1" "${l_datos[0]}" "${l_datos[1]}"
echo ""
done
# .- 0 Folder base
# .- 1 Nombre folder a crear
# .- 2 Nombre Usuario
# .- 3 Nombre Grupo
# .- 4 Permisos
crear_folder(){
local l_aDatos
local l_i
local l_remount=0
readarray -d ";" -t l_aDatos <<< "$1"
echo ""
echo "Creando directorio ${l_aDatos[0]}/${l_aDatos[1]}"
# Crear directorio si no existe
if [ ! -d "${l_aDatos[0]}/${l_aDatos[1]}" ]; then
mkdir "${l_aDatos[0]}/${l_aDatos[1]}"
if [ ! $? -eq 0 ]; then
echo "Error mkdir"
echo "Se cancela el script"
exit 1
fi
fi
# Comprobar si es un punto de montaje de read only, en cuyo caso hay que des-
# montarlo previamente para cambiar propietario y premisos.
if [ $(_check_read_only_directory "${l_aDatos[0]}/${l_aDatos[1]}" ) -eq 1 ]; then
umount "${l_aDatos[0]}/${l_aDatos[1]}"
if [ ! $? -eq 0 ]; then
echo "Error desmontando ${l_aDatos[0]}/${l_aDatos[1]}"
echo "Se cancela el script"
exit 1
fi
l_remount=1
echo "Se ha desmontado ${l_aDatos[0]}/${l_aDatos[1]}"
fi
# Asignar propietario: Usuario y grupo
echo "Asignando propietario y grupo"
chown "${l_aDatos[2]}":"${l_aDatos[3]}" "${l_aDatos[0]}/${l_aDatos[1]}"
if [ ! $? -eq 0 ]; then
echo "Error chown: $output"
echo "Se cancela el script"
exit 1
fi
# Asignar premisos Propietario / Grupo / Otros
echo "Asignando premisos"
chmod ${l_aDatos[4]} "${l_aDatos[0]}/${l_aDatos[1]}"
if [ ! $? -eq 0 ]; then
echo "Error chmod"
echo "Se cancela el script"
exit 1
fi
# Montar si previamente se desmontó.
if [ $l_remount -eq 1 ]; then
mount "${l_aDatos[0]}/${l_aDatos[1]}"
if [ ! $? -eq 0 ]; then
echo "Error montando ${l_aDatos[0]}/${l_aDatos[1]}"
echo "Se cancela el script"
exit 1
fi
echo "Se ha montado ${l_aDatos[0]}/${l_aDatos[1]}"
fi
crear_folders_users(){
local -n l_array=$1
local l_i
for l_i in "${l_array[@]}" ; do
if [[ "$l_i" != "" ]]; then
crear_folder "$l_i"
fi
done
# Inicio script
declare -a aPackages
declare -a aFolders
declare -a aUsers
declare -a aCredenciales
if [[ ! "$EUID" = 0 ]]; then
echo ""
echo "Error: Es necesario ejecutar el script como root."
echo "Se cancela."
echo ""
exit 1
fi
# Crear copia de seguridad
_crear_backup
# Actualización SO
_update_SO
# Instación de los paquetes necesarios
aPackages[1]="cifs-utils"
_install_packages aPackages
# Crear usuarios [Usuario;Contraseña]
# (finalizar cada elemento con ;)
aUsers[1]="invitado;35;"
aUsers[2]="pablo;36;"
aUsers[3]="diego;37;"
aUsers[4]="marisa;38;"
crear_users "juanp" aUsers
# Crear archivo de credenciales de los usuarios para acceder a WD
# [Usuario;Contraseña]
# (finalizar cada elemento con ;)
aCredenciales[1]="invitado;xx;"
aCredenciales[2]="pablo;xx;"
aCredenciales[3]="diego;xx;"
aCredenciales[4]="marisa;xx;"
aCredenciales[4]="juanp;xx;"
crear_files_cre aCredenciales
# Crear estructura de directorio para los usuarios
#eliminar_folder_advertencia
# aFolders[]
# El primer directorio se creará directamente en /mnt y de él colgarán los
# directorios en los que se montarán los recursos. A este directorio el usuario
# tendrá acceso exclusivamente de acceo y lectura (550) de forma que no pueda
# crear directorios ni archivos en él y sólo pueda hacerlo en los directorios
# en los que se montan los recursos.
# .- Folder base
# .- Nombre folder a crear
# .- Nombre Usuario
# .- Nombre Grupo
# .- Permisos
# .- Modo de acceso:
# ..- rw : read & write
# ..- ro : read only
echo "" > ft.txt
aFolders[1]="/mnt;marisa;marisa;marisa;0550;ro;;"
aFolders[2]="/mnt/marisa;marisa;marisa;marisa;0770;rw;//192.168.0.158/marisa;"
aFolders[3]="/mnt/marisa;invitado;marisa;marisa;0770;rw;//192.168.0.158/invitado;"
aFolders[4]="/mnt/marisa;multimedia;marisa;marisa;0550;ro;//192.168.0.158/multimedia;"
crear_folders_users aFolders
crear_lineas_fstab aFolders >> ft.txt
aFolders[1]="/mnt;juanp;juanp;juanp;0550;ro;;"
aFolders[2]="/mnt/juanp;juanp;juanp;juanp;0770;rw;//192.168.0.158/juanp;"
aFolders[3]="/mnt/juanp;invitado;juanp;juanp;0770;rw;//192.168.0.158/invitado;"
aFolders[4]="/mnt/juanp;multimedia;juanp;juanp;0770;rw;//192.168.0.158/multimedia;"
crear_folders_users aFolders
crear_lineas_fstab aFolders >> ft.txt
aFolders[1]="/mnt;pablo;pablo;pablo;0550;ro;;"
aFolders[2]="/mnt/pablo;pablo;pablo;pablo;0770;rw;//192.168.0.158/pablo;"
aFolders[3]="/mnt/pablo;invitado;pablo;pablo;0770;rw;//192.168.0.158/invitado;"
aFolders[4]="/mnt/pablo;multimedia;pablo;pablo;0550;ro;//192.168.0.158/multimedia;"
crear_folders_users aFolders
crear_lineas_fstab aFolders >> ft.txt
aFolders[1]="/mnt;diego;diego;diego;0550;ro;;"
aFolders[2]="/mnt/diego;diego;diego;diego;0770;rw;//192.168.0.158/diego;"
aFolders[3]="/mnt/diego;invitado;diego;diego;0770;rw;//192.168.0.158/invitado;"
aFolders[4]="/mnt/diego;multimedia;diego;diego;0550;ro;//192.168.0.158/multimedia;"
crear_folders_users aFolders
crear_lineas_fstab aFolders >> ft.txt
aFolders[1]="/mnt;invitado;invitado;invitado;0550;ro;;"
aFolders[2]="/mnt/invitado;invitado;invitado;invitado;0770;rw;//192.168.0.158/invitado;"
aFolders[3]=""
aFolders[4]=""
crear_folders_users aFolders
crear_lineas_fstab aFolders >> ft.txt
_add_lines_fstab "ft.txt"
echo ""
echo ""
mount -a
if [ ! $? -eq 0 ]; then
echo "Error al montar"
exit 1
fi
echo "Proceso finalizado"
exit 0
En ocasiones durante el arranque no se montan correctamente los recursos al
aparecer el error:
mount error(101): Network is unreachable
Con el comando journalctl -u mnt-provi.mount podemos ver el error
Nov 25 21:29:59 ubuntu systemd[1]: Mounting /mnt/provi...
Nov 25 21:29:59 ubuntu mount[846]: mount error(101): Network is unreachable
Nov 25 21:29:59 ubuntu mount[846]: Refer to the mount.cifs(8) manual page (e.g.>
Nov 25 21:29:59 ubuntu systemd[1]: mnt-provi.mount: Mount process exited, code=>
Nov 25 21:29:59 ubuntu systemd[1]: mnt-provi.mount: Failed with result 'exit-co>
Nov 25 21:29:59 ubuntu systemd[1]: Failed to mount /mnt/provi.
Se crea un script que se carga en el crontab del root para comprobar que se
ha montado todo los recursos, y en caso contrario los monta.
Con sudo crontab -e cargamos la siguiente linea:
@reboot bash /home/juanp/chk_mount/montar.sh
#!/bin/bash
# Raspberry PI - Ubuntu Server
# Este script se carga en el crontab del root para comprobar que se ha montado
# todo los recursos, ya que en ocasiones durante el arranque no se montan co-
# rrectamente los recursos al aparecer el error:
# mount error(101): Network is unreachable
# Con el comando journalctl -u mnt-provi.mount podemos ver el error
# Nov 25 21:29:59 ubuntu systemd[1]: Mounting /mnt/provi...
# Nov 25 21:29:59 ubuntu mount[846]: mount error(101): Network is unreachable
# Nov 25 21:29:59 ubuntu mount[846]: Refer to the mount.cifs(8) manual page (e.g.>
# Nov 25 21:29:59 ubuntu systemd[1]: mnt-provi.mount: Mount process exited, code=>
# Nov 25 21:29:59 ubuntu systemd[1]: mnt-provi.mount: Failed with result 'exit-co>
# Nov 25 21:29:59 ubuntu systemd[1]: Failed to mount /mnt/provi.
# Con sudo crontab -e cargamos la siguiente linea:
# @reboot bash /home/juanp/chk_mount/montar.sh
# Versión: 1.00
# Fecha: 26/11/22
_trap_exit(){
rm -f $f_mounts
rm -f $f_points
rm -f $f_result
trap _trap_exit EXIT
f_mounts=$(mktemp)
f_points=$(mktemp)
f_result=$(mktemp)
f_file_log=$(basename -- "$0")
f_file_log="${f_file_log%.*}"
f_file_log="$f_file_log.log"
f_file_log="$(dirname "$0")/$f_file_log"
echo "Fecha: "$(date) > $f_file_log
echo ""
_montar(){
until ping -nq -c3 192.168.0.158; do
# Waiting for network
sleep 1
done
mount -a
if [ ! $? -eq 0 ]; then
echo "Error al montar"
exit 1
else
echo "OK montaje"
fi
_check_mount(){
### Shows your current mounted points en /mnt
mount | sed '/^#/d' | sed '/^$/d' | sed 's/ */ /g' | cut -d" " -f3 | sort | grep /mnt > $f_mounts
### Shows /etc/fstab mounted points en /mnt
cat /etc/fstab | sed '/^#/d' | sed '/^$/d' | sed 's/ */ /g' | cut -d" " -f2 | sort | grep /mnt > $f_points
### Displays differences between the file mount points
### (if a mount point has been changed since bootup
### - it will not catch it (say umount and mount-ing a different reference).
if [ "$(diff $f_mounts $f_points)" != "" ]; then
echo "Error: No está todo montado correctamente."
echo " Se va a proceder a montar de nuevo [mount -a]"
diff $f_mounts $f_points > $f_result
cat $f_result
echo ""
echo "Ejecutando mount -a"
_montar
else
echo "Todo está montado correctamente."
echo ""
cat $f_mounts
echo ""
fi
sleep 10
_check_mount >> $f_file_log
exit 0
Reiniciar el servidor SSH
sudo service ssh restart
Editar configuración servidor
sudo nano /etc/ssh/sshd_config
Quién está conectado
who
La utilidad mount.cifs asocia el nombre UNC (recurso de red exportado) especi-
ficado como servicio (utilizando la sintaxis //servidor/compartido, donde
"servidor" es el nombre del servidor o la dirección IP y "share" es el nombre
del recurso compartido) al punto de montaje del directorio local.
Las opciones de mount.cifs se especifican como una lista de pares clave=valor
separados por comas.
Instalación:
sudo apt install cifs-utils
Manual:
man mount.cifs
Sintaxis:
mount.cifs {service} {mount-point} [-o options]
Ejemplo línea en el fstab:
//192.168.0.158/multimedia /mnt/marisa/multimedia cifs credentials=/root/.cre_marisa,gid=marisa,uid=marisa,file_mode=0440,dir_mode=0550,iocharset=utf8,ro 0 0
.- //192.168.0.158/multimedia : recurso de red exportado.
.- /mnt/_marisa/multimedia : punto de montaje del directorio local.
.- cifs : montar un sistema de archivos CIFS
.- credentials=/root/.cre_marisa : archivo que contiene las credenciales
.- gid=juanp : establece el grupo propietario de todos
los archivos o directorios en el sistema de
archivos montado
.- uid=marisa : establece el usuario propietario de todos
los archivos o directorios en el sistema de
archivos montado
.- file_mode / dir_mode : establecen los permisos del propietario,
grupo y otros
.- iocharset=utf8 : conjunto de caracteres utilizado para conver-
tir los nombres de las rutas locales a y des-
de Unicode.
.- rw : montado para lectura y escritura
La carpeta del servidor se puede montar con las opciones:
.- ro mount read-only.
.- rw mount read-write.
El acceso al servidor se realiza con el nombre y contraseña de usuario defini-
dos en el archivo credentials (en el ejemplo: /root/.cre_marisa). Seránlos
permisos que tenga este usuario en el NAS WD aquellos que se otrogen al usua-
rio (uid) y grupo (gid). Tanto el uid como el gid han de existir en el
sistema cliente.
A la carpeta (/mnt/_marisa/multimedia) en la que se monta la carpeta remota
(//192.168.0.158/multimedia) se le asina como propietario el indicado en uid
y como grupo al que se indica en gid.
Los premisos del usuario, grupo y otros se establecen según los valores indi-
cados en file_mode y dir_mode. Si no se especifican permisos son completos
para el usuario, lectura y acceso para el grupo y al resto les da acceso y
lectura.
La preeminencia de los premisos es:
1.- Premisos del usuario indicado en el archivo de credenciales.
2.- Modo de acceso indicado rw / ro
3.- Los premisos otorgados según lo indicado en file_mode y dir_mode