Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Art, wie ein Script aufgerufen wird

2 views
Skip to first unread message

retired developer

unread,
Aug 6, 2021, 6:22:10 AM8/6/21
to
Hallo,

eines der letzten Felder im /etc/passwd ist der Name des Benutzershells
oder einer Applikation (was auch ein Menuescript sein kann), wenn zB.
der Benutzer nur ein paar wenige Applikationen nutzt bzw. nutzen darf.

Nehmen wir an, ich mache fuer mich zwei accounts, zB. "anwender" und
"entwickler". Beide haben den selben Homeordner, der Shellscript fuer
den "anwender" ist "/etc/menue" und "/bin/bash" fuer den "entwickler".

Nun kann ich, wenn ich als "entwickler" eingeloggt bin, die Applikation
einfach mit /etc/menu aufrufen und testen.

Frage, wie kann ich (kann ich das ueberhaupt?) in Menuescript
feststellen, ob der Aufruf direkt ueber den Loginvorgang erfolgte oder
eben haendisch, durch den Benutzer, also mit /etc/menue?

Danke.

Gruesse
Julius

--
An old Windows has old security holes.
A new Windows has new security holes.
Another OS has other security holes.
For safety you must care yourself.

Stephan Weinberger

unread,
Aug 6, 2021, 8:07:54 AM8/6/21
to
On 06.08.21 12:22, retired developer wrote:

> Frage, wie kann ich (kann ich das ueberhaupt?) in Menuescript
> feststellen, ob der Aufruf direkt ueber den Loginvorgang erfolgte oder
> eben haendisch, durch den Benutzer, also mit /etc/menue?

Eventuell über die $PPID?

lg
Stephan


August Werner

unread,
Aug 6, 2021, 5:19:50 PM8/6/21
to
Am Fri, 06 Aug 2021 12:22:08 +0200 schrieb retired developer:

> Hallo,
>
> eines der letzten Felder im /etc/passwd ist der Name des Benutzershells
> oder einer Applikation (was auch ein Menuescript sein kann), wenn zB.
> der Benutzer nur ein paar wenige Applikationen nutzt bzw. nutzen darf.
>
> Nehmen wir an, ich mache fuer mich zwei accounts, zB. "anwender" und
> "entwickler". Beide haben den selben Homeordner, der Shellscript fuer
> den "anwender" ist "/etc/menue" und "/bin/bash" fuer den "entwickler".
>
> Nun kann ich, wenn ich als "entwickler" eingeloggt bin, die Applikation
> einfach mit /etc/menu aufrufen und testen.
>
> Frage, wie kann ich (kann ich das ueberhaupt?) in Menuescript
> feststellen, ob der Aufruf direkt ueber den Loginvorgang erfolgte oder
> eben haendisch, durch den Benutzer, also mit /etc/menue?

Hallo,

es existieren zu dieser Angelegenheit zwei Benutzereinträge in /etc/passwd
und damit zwei verschiedene Benutzer-IDs. Die Benutzer können anhand der
Benutzer-IDs unterschieden werden, die ebenfalls für jeden Benutzer in
/etc/passwd verzeichnet sind. Ich würde die Variable $EUID verwenden,
um die effektive Benutzer-ID des laufenden Skripts zu bestimmen.

Andreas Leitgeb

unread,
Aug 7, 2021, 3:29:18 PM8/7/21
to
retired developer <retired....@protonmail.com> wrote:
> eines der letzten Felder im /etc/passwd ist der Name des Benutzershells
> oder einer Applikation (was auch ein Menuescript sein kann), wenn zB.
> der Benutzer nur ein paar wenige Applikationen nutzt bzw. nutzen darf.
>
> Nehmen wir an, ich mache fuer mich zwei accounts, zB. "anwender" und
> "entwickler". Beide haben den selben Homeordner, der Shellscript fuer
> den "anwender" ist "/etc/menue" und "/bin/bash" fuer den "entwickler".
>
> Nun kann ich, wenn ich als "entwickler" eingeloggt bin, die Applikation
> einfach mit /etc/menu aufrufen und testen.
>
> Frage, wie kann ich (kann ich das ueberhaupt?) in Menuescript
> feststellen, ob der Aufruf direkt ueber den Loginvorgang erfolgte oder
> eben haendisch, durch den Benutzer, also mit /etc/menue?
>
> Danke.
> Julius

