Systemctl als nicht Root ausführen - Sudoers anpassen

Alles rund um sicherheitsrelevante Fragen und Probleme.
Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 16.06.2017 21:25:03

Hi,

ich habe hier zuhause aktuell einen kleinen Spieleserver am laufen und dieser wird mit systemctl gestartet/beendet etc.
Dazu habe ich für das entsprechende Spiel einen eigenen Benutzer ohne Home und mit Passwort angelegt.
Der Benutzer ist über Chown Besitzer des Spieleordners und Inhaltes. Wenn ich jedoch den Befehl zum starten des Servers eingebe bekomme ich die Meldung, das ich nicht die nötigen Rechte dazu habe.
Ich wollte daher nun die entsprechenden Befehle für den Benutzer zulassen.
Unter etc/sudoers.d/ habe ich nun mit visudo -f /etc/sudoers.d/Benutzername eine Datei mit dem Benutzernamen angelegt und folgendes eingefügt:

%Benutzername ALL= NOPASSWD: systemctl start Server.service
%Benutzername ALL= NOPASSWD: systemctl status Server.service
%Benutzername ALL= NOPASSWD: systemctl restart Server.service
%Benutzername ALL= NOPASSWD: systemctl stop Server.service

Wenn ich nun mit dem Benutzer systemctl start. Server.service ausführen will, bekomme ich wieder Access denied. Bei su Benutzer systemctl stop Server.service bekomme ich noch eine Passwortabfrage aber danach ist auch Schluss. Dort erscheint dann: /bin/systemctl: /bin/systemctl: Kann die Datei nicht ausführen.


Wo liegt mein Fehler? Unter Root funktioniert der Befehl: systemctl start Server.service einwandfrei. :/

TomL

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von TomL » 16.06.2017 21:57:26

Das %-Zeichen definiert den Eintrag als Gruppe. Wenn es sich nur um diesen einen Benutzer handelt, trage den Namen des Benutzer ohne "%" ein. Dann wird das wohl klappen.

%Benutzername ALL= NOPASSWD: systemctl start Server.service

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 16.06.2017 22:28:40

Okay, ich werde es gleich einmal ausprobieren. Wobei ich der Meinung war das ich den Benutzer in eine gleichnamige Gruppe gesteckt habe.

TomL

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von TomL » 16.06.2017 22:50:40

Ja, mag sein... aber ich kann nur nehmen, was Du geschrieben hast... und %Benutzername (UID) kann identisch sein mit %Benutzergruppe (GID), muss aber nicht. So sieht das bei mir rein zufällig entstanden mit dem virtuellen Benutzer "inet" aus

Code: Alles auswählen

id inet
uid=1001(inet) gid=1002(inet) Gruppen=1002(inet)
Das heisst, mit dieser Konstellation würde das bei Deinen Parametern nicht funktionieren. Eindeutig wirds eben mit dem echten Benutzernamen. Dieses Beispiel hat bei mir ganz früher funktioniert:

Code: Alles auswählen

thomas ALL=(ALL)NOPASSWD:/usr/local/bin/selnic
ach so... nicht zu vergessen.... systemctl sollte heissen:

Code: Alles auswählen

/bin/systemctl

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 16.06.2017 23:09:03

Leider brachte nichts den Erfolg.
Failed to start Server.service: Access denied
Und bei Versuch mit su:
/bin/systemctl: /bin/systemctl: Kann die Datei nicht ausführen.


So schaut die Datei "Benutzername" aus:

Benutzer ALL= NOPASSWD:/bin/systemctl start Server.service
Benutzer ALL= NOPASSWD:/bin/systemctl status Server.service
Benutzer ALL= NOPASSWD:/bin/systemctl restart Server.service
Benutzer ALL= NOPASSWD:/bin/systemctl stop Server.service

Folgendes steht in der Systemd:

[Unit]
Description=Beschreibung

[Service]
Type=simple
User=Benutzer
ExecStart=Pfad.......

TomL

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von TomL » 16.06.2017 23:16:46

Ich hatte oben auch ein Beispiel gepostet. Und nach der Änderung solltest Du Dich einmal abmelden und erneut anmelden.

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 16.06.2017 23:38:13

Habe es nochmals so angepasst:

Code: Alles auswählen

