Acceso inicial desde el navegador de un cliente
ACL - Lista de Control de Acceso
ACL - Lista de control de acceso
Configuración Directorios de Compose
Configuración Usuario(s) de Docker/Compose
Configuración archivo de variables de ambiente globales
Actualización: 30 de diciembre de 2025
Installing OMV7 on a Raspberry PI
Con Raspberry Pi Imager crear la MicroSD con "Raspberry Pi OS ( Legacy,
64-bit) Lite". A port of Debian Bookworm with security updates and no
desktop environment.
Atención:Se usa este sistema operativo porque...
Lite -> El SO no debe tener escritorio.
Legacy -> OMV 7 es la última versión estable y se instala sobre
Debian 12. Con Debian 13 se instala la versión OMV 8 que
es inestable.
Opciones de Raspberry Pi Imager:
General
Set hostname: raspberrypi.local (Poner el adecuado)
Set username and password
Username: Nombre del que será administrador, no poner juanp
(en las pruebas juanp)
Password: Una contraseña fuerte (en las pruebas 1)
Estas entradas crearán un usuario administrador, para su uso en
la línea de comandos, con capacidades SUDO
Set locale settings
Time zone: Europe/Madrid
Keyboard layout: es
Services
Enabled SSH
Use Password authentication
Acceder via ssh (ssh juanp@192.168.0.137) a la Raspberry pi
El router debería tener asignada esa ip a la tarjeta de la rasberry pi
( RaspBerry Pi - DC:A6:32:48:39:20 - 192.168.0.137 (fija) )
Actualizar
sudo apt-get update &&
sudo apt-get upgrade -y
Para ver la lista de repositorios:
sudo grep -Erh ^deb /etc/apt/sources.list*
cat /etc/apt/sources.list
Instalar OMV 7:
sudo wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
Tras la instalación hay que reiniciar si no se hace auotmáticamente.
sudo reboot
Una vez realizada la instalación de OpenMediaVault para el acceso inicial al
servidor desde un navegador se escribe:
http://[IP_NAS]
http://192.168.0.137
Si no se puede acceder hay que asegurarse de que el servicio ngnix está
activo, para ello desde la terminal de la rasberry pi ejecutar:
sudo systemctl start nginx
Iniciar sesión con admin - openmediavault
Revisar las actualizaciones disponibles [Sistema]
Cambiar contraseña administrador [Icono Usuario]
Crear un cerfificado SSL [Sistema - Certificados - SSL]
Configurar conexión segura usando el certificado creado
SSL/TLS habilitado
Forzar SSL/TLS
[Sistema - Área de trabajo]
Configurar el Dashboard [Opciones de usuario - Dashboard]
Activar omv-extras [Sistema - Omv-Extras]
Configurar Notificaciones
Dos opciones:
Descrita en los manuales asigando una ip fuera del rango, ...
Esta forma No funciona.
Manteniendo en el router la asignación de la IP a la dirección MAC
de la raspberry pi
Openmediavault permitirá el acceso SSH al usuario root de forma predeterminada
para poder acceder a un sistema problemas en caso de una instalación rota u
otras situaciones de mantenimiento. Debe desactivar este comportamiento en la
página Servicios | SSH por razones de seguridad después de la instalación.
Para mantener acceso root, debe crear un usuario no privilegiado y agregarlos
a los grupos _ssh y sudo. Después de eso, puede acceder con SSH en el sistema
con este usuario no privilegiado y ejecutar sudo su.
Revisar la configuración en el archivo:
cat /etc/ssh/sshd_config
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
StrictModes yes
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
AllowGroups root _ssh <<=== [Revisar]
AddressFamily any
Port 22
PermitRootLogin no <<=== [Revisar]
AllowTcpForwarding no
Compression no
PasswordAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 /var/lib/openmediavault/ssh/authorized_keys/%u
PubkeyAuthentication yes
Con la linea AllowGroups root _ssh sólo se permite acceso a los usuarios
pertenecientes a los grupos root y _ssh, hay que comprobar:
Que el grupo _ssh sólo contenga al usuario creado, en este caso juanp
cut -d: -f1,4 /etc/group | grep _ssh
El resultado debe ser:
_ssh:juanp
Que el grupo root esté vacío
cut -d: -f1,4 /etc/group | grep root
El resultado debe ser:
root:
Comprobar que no se permite el acceso como root con la directiva:
PermitRootLogin no
También se podría habilitar exclusivamente al usuario juanp con la directiva
AllowUsers
Configurar los discos que se usarán como almacenamiento. [REVISAR]
ATENCIÓN:Si se va a usar Docker usar EXT4.
Crear el sistema de archivo de los discos configurados anteriormente. Pre-
feriblemente usar EXT4.
Crear y configurar las carpetas necesarias, tanto para compartirlas poste-
riormente como las necesarias para los plugins, ...
Los permisos asignados al crear las carpetas se asignan a:
Propietario: root
Grupo: users
Otros
Los permisos asignados con esta opción son usados por los servicios para
configurar los derechos de acceso de usuarios y grupos.
Esta configuración no tiene ningún efecto sobre los permisos del sistema
de archivos.
Los permisos asignados aquí prevalecen sobre los permisos tradicionales.
Para modificar los permisos del sistema de archivos ha de usarse la opción
ACL (Lista de Control de Acceso).
Estas carpetas serán accesibles sólo si posteriormente se configuran en el
servicio adecuado (CIFS / NFS)
Crear los necesarios
Para impedir el acceso a la consola local o remota del servidor, en el apar-
tado Shell seleccionar /usr/sbin/nologin
Privileges and permissions explained under OMV
Las capas de permisos se pueden ajustar con:
Shared Folder
ACL
Samba
Samba - Extra Options
Las sucesivas capas sólo pueden restringir permisos que se haya otorgado en
alguna previa, es decir, en la capa Samba no puede otorgarse permisos de escri-
tura a un grupo si en el apartado carpeta compartida sólo se le ha asignado
permiso de lectura.
En el contexto de un NAS de Linux, utilizado como servidor doméstico, se
deben evitar los ACL. Mezclar permisos estándar de Linux y ACL puede causar
efectos inexplicables, si no se hace con cuidado. Sin embargo, los ACL se
pueden utilizar, si es necesario, para “negar” explícitamente el acceso a
uno o más usuarios en el Grupo.
Este campo presenta a los administradores domésticos y de pequeñas empresas
algunas opciones interesantes para la administración de acciones. Por
ejemplo, en la mitad superior de este cuadro de diálogo de Samba, existe la
opción de solo lectura. En un recurso compartido de Samba, el interruptor de
solo lectura restringirá aún más a los usuarios de grupo a acceso de solo
lectura, incluso si la carpeta compartida a continuación permite el acceso de
escritura.
Sin embargo, una “write list” permitirá a un administrador omitir
selectivamente el interruptor de solo lectura de Samba. En este caso, si la
instrucción write list=Fred se agrega al campo Opciones adicionales, el
usuario Fred tendrá acceso de escritura, mientras que el resto de los
usuarios del grupo seguirán estando restringidos a solo lectura, aplicado por
el interruptor de solo lectura de Samba.
Lo mismo podría hacerse para los usuarios del grupo con write list=@users
Agregar esta declaración permitiría a todos los usuarios del grupo, escribir
el acceso mientras se restringen otros con el interruptor de solo lectura.
SSH
SMB/CIFS
MiniDLNA
Flashmemory
El propósito principal del Plugin de Memoria Flash es reducir la frecuencia
de escrituras en los medios flash mediante la consolidación de escrituras
muy pequeñas en una escritura masiva más grande que se descarga en la unidad
de arranque al apagarse. Esto reduce drásticamente el número de bloques es-
critos físicamente en el dispositivo flash. El plugin puede reducir el núme-
ro de bloques escritos en la unidad Flash, potencialmente, por un orden de
magnitud o 1/10 de la cantidad que de otro modo se escribiría. Por extensión,
una unidad de un tamaño determinado podría durar hasta 10 veces más de lo que
duraría sin el plugin Flash Media.
Marcar las casillas
Extended attributes
Store DOS attributes
La configuración se encuentra en /etc/samba/smb.conf
sudo nano /etc/samba/smb.conf
Se prueba Antivirus y File Browser
[Sistema - Plugins]
Crear un grupo de usuarios para acceder: gmultimedia
[Gestión de usuarios - Grupos]
Crear (Asignar si ya existiera) un usuario para acceder Read/Write a la
carpeta multimedia. Agregarle al grupo gmultimedia. Pruebas ujuanp
[Gestión de usuarios - Usuarios]
Crear una carpeta compartida para almacenar los archivos multimedia.
[Almacenamiento - Carpetas Compartidas]
Nombre: multimedia
Permisos: Lectura/Escritura para todos menos para Otros
Asignar permisos Read/Write al grupo multimedia
[Almacenamiento - Carpetas Compartidas - Permisos]
Configurar acceso a la carpeta multimedia para escribir, leer, ... con
el servicio SMB.
Read Only
write list=ujuanp
Instalar el plugin y activar el servicio
Añadir la carpeta multimedia
La configuración se encuentra en /etc/minidlna.conf
Si está activo el FireWall hay que incluir las reglas que permitan su uso.
En [Sistema - Plugins] seleccionar e instalar: openmediavault-compose 7.X
La instalación del plugin openmediavault-compose también instalará el plugin
openmediavault-sharerootfs como dependencia.
Servicios > Compose > Configuracion
La principal recomendación aquí es mantener separados los datos de docker y
el sistema operativo OMV.
Los directorios recomendados son:
appdata
data
backup_compose
docker
Archivos compose >> [Directorio: appdata]
Esta carpeta contiene los archivos de configuración y los datos per-
sistentes de los contenedores por defecto.
El plugin creará subcarpetas dentro de la carpeta de appdata para ca-
da archivo de composición que generemos. El nombre de cada subcarpeta
será el mismo que el archivo de composición.
Esta subcarpeta contendrá una copia del archivo yml y el archivo env
generado en la GUI. Estas son solo copias de seguridad, no deben mo-
dificarse excepto en la interfaz gráfica de usuario del plugin.
Si establece volúmenes con rutas relativas (a través de la expresión
./ por ejemplo ./config) en sus archivos de composición, esas carpe-
tas se crearán dentro de la subcarpeta correspondiente a ese archivo
de composición.
Datos >> [Directorio: data]
El uso de este campo es opcional. Este campo en la configuración del
plugin le permite definir una ruta a una carpeta compartida utilizan-
do la variable CHANGE_TO_COMPOSE_DATA_PATH. En la GUI se puede ver
una nota que dice: “Opcional - Ubicación de los datos persistentes
del contenedor”, este era el objetivo cuando se creó el plugin ya que
en ese momento las variables de entorno no eran compatibles para las
rutas en la utilidad de bakup del complemento. En este punto, ya no
es un problema y todas las rutas se pueden definir en el archivo de
variables de entorno.
Este campo es útil, a pesar de la leyenda en la GUI sobre datos per-
sistentes, utilizaremos esta variable para definir la ruta a la car-
peta de datos del sistema. Por los datos de los usuarios entendemos
el sistema de archivos de almacenamiento principal donde tendrá la
mayoría de los datos, como películas u otros tipos de archivos.
Backup >> [Directorio: backup_compose]
El plugin de composición le permite programar copias de seguridad
automáticas de datos de contenedores persistentes. Estas copias de
seguridad se almacenarán en esta carpeta.
Docker >> [Directorio: /var/lib/docker - docker ]
Esta carpeta contiene los archivos que docker utiliza internamente,
como imágenes descargadas y otra información necesaria para que docker
funcione.
Para definir esta ruta es necesario definir la ruta completa. Los en-
laces simbólicos a veces pueden causar problemas.
ATENCIÓN:
El sistema de archivos donde está la carpeta docker debería ser
preferiblemente EXT4.
La ruta si se define ha de ser la ruta completa al directorio.
El mecanismo de seguridad de docker se basa en asignar al contenedor en nues-
tro sistema los permisos equivalentes a los permisos que el usuario asignado
a ese contenedor tiene.
Hay dos opciones:
Crear un único usuario que tenga permiso para escribir/leer los directo-
rios que todos los contenedores necesiten y que no tenga acceso a los ar-
chivos del sistema.
Crear un usuario específico con los permisos pertinentes para cada conte-
nedor.
En los enlaces hay información detallada.
Por ahora se opta por la primera opción, se crea un usuario llamado appsuer
y se le da acceso exclusivamente a la carpeta appdata
El plugin le permite definir variables de entorno global en un archivo que es-
tará disponible para todos los contenedores en ejecución. Esto significa que
las variables definidas en este archivo se pueden utilizar en los diferentes
archivos de composición. Cuando inicie un contenedor, docker reemplazará esas
variables con sus valores reales.
Esto es muy útil para definir rutas a carpetas o al usuario que ejecuta el con-
tenedor. Definimos estos valores una vez y los actualizamos automáticamente en
todos los contenedores.
Archivo de variables de ambiente globales:
# THE FOLLOWING VARIABLES CAN BE USED IN ANY COMPOSE FILE
# THEIR VALUE WILL BE REPLACED BY THE VALUE ASSIGNED HERE
# YOU CAN ADD AS MANY VARIABLES AS YOU NEED
# Customize the PID and GID value of your appuser user.
# You can see it in the OMV GUI in the USERS > USERS tab
APPUSER_PUID=1003
APPUSER_PGID=100
# Customize your time zone value.
# You can see it in the OMV GUI in the SYSTEM > DATE & TIME tab
TIME_ZONE_VALUE=Europe/Madrid
# In this file you can define how many paths you need for different compose files.
# The following are examples corresponding to the example system in the Docker on OMV document on the omv-extras wiki.
# Customize the values according to your system configuration.
PATH_TO_APPDATA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/appdata
PATH_TO_DATA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/data
#PATH_TO_DOCUMENTS=
PATH_TO_MEDIA=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/multimedia
#PATH_TO_MOVIES=
#PATH_TO_PHOTOS=
PATH_TO_BACKUPS=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/docker/backup_compose
PATH_TO_DOWNLOADS=/srv/dev-disk-by-uuid-b6c7c45a-2420-40a6-9140-c2214e89a148/download
Los valores de la variables se corresponden con los del usuario appsuser
APPUSER_PUID=1003
APPUSER_PGID=100
En la GUI de OMV, vaya a SERVICIOS > COMPONER > ARCHIVOS y presionar el botón
EDITAR ARCHIVO DE ENTORNO GLOBAL.
En el campo ENTORNO GLOBAL copia y pega el archivo de anterior.
Personalízalo con tus propios valores:
PUID y PGID: Puede ver los valores de usuario appuser en el apartado
[Usuarios] en las columnas UID y GID.
TZ: Puede ver su configuración local en el campo [Sistema - Fecha y hora]
APPDATA: La ruta absoluta de la carpeta compartida de appdata se puede
ver en [Almacenamiento - Carpetas Compartidas] en la columna [Ruta Ab-
soluta]. Copia haciendo clic en el enlace.
Personalice los valores de todas las rutas según la configuración del sis-
tema. Si necesitas definir otras rutas diferentes también puedes hacerlo
aquí de la misma manera que el resto de las variables.
Puede definir otras variables de acuerdo a sus necesidades, como las contra-
señas de la base de datos o cualquier valor que necesite su archivo compues-
to.
Enlaces
Acceso web con ip:9091
Configuración:
# Date: 2025-06-01
# https://hub.docker.com/r/linuxserver/transmission
services:
transmission:
image: lscr.io/linuxserver/transmission:latest
container_name: transmission
environment:
- PUID=${APPUSER_PUID}
- PGID=${APPUSER_PGID}
- TZ=${TIME_ZONE_VALUE}
- TRANSMISSION_WEB_HOME= #optional
- USER= #optional
- PASS= #optional
- WHITELIST= #optional
- PEERPORT= #optional
- HOST_WHITELIST= #optional
volumes:
- ${PATH_TO_APPDATA}/transmission/config:/config
- ${PATH_TO_DOWNLOADS}/transmission/downloads:/downloads
- ${PATH_TO_DOWNLOADS}/transmission/watch:/watch
ports:
- 9091:9091
- 51413:51413
- 51413:51413/udp
restart: unless-stopped
# Date: 2025-06-01
# https://hub.docker.com/r/linuxserver/jellyfin
# https://jellyfin.org/docs/
services:
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
environment:
- PUID=${APPUSER_PUID}
- PGID=${APPUSER_PGID}
- TZ=${TIME_ZONE_VALUE}
#- JELLYFIN_PublishedServerUrl=192.168.0.5 #optional
volumes:
- ${PATH_TO_APPDATA}/jellyfin/config:/config
- ${PATH_TO_MEDIA}:/multimedia
ports:
- 8096:8096
#- 8920:8920 #optional
#- 7359:7359/udp #optional
#- 1900:1900/udp #optional
restart: unless-stopped
# Date: 2025-06-01
# https://hub.docker.com/r/linuxserver/plex
# https://github.com/plexinc/pms-docker
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=${APPUSER_PUID}
- PGID=${APPUSER_PGID}
- VERSION=docker
- PLEX_CLAIM= #optional
volumes:
- /dev/shm:/transcode
- /etc/localtime:/etc/localtime:ro
- ${PATH_TO_APPDATA}/plex/database:/config
- ${PATH_TO_MEDIA}:/multimedia:/multimedia
restart: unless-stopped
openmediavault-sftp 7.0.6
sftp server
Configure sftp server using jails
openmediavault-timeshift 7.0.1
openmediavault-webdav 7.0.8
openmediavault-wireguard 7.0.7
WireGuard is an extremely simple yet fast and modern VPN that utilizes
state-of-the-art cryptography. It aims to be faster, simpler, leaner, and
more useful than IPsec, while avoiding the massive headache. It intends to
be considerably more performant than OpenVPN. WireGuard is designed as a
general purpose VPN for running on embedded interfaces and super computers
alike, fit for many different circumstances.
Changeteection
Monotorizar cambios en web,s
mkdocs
pihole
Pi-hole es una herramienta de bloqueo de anuncios a nivel de red que permite
filtrar anuncios y rastreadores en toda tu red local.
Instalado en una Raspberry Pi, Pi-hole actúa como un servidor de nombres de
dominio (DNS) para tu red. Cuando un dispositivo en tu red intenta acceder a
un sitio web, consulta al servidor DNS para traducir el nombre del sitio en
una dirección IP.
%5*Cb20@dEe29#4a0{}B98de54F@$5#d1a49]9871*Ec4d@19B06]349f[@-4{aA
# Date: 2025-06-01
# https://hub.docker.com/r/linuxserver/plex
# https://github.com/plexinc/pms-docker
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
environment:
- PUID=${APPUSER_PUID}
- PGID=${APPUSER_PGID}
- VERSION=docker
- PLEX_CLAIM= #optional
volumes:
- /dev/shm:/transcode
- /etc/localtime:/etc/localtime:ro
- ${PATH_TO_APPDATA}/plex/database:/config
- ${PATH_TO_MEDIA}:/multimedia:/multimedia
restart: unless-stopped
mkdocs | Error: Config file 'mkdocs.yml' does not exist.
- PUID=${APPUSER_PUID}
- PGID=${APPUSER_PGID}
volumes:
- ${PATH_TO_APPDATA}/mkdocs/config:/config