Ich hab da was in Erinnerung, dass login-shells mit einem "-" als erstes
Zeichen des "$0" in bourne-shells, $::argv0 in tclsh oder argv[0] in C
gekennzeichnet sind.

PS: Wenn du als login-shell irgendein script einträgst, dann zählt das
für manche tools als "restricted" shell. Wenn die login-shell also
nicht in /etc/shells aufscheint, dann verweigern manche kommandos
ihren dienst. Notfalls also dein menue-script dort aufnahmen.

retired developer

unread,
Aug 8, 2021, 6:08:06 AM8/8/21
to
On 07.08.21 21:29, Andreas Leitgeb wrote:

> PS: Wenn du als login-shell irgendein script einträgst, dann zählt das
> für manche tools als "restricted" shell. Wenn die login-shell also
> nicht in /etc/shells aufscheint, dann verweigern manche kommandos
> ihren dienst. Notfalls also dein menue-script dort aufnahmen.


Danke allen Tippgebern. Aus den Antworten von Tante Google, Stephan und
Andreas habe ich dann folgendes zusammengebastelt:

# meinloginscript.sh -------------
# fuer die betroffenen Benutzerid steht in /etc/passwd
# als loginshell: /etc/meinloginscript.sh
#

PPCMD=$(xargs -0 < /proc/$PPID/cmdline)

if [ ${PPCMD:0:1} == '-' ]
then
echo 'aufruf aus terminal'
else
echo 'aufruf ueber login'
fi

Das sollte mal fuer den Anfang reichen.

Danke und noch einen schoenen Sonntag

retired developer

unread,
Aug 8, 2021, 6:08:43 AM8/8/21
to
Danke.

retired developer

unread,
Aug 8, 2021, 6:09:12 AM8/8/21
to
Danke.

Andreas Leitgeb

unread,
Aug 10, 2021, 6:38:54 AM8/10/21
to
retired developer <retired....@protonmail.com> wrote:
> Danke allen Tippgebern. Aus den Antworten von Tante Google, Stephan und
> Andreas habe ich dann folgendes zusammengebastelt:

Ich fürchte, du hast was missverstanden... oder ich.

Falls es tatsächlich so funktioniert, wie unten beschrieben, dann
ist der Verständnisfehler auf meiner Seite, und alles weitere hinfällig.

Falls es doch nicht so geht, dann schlage ich folgende Änderungen vor:

> # meinloginscript.sh -------------
> # fuer die betroffenen Benutzerid steht in /etc/passwd
> # als loginshell: /etc/meinloginscript.sh
> #
>
> PPCMD=$(xargs -0 < /proc/$PPID/cmdline)

#Diese Zeile weg.

>
> if [ ${PPCMD:0:1} == '-' ]

#Hier stattdessen:

if [ ${0:0:1} == '-' ]

> then
> echo 'aufruf aus terminal'

#Umgekehrt: wenn das erste Zeichen "-" ist, dann ist das
#aktuelle script selber eine login-shell

echo 'aufruf ueber login'

> else
> echo 'aufruf ueber login'

#Sonst ein direkter script-aufruf

echo 'aufruf aus terminal'

> fi

retired developer

unread,
Aug 12, 2021, 5:32:20 AM8/12/21
to
On 10.08.21 12:38, Andreas Leitgeb wrote:

Mein originalscript funktioniert (und zeigt "aufruf ueber terminal" an,
wenn ich es mit /etc/meinloginscript.sh aus dem Terminal aus aufrufe und
zeigt "aufruf ueber login" an, wenn ich mich am Linux anmelde).

Mit ${0:0:1} bekomme ich immer "anmeldung ueber login".

Vielleicht habe ich nur "Anfaengerglueck" ;-))

Gruesse
0 new messages