[Gelöst] Script "Change User für AppStart"

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
TomL

[Gelöst] Script "Change User für AppStart"

Beitrag von TomL » 17.03.2015 15:41:21

Moin @ all

Aufgrund meines an anderer Stelle berichteten Fehler "Bad-MAC-Read" habe ich heute den ganzen Morgen an einem Script gebastelt, um eine Anwendung über einen anderen User zu starten. Die KDE kann den User-Wechsel ja via Desktop-Starter von Hause aus, aber ich muss jedes Mal ein PWD eingeben... und das würde ich gerne sparen. Und ich hatte die Idee, dieses Script unabhängig vom Desktop-Environment zu gestalten... das heisst, gleiche Lösung für KDE, Xfce und Lxde.... aber es klappt ums Verrecken nicht. Und jetzt hoffe ich auf Hilfe.

Aus dieser Debian-Wiki-Seite habe ich die Vorlage für mein Script entnommen.

So sieht jetzt mein "Universal-Script" aus, um eine beliebige Anwendung mit anderem User zu starten:

Code: Alles auswählen

#! /bin/bash
# Script: ChangeUserAppStart = chuseras  (18.03.2015)
#
# Aufrufparameter
# 1. User
# 2. Programmname
# 3. Parameter für das Programm
#
#=========================================================================================================================================
#
# adduser --system --disabled-login --ingroup $USER --shell /bin/false inet     --->   in Gruppe root hinzufügen = falsch
# adduser --system --disabled-login --ingroup thomas --shell /bin/false inet  
#
# add sudoers:  thomas ALL=(inet)NOPASSWD:ALL
# starter:      /usr/local/bin/chuseras inet /usr/bin/palemoon %u
#
#=========================================================================================================================================

debuglog=/home/thomas/culog
d=`date +%d-%m-%Y-%H-%M`
User=$1
App=$2
shift 2

#Debug
#echo  $d "User :" $User >>$debuglog
#echo  $d "App  :" $App  >>$debuglog
#echo  $d "Parm :" $@    >>$debuglog
#exit

if [ ! -z $KDE_SESSION_VERSION ]; then
#  echo  $d "KDE_SESSION_VERSION:" $KDE_SESSION_VERSION         >>$debuglog
   kdesudo -u $User -c $App "$@"
else   
#  echo  $d "NON_KDE_SESSION"                                   >>$debuglog
   sudo -H -u $User $App "$@"
fi

exit
So starte ich das Script, mit Angabe für welchen User und welches Programm:

Code: Alles auswählen

/usr/local/bin/chuseras inet /opt/palemoon/palemoon
Richte ich einen Starter auf dem Desktop ein, fragt er nach dem Password und macht nix. Starte ich es vom grafischen Terminal ist das das Ergebnis:

Code: Alles auswählen

thomas@ThomasPC:~$ /usr/local/bin/chuseras inet /opt/palemoon/palemoon
xauth:  timeout in locking authority file /home/inet/.Xauthority
/usr/bin/xauth:  timeout in locking authority file /home/inet/.Xauthority

(process:6964): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
No protocol specified
No protocol specified
Error: cannot open display: :0
Starte ich es "direkt", ist das Programm sofort da:

Code: Alles auswählen

thomas@ThomasPC:~$ /opt/palemoon/palemoon

(process:6967): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed
thomas@ThomasPC:~$ 
In die sudoers habe ich diese Zeilen zum Testen angefügt:

Code: Alles auswählen

thomas, inet ALL=(inet) NOPASSWD: /usr/bin/palemoon
thomas, inet ALL=(inet) NOPASSWD: /usr/bin/iceweasel
thomas, inet ALL=(inet) NOPASSWD: /opt/palemoon/palemoon
Was mach ich falsch?
Zuletzt geändert von TomL am 22.03.2015 14:28:53, insgesamt 3-mal geändert.

debianoli
Beiträge: 4072
Registriert: 07.11.2007 13:58:49
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Change User für AppStart"

Beitrag von debianoli » 17.03.2015 15:52:30

Ich starte meinen abgesicherten Iceweasel nur über sudo und kdesudo für einen eigenen Surf-user User_zum_surfen.

Meine sudoers.d/Mein_User hat folgenden Eintrag:

Code: Alles auswählen

Mein_User  ALL=(User_zum_surfen)NOPASSWD:ALL
Und dann Debiankdesudo

Code: Alles auswählen

kdesudo -u User_zum_surfen -c Iceweasel
Im Wheezy-KDE hat das mit dem "als anderer User starten" bei mir nicht geklappt. Vielleicht hilft dir das weiter.

reba
Beiträge: 536
Registriert: 27.06.2011 08:59:37

Re: Script "Change User für AppStart"

Beitrag von reba » 17.03.2015 16:33:14

Geht auch mit "Bordmitteln":

Code: Alles auswählen

su -c programname benutzername
Siehe auch

Code: Alles auswählen

man su
.

TomL

Re: Script "Change User für AppStart"

Beitrag von TomL » 17.03.2015 19:11:50

Moin

