Запуск скрипта от имени пользователя с правами root

Запуск скрипта от имени пользователя с правами root

Из-за конфликтующих и постоянно меняющихся разрешений на смонтированных дисках (которые нелегко решить из-за структуры разработки программ), существует скрипт, который необходимо запускать с правами root.

Это можно сделать sudo /usr/serverm1/lsintdи получить хорошие результаты. Однако мы хотим, чтобы этот скрипт запускался автоматически при запуске.

Запуск скрипта под нашим основным пользователем при запуске приводит к сбросу ядра из-за недостаточных прав. Поэтому мы решили, что можем установить его в crontab как @reboot /usr/serverm1/lsintd(как предлагаетсяздесь, однако это запускает его с настройками и конфигурацией от root (которого не существует).

TLDR: Как можно запустить скрипт точно так же, как он будет запущен с командой sudo /usr/serverm1/lsintdпри запуске?

Я также попробовал применить его chmod u+xк двоичному файлу, однако это все равно привело к дампу ядра, как будто он был запущен с обычными разрешениями (идея взята изразрешить пользователю запускать скрипт с правами root).

Примечание:Я признаю, что это в некоторой степени проблема XY, однако из-за медленной и плохо организованной структуры разработки некоторых других служб на нашем сервере у нас нет возможности решить основные проблемы и вместо этого приходится искать обходной путь.

решение1

Одним из способов было бы создание юнита systemd.
Все возможные варианты вы можете найти здесь:www.freedesktop.org/.../systemd.unit.html но я собираюсь привести простой пример:

1. Давайте создадим скрипт bash, который будет записывать дату и время каждой загрузки системы в файл: /root/file
Только rootпользователь имеет права на запись и редактирование файлов в /rootкаталоге.
Я собираюсь переключить пользователя на rootс помощью sudo su -
Давайте создадим скрипт /root/timelog.shи сделаем его исполняемымchmod +x /root/timelog.sh

   #!/bin/bash

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

2.Теперь нам нужен System Unitфайл:/etc/systemd/system/timelog.service

[Unit]
Description=timelog.service

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

[Install]
WantedBy=multi-user.target

3.Последняя задача — убедиться, что он запустится вместе с системой:

systemctl enable timelog

Связанный контент