Benutzer ALL=(ALL)NOPASSWD:/bin/systemctl start Server.service
Der Server wurde neugestartet, keine Veränderung

TomL

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von TomL » 17.06.2017 12:14:07

Schoolisoutfan hat geschrieben:Der Server wurde neugestartet, keine Veränderung
Das ist mehr als merkwürdig.... poste bitte mal die folgenden Ausgaben... also die, die antworten:

Code: Alles auswählen

dpkg -l sudo systemd
uname -a
cat /proc/1/comm
hostnamectl
cat /etc/debian_version
cat /etc/*release

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 12:53:00

Du bist sicher, dass du systemctl ohne Passwort mit Sudo ausführbar machen willst?

Wäre es ev. eine bessere Möglichkeit, den Server mit einem systemd --user zu starten?

Was macht der Server genau? Unter welcher Benutzerkennung soll der laufen? (root ist wohl denkbar ungeeignet, zumal du ein eigenrs Home für den Gameserver-User hast...)

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 17.06.2017 14:42:15

dpkg -l sudo systemd

Code: Alles auswählen

root@Server:/home/sshmaster# dpkg -l sudo systemd
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name           Version      Architektur  Beschreibung
+++-==============-============-============-=================================
ii  sudo           1.8.10p3-1+d amd64        Provide limited super user privil
ii  systemd        215-17+deb8u amd64        system and service manager
uname -a

Code: Alles auswählen

Linux Server 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2 (2017-04-30) x86_64 GNU/Linux
cat /proc/1/comm

Code: Alles auswählen

systemd
hostnamectl

Code: Alles auswählen

   Static hostname: Server
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: afd56523a03443dcac26b90ec8debf34
           Boot ID: 9a29f555e949436390e54a6f4eab5050
  Operating System: Debian GNU/Linux 8 (jessie)
            Kernel: Linux 3.16.0-4-amd64
      Architecture: x86-64
cat /etc/debian_version cat /etc/*release

Code: Alles auswählen

PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Root ist als Zugang gesperrt. Es gibt für den SSH einen eigenen Zugang, dieser hat allerdings auch kein Root.
Den Service habe ich so angelegt: sudo nano /etc/systemd/system/Server.service

Sonst haben alle laufenden Prozesse einen eigenen Nutzer:

Also für Samba - Kodi, Teamspeak, Spieleserver. Generell soll kein Prozess als root laufen.

Abgesichert ist das ganze mit Fail2ban, Firewall, und Verbot des Rootzugangs, Zugang nur über separaten SSH ohne Root. Wäre wirklich wichtig da der Server zwar zuhause seht jedoch eine .de Domain bekommt um über das Netz erreichbar zu sein.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 15:00:05

Poste doch den Inhalt der service-unit des Spieleservers. Ich halte es irgendwo zwischen unklug und gefährlich angesiedelz, was du da vorhast... Da gibt es garantiert eine bessere und sicherere Lösung, um diesen Spieleserver zum Laufen zu bringen.

Soll der immer laufen, auch wenn du nicht eingelogt bist, oder nur wenn du dich einlogst und spielen willst?

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 17.06.2017 17:28:19

Wo liegt denn deines Erachtens das Problem? Alle Ports die nicht benötigt werden sind dicht, Zugang nur über SSH. In diesem Fall ist es ein factorio Server, da ich diesenicht das erste mal aufgesetzt habe bin ich wie folgt vorgegangen: https://gist.github.com/othyn/e1287fd93 ... 07227ed48c

Der Server stoppt automatisch wenn keiner drauf ist.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 18:07:51

systemctl über sudo ohne Passwort zugänglich machen ist wie einem entfernten Bekannten deine Wohnungsschlüssel zu leihen...

Du tust dir damit eine Sicherheitslücke auf oder zumindest nimmst du dir eine Hürde weg, dir dein System irrtümlich zu verändern und ev. gar unbrauchbar zu machen.

Es hat einen guten Grund, warum systemd (sofern es kein --user Prozess ist) nur mit rootrechten zugänglich ist.

Du hast immer noch nicht die Unit gepostet.

Willst du den bewusst starten, oder immer beim Login automatisch?

Schau dir einmal die sogenannten User-Sessions von systemd an. Die kannst du nämlich als User ohne sudo starten...

Stichwort: systemd --user

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 17.06.2017 19:06:21

Ich schaue nachhermal wenn ich Zuhause bin. Also ohne Passwort muss das ganze nicht laufen. Es wäre wie du schon sagtest vermutlich besser wenn der Befehl nur mit Passwort gestartet werden kann. Der Server läuft dauerhaft ohne angemeldeten User. Wenn ich den Server automatisch bei Systemstart starten lassen will bräuchte ich doch ein Start skript welches in Init.d liegt oder? Ich bin jedoch nicht in der Lage eines zu schreiben.
Dies ist die Unit:

Code: Alles auswählen

[Unit]
Description=Factorio Headless Server

[Service]
Type=simple
User=factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest /opt/factorio/saves/2.zip --server-settings /opt/factorio/data/server-settings.json

Würde folgendes funktionieren:

Code: Alles auswählen

$ cat ~/.config/systemd/factorio.service
[Unit]
Description=Factorio Headless Server

[Service]
Type=simple
User=factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest /opt/factorio/saves/2.zip --server-settings /opt/factorio/data/server-settings.json
Restart=always

starten über:

Code: Alles auswählen

cd /etc/systemd/system/
systemctl --factorio enable factorio.service

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 19:38:34

Du musst am Ende der Unit noch folgendes einfügen

Code: Alles auswählen

 
[Install]
WantedBy=multi-user.target
Und dann die Unit enablen

Code: Alles auswählen

 
root # systemctl daemon-reload
root # systemctl enable --now Server.service
Damit startet der Server sofort und wird beim Booten auch jeweils gestartet.

Ob der Server läuft, checkst du mit

Code: Alles auswählen

 
root # systemctl status Server.service
Zuletzt geändert von scientific am 19.06.2017 01:40:05, insgesamt 1-mal geändert.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 19:42:43

Btw. Initskripte in /etc/init.d sind Geschichte. Heute macht man das mit systemd Units.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 17.06.2017 20:15:21

Code: Alles auswählen

root # systemctl enable --now Server.service
Wenn ich das probiere bekomme ich die Meldung: --now Unbekannte Option

Das man initskripte nicht mehr nutzt ist an mir vorbei gegangen. Mein TS nutzt es noch. aber warum sollte ich das auch ändern.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 17.06.2017 22:36:56

1) welche Version von systemd läuft bei dir?
2) Mit systemd (das offenbar auf deinem Rechner läuft) sind die Initskripte obsolet geworden. Wenn ein Programm noch ein initskript statt einer systemd-unit hat, so wird das mittels Generator oft schlecht, meist recht in eine systemd-Unit űbersetzt.

Lass mich zusammenfassen:
Du bastelst also an systemd-Units und systemctl dass du mit sudo ohne passwort ausführen möchtest, hast aber noch nie davon gehört, dass da in den letzten paar Jahren mit systemd eine GRUNDLEGENDE Änderung im initsystem und der Diensteverwaltung bei Linux im Gange ist.
Da du nichts davon mitbekommen hast, versuchst du dein althergebrachtes Wissen einzusetzen, obwohl das so nicht mehr wirklich angebracht ist.

Ich denke einmal, es wäre gut für dich, wenn du dich einmal näher mit systemd auseinandersetzt.

Da macht man heute einiges anders, als mit initv.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 17.06.2017 22:56:09

Ich bin ja dankbar für die hilfe, aber für den TS bin ich mittel eines Tutorials vorgegangen. Davon ab, auch wenn man 60 oder ähnlich sein mag, man findet genug tutorials wo- man auf entsprechende Skripte stößt. Ich finde es nicht ok jemandem vorzuwerfen er würde das geschehen nicht verfolgen. Ich muss leider sagen das dies mein Hobby ist in das ich mich mehr rein arbeiten möchte. Jedoch bleibt ein Hobby gegen Familie und anderen dingen auf der Strecke..

Ich schweife ab....,

Wie wäre es wenn du mir den richtigen (nach aktuellen Maßstäben) weg erläuterst. Ich dachte mit den letzten posts wären Wir zumindest in der richtigen Richtung. Wie dem auch seih. Die Version ist
systemd 215
+PAM +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ -SECCOMP -APPARMOR


Im übrigen habe ich nur angemerkt das ich 1-2 Programme noch mit script in init.d ausführe - es funktioniert. Habe ich nun einen Nachteil? Wenn du schon meinst es ist Mist, dann wäre es gut zu wissen wo der Nachteil liegt.

Trotztem Danke, ich bin heute etwas genervt.

Gruß

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 18.06.2017 02:28:31

Sorry, für mich hat es so geklungen, als hättest du noch nie etwas von systemd gehört...

Die Transformation von init-Skripten mittels automatischem Generator in systemd-units funktioniert zwar prinzipiell nicht schlecht, kann aber doch die eine oder andere Hürde aufwerfen. Das liegt aber primär nicht an dir, sondern an den Paketbetreuern oder Programmentwicklern, die noch keine Units für ihr Paket zur Verfügung stellen.

In deinem Fall ist es so, dass die [Install]-Section in der Unit fehlt. Damit kannst du diese Service-Unit nicht mit systemctl so aktivieren, dass sie bei jedem Boot automatisch gestartet wird.

Du hast dir jetzt versucht so zu helfen, dass du systemctl mittels sudo ohne Passwort ausführen können willst und ziehst einen Rattenschwanz an Unsicherheiten damit an.

Füge bei der erstellen Unit am Ende noch (wie schon oben erwähnt) folgendes ein:

Code: Alles auswählen

[Install]
WantedBy=multi-user.target
dann reloade systemd neu

Code: Alles auswählen

systemctl daemon-reload
und dann aktiviere die Unit mit

Code: Alles auswählen

systemctl enable Server.service
Ich glaube, das hattest du eh schon gemacht. Die Option "--now" hat dein systemctl offenbar nicht gemocht - warum auch immer.

Nach einem Reboot kontrolliere mit

Code: Alles auswählen

systemctl status Server.service
und mit

Code: Alles auswählen

journalctl -b -u Server.service
ob dein Server aktiv ist und ohne Probleme automatisch gestartet wurde.

Vielleicht postest du auch die Ausgaben der letzten beiden Befehle...

Es war kein Vorwurf, es war nur eine Feststellung, dass bei dir offenbar Lücken genau dort klaffen, wo du gerade versuchst mit kopieren und einfügen aus irgendwelchen Tutorials etwas in Gang zu bringen, und du dabei bist, dir damit möglicherweise gröbere Probleme einzuhandeln, als dir momentan bewusst ist - weil eben genau dort, wo du es jetzt bräuchtest, Lücken im Wissen vorhanden sind. Konkret bei systemd.

Ich helfe gerne, wenn ich es kann. Wenn du vor Jahren gelernt hast, in einem KFZ den vollmechanischen Motor zu reparieren, wirst du heute wohl auch zum Fachmann gehen, wenn deine Karre streikt... oder dir das Wissen aneignen wie man einen vollelektronisch gesteuerten Wagen repariert. Wenns in deiner Freizeit nicht geht, wirst du das wohl nicht mehr selber machen... Warum sollt es bei Computern anders sein?
Linux verändert sich momentan massiv. Und wenn man es als Hobbyadmin betreiben will und so Dinge wie du gerade machen willst, machen will, dann bin nicht ich schuld, und im Forum sonst auch niemand, dass du deine Wissenslücken wieder auffüllen musst. Ob du jetzt 60 oder 20 bist... Veränderungen finden statt. Willst du mithalten, musst du mitlernen.
Daran bin aber nicht ich schuld. Aber ich helfe gerne in meiner eigenen Freizeit hier im Forum, wenn ich wo helfen kann.

Gut?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 18.06.2017 20:39:32

Vielen Dank, für deine Hilfe.
Auch wenn es jetzt vielleicht so klang, aber ich bin noch keine 60 ;)
Aber du hast natürlich Recht man muss immer lernen. Wie dem auch sei, ich weis zwar immer noch nicht warum --now nicht funktionier,t aber ich wusste anhand deines letzten posts zumindest wo mein Fehler lag.
Ich hatte schlicht und ergreifend [install] über dem WantedBy=multi-user.target vergessen.

Schade das wir noch nicht beamen können, sonst würde ich dir jetzt nen kühles Blondes rüber schieben. Bei mir im Dachgeschoss ist es auf jeden Fall die richtige Temperatur dafür :D

Vielen Dank nochmal!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 19.06.2017 01:42:29

Schoolisoutfan hat geschrieben:Vielen Dank, für deine Hilfe.
Auch wenn es jetzt vielleicht so klang, aber ich bin noch keine 60 ;)
Aber du hast natürlich Recht man muss immer lernen. Wie dem auch sei, ich weis zwar immer noch nicht warum --now nicht funktionier,t aber ich wusste anhand deines letzten posts zumindest wo mein Fehler lag.
Ich hatte schlicht und ergreifend [install] über dem WantedBy=multi-user.target vergessen.

Schade das wir noch nicht beamen können, sonst würde ich dir jetzt nen kühles Blondes rüber schieben. Bei mir im Dachgeschoss ist es auf jeden Fall die richtige Temperatur dafür :D

Vielen Dank nochmal!
Gerne!

Dass du [Install] vergessen hast, lag an meiner fehlerhaften Anweisung auf der ersten Seite. Ich habs dort soeben korrigiert, weil [Install] dort fehlte, damit es für die Nachwelt korrekt archiviert bleibt.

Hast du die Befehlszeile mit Copy&Paste eingefügt? ev. wurden aus -- ein langer Gedankenstrich dabei... Tippe die Zeile einmal manuell ein. (statt enable nimm reenable)

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 24.06.2017 19:06:19

So, mir ist heute beim updaten des Spieleservers ein Problem aufgefallen.
Der Service startet zwar beim boot den Servers, jedoch lässt er sich nicht manuel mit dem nicht su Benutzer starten, mit dem Root geht es.
Einzigste Lösung war den kompletten Server zu rebooten, aber das ist ja auch nicht Sinn des ganzen.
Probiert hatte ich:

Code: Alles auswählen

factorio # systemctl start factorio.service
So schaut die factorio.service aus:

Code: Alles auswählen

[Unit]
Description=Factorio Headless Server

[Service]
Type=simple
User=factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest /opt/factor$
Restart=always
[Install]
WantedBy=multi-user.target

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von scientific » 29.06.2017 00:59:11

Naja... systemctl wird auch von root bedient. Damit startest/stoppst und reloadest du Services, welche das ganze System betreffen.

Das ist so gedacht, dass du als ein User nicht die Prozesse eines anderen Users abschießen kannst (Außer du bist eben root. Der darf die Prozesse eines jeden Users beenden...).

Wenn du den Spieleserver neu starten willst, kannst du das nur als root.
Du hast auch die Option "Restart=always" drin. Damit könntest du als Root auch den Prozess des Spieleservers mit kill beenden, dann startet systemd den neu unter dem User factorio.

Mit InitV kannst du normalerweise Startskripte unter /etc/initl.d/ auch nur als root neu starten...

Einen (diesen) Service startest du neu mit

Code: Alles auswählen

# systemctl stop factorio.service
# systemctl start factorio.service
oder schneller mit

Code: Alles auswählen

# systemctl restart factorio.service
Und ob der Service läuft, und was er so tut siehst du mit

Code: Alles auswählen

# systemctl status factorio.service
oder

Code: Alles auswählen

# journalctl -b -u factorio.service
Zuschauen kannst du ihm mit

Code: Alles auswählen

# journalctl -f -u factorio.service
lg scientific

PS: Es würde wirklich nicht schaden, wenn du dich in die Materie systemd einarbeitest.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Schoolisoutfan
Beiträge: 13
Registriert: 16.06.2017 21:05:19

Re: Systemctl als nicht Root ausführen - Sudoers anpassen

Beitrag von Schoolisoutfan » 29.06.2017 06:07:47

Wie ich den Service starte, stoppen und deren Status einsehen kann weiß ich auswendig. Mir ist nur nicht ganz klar ob der in der Service eingetragene User den Service ausführt oder aber ob der Service als Router läuft wenn er von rot gestartet wurde. Sollte der letztere Fall richtig sein wäre ja alles in Ordnung. Das würde auch heißen das ich es von Anfang an richtig hatte. Denn der Service wurde immer mit einem in der Service hinterlegten Benutzer ausgeführt. Ich hoffe das ganze war halbwegs verständlich. Ich bin anhand des Wiki über systemctl davon ausgegangen das der User der im Service steht und Besitzer der Dateien ist auch gleichzeitig die Rechte zum ausführen des Service hat.

Gruß

Antworten