Ich finds schon merkwürdig... und ne Erklärung dafür habe ich nicht. Ob es klappt oder scheitert hängt allein an der sudoers. Mein Script (ich habs oben mal korrigiert) funktioniert in Abhängigkeit von dieser einen Zeile (s.u.) in der sudoers.

Und zwar klappt dieser Eintrag nicht:

Code: Alles auswählen

thomas ALL=(inet)NOPASSWD:/opt/palemoon/palemoon
Dafür diese von debianoli übernommene Variante:

Code: Alles auswählen

 thomas ALL=(inet)NOPASSWD:ALL
Ich verstehe jetzt nur nicht, ob ich mir mit NOPASSWD:ALL vielleicht auch unerwünschte Konsequenzen eingehandelt habe. Was beinhaltet NOPASSWD:ALL noch außerdem...?... über das hinaus, was ich eigentlich wollte, nämlich den Fremdstart /opt/palemoon/palemoon durch den User inet erlauben.

Was mich außerdem irrirtiert, ist der Effekt, dass es nur läuft, wenn ich die beiden Exports XAUTHORITY und DISPLAY unterhalb der Comment-Zeile "Hack" entferne. Mit diesen läuft es auch nicht.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Script "Change User für AppStart"

Beitrag von Cae » 18.03.2015 00:47:50

TomL hat geschrieben:Was beinhaltet NOPASSWD:ALL noch außerdem...?... über das hinaus, was ich eigentlich wollte, nämlich den Fremdstart /opt/palemoon/palemoon durch den User inet erlauben.
ALL meint da relativ direkt "alles". Der Benutzer kann also beliebige Programme als dieser andere Benutzer starten. Du solltest pruefen, ob der Pfad in der sudoers(5) und der an sudo uebergebene Pfad exakt uebereinstimmen. Insbesondere absolutes /path/to/tool und sudo tool wird nix. Steht aber hinterher auch im entsprechenden Log.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

TomL

Re: AW: Script "Change User für AppStart"

Beitrag von TomL » 18.03.2015 10:06:48

Moin Cae

Genau dieses "all" hat mich beunruhigt... aber eher im Umkehrschluss. Folgende Situation: Der User "thomas" (also ich) hat ein Profil und NUR alle regulären Benutzerrechte. Den User "inet" gjbts eigentlich gar nicht, der wird nur vorübergehend von "thomas" verwendet, um das surfen im Internet auf das Profil "inet" auszulagern. Wenn "thomas" etwas am System erledigen will, wird er mit "su" temporär zu root, ansonsten ist "thomas" eben nur normaler User ohne Sonderrechte. Soweit die Theorie und wie ich das gerne hätte.

Meine Sorge ist, dass "thomas" durch All und NoPassword auf einmal im Normalbetrieb zu mehr wird, als nur normaler User zu sein. Er soll ja durch diesen Eintrag in die sudoers nicht zu einem grundsätzlich privilegierten User mit höheren Rechten werden.

TomL

Re: Script "Change User für AppStart"

Beitrag von TomL » 18.03.2015 12:31:05

Moin... die zweite

Ich habe mein Script jetzt noch mal angepasst und oben aktualisiert ... und so läuft es jetzt bestens auf beiden Jessie's, einmal mit KDE und einmal unter Xfce. Die einzige offene Frage ist jetzt noch bezüglich des sudoers-Eintrags:

Code: Alles auswählen

thomas ALL=(inet)NOPASSWD:ALL
Ich bin unsicher, ob dieser Eintrag wirklich nur bedeutet:
[thomas] darf unter dem User [inet] das gleiche tun, wie unter eigenem Namen und benötigt speziell dafür kein Password. NoPassword:ALL hebt aber keine anderen Regeln oder Beschränkungen für [thomas] aus und [inet] erbt auch keine Rechte von [thomas].

Weiss jemand, ob das so richtig interpretiert ist? :?

debianoli
Beiträge: 4072
Registriert: 07.11.2007 13:58:49
Lizenz eigener Beiträge: MIT Lizenz

Re: Script "Change User für AppStart"

Beitrag von debianoli » 18.03.2015 12:51:48

Ja.

Du lässt dich scheinbar von der Verwendung von sudo zum Erlangen von Root-Rechten verwirren.

Die man-pages von sudo erklären es kurz und knapp, wofür sudo da ist:

Code: Alles auswählen

NAME
     sudo, sudoedit — execute a command as another user


Und nix anderes macht sudo in deinem Fall: Es gibt dem User thomas die Möglichkeit, als User inet Programme zu starten. Da es in der sudoers keine Regeln für User inet eingetragen sind, die inet irgendwas erlauben, kommt beim Aufruf von sudo durch User Thomnas diese Regel zum Einsatz

Code: Alles auswählen

thomas ALL=(inet)NOPASSWD:ALL

TomL

Re: Script "Change User für AppStart"

Beitrag von TomL » 22.03.2015 14:16:43

debianoli hat geschrieben:Du lässt dich scheinbar von der Verwendung von sudo zum Erlangen von Root-Rechten verwirren.
Genau das war es.... Danke für die Erläuterung. Eigentlich ist das ja auch logisch.... das bedurfte jetzt nur eines kleinen Anschubs, damit mir das auch so bewußt wurde.

Antworten