Cambio de usuario en procesos de NMIS / OMK (Debian)

Cambio de usuario en procesos de NMIS / OMK (Debian)

Introducción

Actualmente, la máquina virtual de FirstWave ejecuta los procesos del sistema y las tareas programadas utilizando el usuario predefinido root, lo que garantiza el funcionamiento completo del ecosistema, pero mantiene un nivel de privilegio superior al recomendado para operación regular.

En la presente guía, se describen los pasos necesarios para realizar el cambio de usuario. Este ajuste permite que los procesos se ejecuten bajo el usuario correcto, asegurando una administración adecuada de permisos, mayor seguridad y un funcionamiento más controlado del entorno.

A continuación, se muestra el proceso que debe aplicarse en un sistema operativo Debian.

Proceso

  1. Se accede vía consola con las credenciales correspondientes. Si se ejecuta un top, puede observarse que la mayoría de los procesos básicos del entorno se ejecutan con el usuario root.

image-20260206-183442.png
  1. Para iniciar con el proceso, se genera un script con el nombre deseado y extensión .sh; se asignan los permisos necesarios para que el script pueda ejecutarse correctamente. Se recomienda generarlo en la carpeta /home.

cd /home nano usuario_nuevo.sh
  • El archivo deberá de contener lo siguiente:

# Configuración de usuarios y grupos necesarios para OMK/NMIS useradd -m -U omkadmin usermod -a -G omkadmin nmis usermod -a -G nmis omkadmin # Si está utilizando Open-AudIT, también deberá agregar el usuario Apache (www-data) al grupo omkadmin. #usermod -a -G www-data omkadmin #usermod -a -G omkadmin www-data # Detener todos los servicios que impactan o son impactados por OMK/NMIS /usr/local/omk/bin/checkomkdaemons.sh stop service nmis9d stop systemctl stop cron.service sleep 10 service nmis9d stop # INICIO de cambios estándar del instalador OMK_DIR=/usr/local/omk # Establecer que la estructura de directorios de OMK sea escribible por el grupo echo Set OMK directory structure writable by group: sudo chown -R omkadmin:omkadmin "${OMK_DIR}"; sudo find "${OMK_DIR}" -type d -exec chmod 0770 '{}' \;; # Establecer que usuarios y grupo puedan escribir archivos echo Set user and group able to write files: sudo find "${OMK_DIR}" -type f -exec chmod 0660 '{}' \;; # Establecer scripts del directorio script como ejecutables para usuario y grupo echo Set scripts executable by user and group: sudo find "${OMK_DIR}/script" -type f -exec chmod 0770 '{}' \;; # Establecer scripts del directorio bin como ejecutables para usuario y grupo echo Set scripts executable by user and group: sudo find "${OMK_DIR}/bin" -type f -exec chmod 0770 '{}' \;; # FIN de cambios estándar del instalador # Eliminar subdirectorios PAR existentes (pueden tener permisos incorrectos) echo Delete existing PAR subdirectories as we may have set incorrect permissions on this directory sudo rm -Rf ${PAR_GLOBAL_TMPDIR}/par-* sudo rm -Rf /tmp/par-* # Asignar sticky bit al directorio PAR_GLOBAL_TMPDIR y acceso exclusivo para root echo Set sticky bit on $PAR_GLOBAL_TMPDIR directory and only executable by root. sudo chmod 1700 ${PAR_GLOBAL_TMPDIR} # Recrear directorios PAR usando root, nmis y omkadmin para inicializar permisos correctos echo Recreate $PAR_GLOBAL_TMPDIR/par- directories for root,nmis and omkadmin sudo ${OMK_DIR}/bin/patch_config.exe 2> /dev/null sudo -u nmis ${OMK_DIR}/bin/patch_config.exe 2> /dev/null sudo -u omkadmin ${OMK_DIR}/bin/patch_config.exe 2> /dev/null # Actualizar archivo opCommon.json con nuevos directorios de PID echo Update opCommon.json config with new PID directories sed -i 's/var\/run/var\/run\/omk/g' /usr/local/omk/conf/opCommon.json # Actualizar archivos de servicios systemd echo Update SYSTEMCTL Server Files echo omkd.service # Configurar servicio para ejecutarse con usuario/grupo omkadmin y nuevo directorio run sed -i 's/\[Service\]/\[Service\]\nUser\=omkadmin\nGroup\=omkadmin/g' /etc/systemd/system/omkd.service sed -i 's/\/var\/run/\/var\/run\/omk/g' /etc/systemd/system/omkd.service sed -i 's/\[Service\]/\[Service\]\nPermissionsStartOnly\=true\nExecStartPre\=\/bin\/sh \-c \"mkdir \-p \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chown omkadmin\.omkadmin \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chmod 3700 \/var\/run\/omk\/\"/g' /etc/systemd/system/omkd.service echo opchartsd.service # Aplicar mismos ajustes de usuario, grupo y directorio run sed -i 's/\[Service\]/\[Service\]\nUser\=omkadmin\nGroup\=omkadmin/g' /etc/systemd/system/opchartsd.service sed -i 's/\/var\/run/\/var\/run\/omk/g' /etc/systemd/system/opchartsd.service sed -i 's/\[Service\]/\[Service\]\nPermissionsStartOnly\=true\nExecStartPre\=\/bin\/sh \-c \"mkdir \-p \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chown omkadmin\.omkadmin \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chmod 3700 \/var\/run\/omk\/\"/g' /etc/systemd/system/opchartsd.service echo opconfigd.service # Aplicar mismos ajustes de usuario, grupo y directorio run sed -i 's/\[Service\]/\[Service\]\nUser\=omkadmin\nGroup\=omkadmin/g' /etc/systemd/system/opconfigd.service sed -i 's/\/var\/run/\/var\/run\/omk/g' /etc/systemd/system/opconfigd.service sed -i 's/\[Service\]/\[Service\]\nPermissionsStartOnly\=true\nExecStartPre\=\/bin\/sh \-c \"mkdir \-p \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chown omkadmin\.omkadmin \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chmod 3700 \/var\/run\/omk\/\"/g' /etc/systemd/system/opconfigd.service echo opeventsd.service # Aplicar mismos ajustes de usuario, grupo y directorio run sed -i 's/\[Service\]/\[Service\]\nUser\=omkadmin\nGroup\=omkadmin/g' /etc/systemd/system/opeventsd.service sed -i 's/\/var\/run/\/var\/run\/omk/g' /etc/systemd/system/opeventsd.service sed -i 's/\[Service\]/\[Service\]\nPermissionsStartOnly\=true\nExecStartPre\=\/bin\/sh \-c \"mkdir \-p \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chown omkadmin\.omkadmin \/var\/run\/omk\/\"\nExecStartPre\=\/bin\/sh \-c \"chmod 3700 \/var\/run\/omk\/\"/g' /etc/systemd/system/opeventsd.service # Ajustar servicio nmis9d para que se ejecute con usuario/grupo nmis echo nmis9d.service sudo sed -i '/\[Service\]/a User=nmis\nGroup=nmis' /etc/systemd/system/nmis9d.service # Actualizar configuración de logrotate para usar omkadmin echo Update logrotate config sed -i 's/create 0660 nmis nmis/create 0660 omkadmin omkadmin/g' /etc/logrotate.d/omk-rotate.conf sed -i 's/endscript/endscript\n\tsu omkadmin omkadmin/g' /etc/logrotate.d/omk-rotate.conf # Actualizar propietarios de tareas programadas (cron) de OMK/NMIS echo Update all crontab job owners sed -i 's/root/ omkadmin\t/g' /etc/cron.d/opaddress sed -i 's/root/ omkadmin\t/g' /etc/cron.d/opconfig sed -i 's/root/ omkadmin\t/g' /etc/cron.d/opevents sed -i 's/root/ omkadmin\t/g' /etc/cron.d/oplicense sed -i 's/root/ omkadmin\t/g' /etc/cron.d/opreports sed -i 's/root/ nmis\t/g' /etc/cron.d/nmis9 # Agregar verificación horaria de permisos al CRONTAB echo Add an Hourly Rights Check to CRONTAB touch /etc/cron.d/omk_check_omkadmin_user_group echo "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" >> /etc/cron.d/omk_check_omkadmin_user_group echo "# m h dom mon dow user command" >> /etc/cron.d/omk_check_omkadmin_user_group # Revisar archivos que no pertenecen a grupos esperados echo "40 * * * * root find /usr/local/omk ! -group omkadmin ! -group nmis ! -regex '/usr/local/omk/var/lib/common/par-.+' -exec ls -lAhd '{}' \;;" >> /etc/cron.d/omk_check_omkadmin_user_group # Revisar archivos no escribibles por omkadmin echo "42 * * * * omkadmin find /usr/local/omk ! -writable -exec ls -lAhd '{}' \;;" >> /etc/cron.d/omk_check_omkadmin_user_group # Revisar archivos con bit setgid activo echo "44 * * * * root find /usr/local/omk -perm /+2000 -exec ls -lAhd '{}' \;;" >> /etc/cron.d/omk_check_omkadmin_user_group # Revisar archivos con bit setuid activo echo "46 * * * * root find /usr/local/omk -perm /+4000 -exec ls -lAhd '{}' \;;" >> /etc/cron.d/omk_check_omkadmin_user_group
  • Se le dan permisos de ejecución al archivo:

chmod +x usuario_nuevo.sh
  • Se ejecuta el script:

bash usuario_nuevo.sh
  • Se mostrará algo similar a lo siguiente si la ejecución del script es correcta:

useradd: user 'omkadmin' already exists job complete! Set OMK directory structure writable by group: Set user and group able to write files: Set scripts executable by user and group: Set scripts executable by user and group: Delete existing PAR subdirectories as we may have set incorrect permissions on this directory Set sticky bit on /usr/local/omk/var/lib/common/ directory and only executable by root. Recreate /usr/local/omk/var/lib/common//par- directories for root,nmis and omkadmin Update opCommon.json config with new PID directories Update SYSTEMCTL Server Files omkd.service opchartsd.service opconfigd.service opeventsd.service nmis9d.service Update logrotate config Update all crontab job owners Add an Hourly Rights Check to CRONTAB
image-20260207-003547.png
  1. En este punto, se realizan validaciones para identificar posibles inconsistencias relacionadas con los archivos que el script modifica.

a) Validación de cron de opReports:

more /etc/cron.d/opreports
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

# this cron schedule runs the opReports scheduler every 5 minutes # # m h dom month dow user command */5 * * * * omkadmin export PAR_GLOBAL_TMPDIR=/usr/local/omk/var/lib/common/||:; /usr/local/omk/bin/opreports-schedu ler.exe */1 * * * * omkadmin export PAR_GLOBAL_TMPDIR=/usr/local/omk/var/lib/common/||:; /usr/local/omk/bin/opreports-genera te-one-offs
image-20260207-004920.png

b) Validación de cron de NMIS:

more /etc/cron.d/nmis9
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

# NMIS9 Cron Configuration # if you DON'T want any NMIS cron mails to go to nmis , # uncomment and adjust the next line # MAILTO=WhoeverYouAre@yourdomain.tld # some tools like fping reside outside the minimal path PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # note that almost all operations are now performed by the nmisd # m h dom month dow user command # create reports, Daily Monthly Weekly 9 0 * * * nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/bin/nmis-cli act=run-reports period=day type=all 9 1 * * 0 nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/bin/nmis-cli act=run-reports period=week type=all 9 2 1 * * nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/bin/nmis-cli act=run-reports period=month type=all # performance data */5 * * * * nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/bin/nmis-cli act=collect-top-data > /dev/null 0 * * * * nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/bin/nmis-cli act=collect-performance-data > /dev/null # Monitor daemon */5 * * * * nmis export $(/usr/bin/xargs < /etc/environment)||:; /usr/local/nmis9/admin/check_daemons.pl act=check-daemons start=1 quiet=1 ver bose=1
image-20260207-003738.png

c) Validación de archivo de rotación de logs:

more /etc/logrotate.d/omk-rotate.conf
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

# logrotate configuration file # the Opmantek Daemon needs to be reloaded to reopen the log files # if opEvents is installed (and new enough to hold logs open), # then the opeventsd also needs to be reloaded; ditto opconfigd # if opFlow is installed, then the oflowd also needs to be reloaded /usr/local/omk/log/*.log { rotate 15 daily maxsize 250M dateext dateformat -%Y-%m-%d.%s compress delaycompress create 0660 omkadmin omkadmin missingok notifempty sharedscripts postrotate { [ -e /etc/systemd/system/omkd.service ] && systemctl restart omkd >/dev/null; } || { { [ -x /etc/init.d/omkd ] && service omkd reload >/dev/null; } || true; } { [ -e /etc/systemd/system/opeventsd.service ] && systemctl restart opeventsd >/dev/null; } || { { [ -x /etc/init.d /opeventsd ] && grep -Fq reload /etc/init.d/opeventsd && service opeventsd reload >/dev/null; } || true; } { [ -e /etc/systemd/system/opflowd.service ] && systemctl restart opflowd >/dev/null; } || { { [ -x /etc/init.d/opf lowd ] && grep -Fq reload /etc/init.d/opflowd && service opflowd reload >/dev/null; } || true; } { [ -e /etc/systemd/system/opconfigd.service ] && systemctl restart opconfigd >/dev/null; } || { { [ -x /etc/init.d /opconfigd ] && grep -Fq reload /etc/init.d/opconfigd && service opconfigd reload >/dev/null; } || true; } { [ -e /etc/systemd/system/opchartsd.service ] && systemctl restart opchartsd >/dev/null; } || { { [ -x /etc/init.d /opchartsd ] && grep -Fq reload /etc/init.d/opchartsd && service opchartsd reload >/dev/null; } || true; } { [ -e /etc/systemd/system/ophad.service ] && systemctl restart ophad >/dev/null; } || { { [ -x /etc/init.d/ophad ] && grep -Fq reload /etc/init.d/ophad && service ophad reload >/dev/null; } || true; } endscript su omkadmin omkadmin } /usr/local/omk/log/snow_api.log { rotate 10 daily maxsize 250M compress delaycompress missingok notifempty }
image-20260206-210514.png

