Ejecutar script como usuario con permisos de root

Ejecutar script como usuario con permisos de root

Debido a los permisos conflictivos y en constante cambio en las unidades montadas (que no se pueden resolver fácilmente debido a la estructura de desarrollo de los programas), existe un script que debe ejecutarse con permisos de root.

Esto se puede hacer sudo /usr/serverm1/lsintdy proporciona buenos resultados. Sin embargo, deseamos ejecutar este script automáticamente al inicio.

La ejecución del script con nuestro usuario principal al inicio da como resultado un volcado de memoria debido a permisos insuficientes. Por lo tanto, pensamos que podríamos configurarlo en crontab como @reboot /usr/serverm1/lsintd(como se sugiereaquí, sin embargo, esto lo ejecuta con ajustes y configuración desde la raíz (que no existe).

TLDR: ¿Cómo podemos ejecutar el script exactamente como se ejecutaría con el comando sudo /usr/serverm1/lsintdal inicio?

También intenté aplicar chmod u+xal binario, sin embargo, esto todavía resultó en un volcado de núcleo como si se ejecutara con permisos regulares (idea tomada depermitir que un usuario ejecute un script con permisos de root).

Nota al margen:Admito que esto es en cierto modo un problema XY, sin embargo, debido a la estructura de desarrollo lenta y mal organizada de algunos de los otros servicios en nuestro servidor, no tenemos forma de resolver los problemas de raíz y, en cambio, debemos solucionarlo.

Respuesta1

Una forma sería crear una unidad systemd.
Todas las opciones posibles las puedes encontrar aquí:www.freedesktop.org/.../systemd.unit.html pero voy a presentar un ejemplo simple:

1.Creemos un script bash que escribirá la fecha y hora de cada inicio del sistema en el archivo: /root/file
solo rootel usuario tiene permisos para escribir y editar archivos en /rootel directorio.
Voy a cambiar de usuario rootcon sudo su -
Vamos a crear un script /root/timelog.shy hacerlo ejecutable.chmod +x /root/timelog.sh

   #!/bin/bash

   if ! [ /root/file ]; then touch /root/file; fi 
   echo $(date) >> /root/file

2.Ahora necesitamos el System Unitarchivo:/etc/systemd/system/timelog.service

[Unit]
Description=timelog.service

[Service]
Type=oneshot
ExecStart=/root/timelog.sh

[Install]
WantedBy=multi-user.target

3.La última tarea es asegurarse de que se inicie con el sistema:

systemctl enable timelog

información relacionada