Screen für nicht Root User

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Skillkiller
Beiträge: 30
Registriert: 27.07.2016 12:49:05
Lizenz eigener Beiträge: MIT Lizenz

Screen für nicht Root User

Beitrag von Skillkiller » 09.03.2018 19:19:11

Hallo,
wie kann ich Screen für nicht Root User auf deinem Debian 8 OS erlauben. Bisher mache ich es immer so das der User "script /dev/null" ausführt, aber es muss doch eine besere Lösung geben?
Ich bekomme bei nicht Root Usern immer

Code: Alles auswählen

Cannot open your terminal '/dev/pts/0' - please check.

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Screen für nicht Root User

Beitrag von TRex » 09.03.2018 19:45:20

Mit root hat das nichts zu tun. Wie startest du denn screen?
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

TomL

Re: Screen für nicht Root User

Beitrag von TomL » 09.03.2018 19:53:10

Skillkiller hat geschrieben: ↑ zum Beitrag ↑
09.03.2018 19:19:11
wie kann ich Screen für nicht Root User auf deinem Debian 8 OS erlauben. Bisher mache ich es immer so das der User "script /dev/null" ausführt, aber es muss doch eine besere Lösung geben?
Klar geht das... starte einfach via Service-Unit direkt bei Systemstart eine Screen-Session ausdrücklich für den User. Diese Session kann er dann nach belieben verwenden... also im Sinne von "Betreten" und "Verlassen"... er darf sie halt nur nicht "Beenden".

Skillkiller
Beiträge: 30
Registriert: 27.07.2016 12:49:05
Lizenz eigener Beiträge: MIT Lizenz

Re: Screen für nicht Root User

Beitrag von Skillkiller » 09.03.2018 19:56:25

Ich starte meine Screens derzeit einfach nur über "screen" in der Konsole, meist habe ich dann noch "-dmS" als Argumente hinten dran damit der Screen direkt geschlossen startet und ich einen Session Namen direkt mit vergeben kann

TomL

Re: Screen für nicht Root User

Beitrag von TomL » 09.03.2018 19:59:24

Ja und... ?... wo ist das Problem? Scheint doch alles zu funktionieren?

Skillkiller
Beiträge: 30
Registriert: 27.07.2016 12:49:05
Lizenz eigener Beiträge: MIT Lizenz

Re: Screen für nicht Root User

Beitrag von Skillkiller » 09.03.2018 20:05:37

Wenn ich mit dem Root User

Code: Alles auswählen

screen -dmS Name Befehl
ausführe gibt es auch keine Probleme. Nur wenn ich das mit einem User Bots ausführe bekomme ich den Oben genannten Fehler

TomL

Re: Screen für nicht Root User

Beitrag von TomL » 09.03.2018 20:12:58

Wie gesagt, ich würde das über eine instantiated Service-Unit lösen. Wenn der User vorhersagbar ist, direkt beim Systemstart. Und wenn der User unbekannt ist und das dynamisch zur Laufzeit sein muss, dann würde ich das via Login-Eventhandler (als Daemon) und ebenfalls über die genannte Service-Unit lösen. Damit muss kein User das für sich selber starten und findet immer unter seiner UID eine eigene Screensession.

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Screen für nicht Root User

Beitrag von TRex » 09.03.2018 21:11:42

TomL denkt schon etwas weiter, dein konkretes Problem hängt aber davon ab, wie du die screen-session startest - offenbar nämlich nicht in einem tty. Mit einer SSH-Sitzung, bei der ich mich als User anmelde und in der ich dann screen wie von dir beschrieben starte, habe ich keinerlei Probleme.

Folge TomLs Anleitung, und dein Problem wird ebenso gelöst sein, und du wirst noch andere Vorteile haben.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

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

Re: Screen für nicht Root User

Beitrag von scientific » 10.03.2018 21:03:08

Und hier eine Unit, wie ich sie für dieses Problem im Einsatz hab:

Code: Alles auswählen

# cat /etc
/systemd/system/screen@.service
[Unit]
Description=screen for user %i
After=network.target

