Ausführen des Skripts als Benutzer mit Root-Berechtigungen

Ausführen des Skripts als Benutzer mit Root-Berechtigungen

Aufgrund widersprüchlicher und sich ständig ändernder Berechtigungen für gemountete Laufwerke (die aufgrund der Entwicklungsstruktur von Programmen nicht einfach gelöst werden können) gibt es ein Skript, das mit Root-Berechtigungen ausgeführt werden muss.

Dies ist mit möglich sudo /usr/serverm1/lsintdund liefert gute Ergebnisse. Wir möchten dieses Skript jedoch automatisch beim Start ausführen.

Das Ausführen des Skripts unter unserem Hauptbenutzer beim Start führt aufgrund unzureichender Berechtigungen zu einem Core Dump. Daher dachten wir, wir könnten es in crontab wie @reboot /usr/serverm1/lsintdvorgeschlagen einstellenHier, allerdings wird es mit den Einstellungen und der Konfiguration vom Root-Benutzer (der nicht vorhanden ist) ausgeführt.

TLDR: Wie können wir das Skript genau so ausführen, wie es mit dem Befehl sudo /usr/serverm1/lsintdbeim Start ausgeführt würde?

Ich habe auch versucht, es chmod u+xauf die Binärdatei anzuwenden, aber dies führte immer noch zu einem Core Dump, als ob es mit regulären Berechtigungen ausgeführt worden wäre (Idee übernommen ausLassen Sie einen Benutzer ein Skript mit Root-Berechtigungen ausführen).

Randnotiz:Ich gebe zu, dass es sich hierbei um ein XY-Problem handelt, aufgrund der langsamen und schlecht organisierten Entwicklungsstruktur einiger der anderen Dienste auf unserem Server haben wir jedoch keine Möglichkeit, die Grundprobleme zu lösen und müssen stattdessen einen Workaround finden.

Antwort1

Eine Möglichkeit wäre, eine systemd-Einheit zu erstellen.
Alle möglichen Optionen finden Sie hier:www.freedesktop.org/.../systemd.unit.html aber ich werde ein einfaches Beispiel vorstellen:

1.Erstellen wir ein Bash-Skript, das Datum und Uhrzeit jedes Systemstarts in die Datei schreibt: /root/file
Nur der Benutzer hat die Berechtigung, Dateien im Verzeichnis rootzu schreiben und zu bearbeiten . Ich werde den Benutzer mit ändern . Erstellen wir ein Skript und machen es ausführbar/root
rootsudo su -
/root/timelog.shchmod +x /root/timelog.sh

   #!/bin/bash

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

2.Jetzt brauchen wir die System UnitDatei:/etc/systemd/system/timelog.service

[Unit]
Description=timelog.service

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

[Install]
WantedBy=multi-user.target

3. Als letztes muss sichergestellt werden, dass es mit dem System startet:

systemctl enable timelog

verwandte Informationen