d) Validación del archivo de inicio del demonio de NMIS:

more /etc/systemd/system/nmis9d.service
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

# simple systemd unit file for the nmis9 daemon [Unit] Description=FirstWave NMIS9 Daemon After=network-online.target After=mongod.service Requires=mongod.service Wants=mongod.service Wants=network-online.target [Install] WantedBy=multi-user.target [Service] User=nmis Group=nmis Type=forking Restart=no EnvironmentFile=-/etc/environment PIDFile=/usr/local/nmis9/var/nmis_system/nmisd.pid TimeoutSec=90s KillMode=process ExecStart=/usr/local/nmis9/bin/nmisd
image-20260207-004141.png

e) Validación del archivo de inicio del demonio de opCharts:

more /etc/systemd/system/opchartsd.service
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

root@omk-vm9-debian11:/home# more /etc/systemd/system/opchartsd.service # simple systemd unit file for the Opmantek opCharts daemon [Unit] Description=FirstWave opCharts daemon After=network-online.target After=mongod.service Requires=mongod.service Wants=mongod.service Wants=network-online.target [Install] WantedBy=multi-user.target [Service] PermissionsStartOnly=true ExecStartPre=/bin/sh -c "mkdir -p /var/run/omk/" ExecStartPre=/bin/sh -c "chown omkadmin.omkadmin /var/run/omk/" ExecStartPre=/bin/sh -c "chmod 3700 /var/run/omk/" User=omkadmin Group=omkadmin Type=forking Restart=no EnvironmentFile=/etc/environment PIDFile=/var/run/omk/opchartsd.pid TimeoutSec=120s KillMode=control-group ExecStart=/usr/local/omk/bin/opchartsd.pl root@omk-vm9-debian11:/home#
image-20260206-211832.png

f) Validación del archivo de inicio del demonio de OMK:

more /etc/systemd/system/omkd.service
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

# simple systemd unit file for the Opmantek Webserver daemon [Unit] Description=FirstWave Webserver After=network-online.target After=mongod.service Requires=mongod.service Wants=mongod.service Wants=network-online.target [Install] WantedBy=multi-user.target [Service] PermissionsStartOnly=true ExecStartPre=/bin/sh -c "mkdir -p /var/run/omk/" ExecStartPre=/bin/sh -c "chown omkadmin.omkadmin /var/run/omk/" ExecStartPre=/bin/sh -c "chmod 3700 /var/run/omk/" User=omkadmin Group=omkadmin Type=forking Restart=no EnvironmentFile=/etc/environment PIDFile=/var/run/omk/opmantek.exe.pid TimeoutSec=120s KillMode=control-group ExecStart=/usr/local/omk/script/opmantek.pl -f -p /var/run/omk/opmantek.exe.pid -r
image-20260206-211838.png

g) Validación de los parámetros de pid de los demonios en el archivo opCommon.json

more /usr/local/omk/conf/opCommon.json | grep pid
  • La salida se mostrará de la siguiente manera. Valide con el siguiente texto de configuración para asegurarse de que la gestión del archivo se realizó correctamente. De lo contrario, edite el archivo y ajústelo como corresponda.

"opconfigd_pid" : "/var/run/omk/opconfigd.pid", "opeventsd_pid" : "/var/run/omk/opeventsd.pid", "opflowd_pid" : "/var/run/omk/opflowd.pid", "opchartsd_pid" : "/var/run/omk/opchartsd.pid",
image-20260206-211847.png
  1. Se recargan los demonios y se reinician:

systemctl daemon-reload systemctl restart nmis9d systemctl restart omkd systemctl restart opchartsd
  1. Es importante darle un reinicio a la máquina virtual:

reboot
  1. Al iniciar nuevamente la máquina virtual, se sugiere ejecutar un top para visualizar el usuario omkadmin que se ha configurado para la ejecución de los diferentes procesos del sistema.

image-20260209-162752.png
  1. Para concluir, se puede validar que los módulos se muestren de forma correcta vía UI.

Captura de pantalla 2026-02-09 180818-20260210-002303.png