[Service]
Type=simple
User=%i
WorkingDirectory=/home/%i
ExecStartPre=-/usr/bin/xdg-user-dirs-update
ExecStart=/usr/bin/screen -DmS autoscreen_%i
ExecStop=/usr/bin/screen -S autoscreen_%i -X quit
Restart=always

[Install]
WantedBy=multi-user.target
Für jeden User, der Screen nutzen können soll dann mit

Code: Alles auswählen

 systemctl enable screen@username.service
Beim nächsten reboot startet das.

Dieser User kann dann Sessionübergreifend

Code: Alles auswählen

 screen - UxR
nutzen.

Und selbst wenn du die Session mit exit beendest, startet Screen wieder neu.
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

Skillkiller
Beiträge: 30
Registriert: 27.07.2016 12:49:05
Lizenz eigener Beiträge: MIT Lizenz

Re: Screen für nicht Root User

Beitrag von Skillkiller » 11.03.2018 16:02:25

Danke für eure Antworten :) Ich werde das mal versuchen. Ich benötige aber alle laufende Screens von einem Nutzer, "screen -ls" gibt folgendes aus:

Code: Alles auswählen

There are screens on:
        29559.test      (03/11/2018 03:50:57 PM)        (Detached)
        23465.Test3     (03/10/2018 06:24:44 PM)        (Detached)
        23462.Test2     (03/10/2018 06:24:42 PM)        (Detached)
        23458.Test1     (03/10/2018 06:24:37 PM)        (Detached)
4 Sockets in /var/run/screen/S-root.
Kann ich das mit Grep oder ähnlichen in Folgendes Format bringen:

Code: Alles auswählen

test 03/11/2018 03:50:57 PM
Test3 03/10/2018 06:24:44 PM
Test2 03/10/2018 06:24:42 PM
Test1 03/10/2018 06:24:37 PM
Damit hätte ich alle Informationen die mein Script brauche, ich kann zwar auch in den Screen Ordner von dem User gehen aber dort finde ich nicht die angaben wann er gestartet wurde.

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

Re: Screen für nicht Root User

Beitrag von scientific » 16.03.2018 11:06:38

Ich denke einmal, dir ist eine wesentliche Veränderung von systemd noch nicht bewusst, die in Debian noch rausgepatched wird...

systemds logind hat mittlerweile Default:
KillUserProcesses=yes
aktiviert. In Debian NOCHT (!) nicht.

Diese Einstellung bewirkt, dass alle Prozesse eines Users nach dem letzten Ausloggen dieses Users (also mit dem Ende von user@1000.service für den User mit der UID 1000) beendet werden. Das ist z.B. für das HP-Printer-Plugin, zeitgeist usw. gut, da diese nach dem Ausloggen einfach weitergelaufen sind (meistens) und das Beenden der Usersession blockierten. Meldet sich der User erneut an, kann dies zu sehr seltsamen Effekten führen. Früher haben Sysadmins einmal die Woche alle diese Jobs gekillt... Das sind natürlich auch Security-Problem... denn wenn eine dieser weiterlaufenden Prozesse sensible Passwörter im RAM behält... nunja, mach dir deine eigenen Gedanken dazu.

Dass jetzt alle User-Prozesse gekillt werden hat aber den unschönen Nachteil, dass screen und tmux-Sessions auch getötet werden... Das bedeutet, du loggst dich per SSH von remote ein, startest screen, arbeitest etwas, detached und loggst dich aus. Daheim loggst du dich am Rechner ein, suchst deine Screen-Session... und die ist weg. Sie wurde beim Ausloggen gekillt.

Daher hab ich dir oben eine systemd-Unit gepostet, die vom system-systemd gestartet wird und für jeden erwünschten User extra aktiviert werden muss. Diese Unit startet dir außerhalb der Usersession von systemd eine screen-Session (und restaret sie, wenn du irrtümlich alle shells darin beendest), auf die du sowohl remote als auch von lokal zugreifen kannst, und die ein Ausloggen überlebt.
Debian wird irgendwann einmal KillUserProcess=yes auch default setzen, dann bist du gewappnet, ohne dass du überrascht wirst, dass plötzlich deine Sessions weg sind, und du kannst es dir nicht erklären.

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

Antworten