Forum: PC Hard- und Software Linux - Beim Hochfahren als bestimmter User automatisch einloggen und Programm starten


von Nez (Gast)


Lesenswert?

Ist es eigentlich möglich, das beim hochfahren ein bestimmter User 
eingeloggt wird ohne das der Benutzer ein Passwort eingeben muss und das 
ein bestimmtes Programm gestartet wird?
Wenn ja, wie?
Bei google habe ich nichts direkt finden können.

von Tom (Gast)


Lesenswert?

mit windowmanager?

bei Gnome:
System -> Administration -> Login Window -> Security -> Enable Automatic 
Login

System -> Preferences -> Sessions -> Startup Programs

von Nez (Gast)


Lesenswert?

Ja. Mit Window-Manager wäre gut.
Geht das mit beliebigen Usern? Und in Zusammenarbeit mit dem 
automatischen Start eines gewissen Programmes.
Was ich nämlich noch brauche ist, das der User eigentlich nichts weiter 
machen kann. Also auch nicht an weitere Menues herankommt. Terminal 
starten kann etc. D.h. der Rest der Oberfläche sollte nicht zugänglich 
sein.
Alternativ, könnte die Oberfläche auch mit tk programmiert werden.

Es geht hierbei weniger um wirkliche Sicherheitsgründe.
Es handelt sich eher um die Bedienoberfläche eines Rechners in der 
Fertigung. Die Benutzer sollen nur das Programm bedienen können und 
runterfahren. Da sie keine Ahnung haben, geht es eher darum zu 
verhindern, das sie unabsichtlich irgendwas blödes machen.

von Klaus W. (mfgkw)


Lesenswert?

Soll der Benutzer dann entsprechend in einem Terminal oder einer
Konsole eingeloggt bleiben und Kommandos ausführen können?
Vermutlich nicht, weil dann ja jeder ohne weitere Anmeldung Kommandos 
starten kann.

Ich vermute eher, daß einfach nur nach dem Start zusätzlich zu den
üblichen gestarteten Programmen dein gewünschtes laufen soll?
Das sollte z.B. gehen, indem in der /etc/inittab ein
entsprechender Eintrag gemacht wird.
Bei mir sieht die so aus:
1
# /etc/inittab: init(8) configuration.
2
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $
3
4
# The default runlevel.
5
id:2:initdefault:
6
7
# Boot-time system configuration/initialization script.
8
# This is run first except when booting in emergency (-b) mode.
9
si::sysinit:/etc/init.d/rcS
10
11
# What to do in single-user mode.
12
~~:S:wait:/sbin/sulogin
13
14
# /etc/init.d executes the S and K scripts upon change
15
# of runlevel.
16
#
17
# Runlevel 0 is halt.
18
# Runlevel 1 is single-user.
19
# Runlevels 2-5 are multi-user.
20
# Runlevel 6 is reboot.
21
22
l0:0:wait:/etc/init.d/rc 0
23
l1:1:wait:/etc/init.d/rc 1
24
l2:2:wait:/etc/init.d/rc 2
25
l3:3:wait:/etc/init.d/rc 3
26
l4:4:wait:/etc/init.d/rc 4
27
l5:5:wait:/etc/init.d/rc 5
28
l6:6:wait:/etc/init.d/rc 6
29
# Normally not reached, but fallthrough in case of emergency.
30
z6:6:respawn:/sbin/sulogin
31
32
# What to do when CTRL-ALT-DEL is pressed.
33
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now
34
35
# Action on special keypress (ALT-UpArrow).
36
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
37
38
# What to do when the power fails/returns.
39
pf::powerwait:/etc/init.d/powerfail start
40
pn::powerfailnow:/etc/init.d/powerfail now
41
po::powerokwait:/etc/init.d/powerfail stop
42
43
# /sbin/getty invocations for the runlevels.
44
#
45
# The "id" field MUST be the same as the last
46
# characters of the device (after "tty").
47
#
48
# Format:
49
#  <id>:<runlevels>:<action>:<process>
50
#
51
# Note that on most Debian systems tty7 is used by the X Window System,
52
# so if you want to add more getty's go ahead but skip tty7 if you run X.
53
#
54
1:2345:respawn:/sbin/getty 38400 tty1
55
2:23:respawn:/sbin/getty 38400 tty2
56
3:23:respawn:/sbin/getty 38400 tty3
57
4:23:respawn:/sbin/getty 38400 tty4
58
5:23:respawn:/sbin/getty 38400 tty5
59
6:23:respawn:/sbin/getty 38400 tty6

Die Zahl in der Zeile "id:2:initdefault:" gibt an, welchen run level
(1-5) der Rechner anpeilt, wenn er hochfährt, hier also 2.
Genau für diesen Level (oder wahlweise für weiter, z.B. 2-4) kann
man dann eine Zeile ergänzen:
1
me:234:wait:meinkommando...
Die ersten Zeichen sind egal, sollten sich aber von den anderen
Labels unterscheiden. Angeblich dürfen hier 4 Zeichen stehen,
früher waren es nur 2.
Dann kommen die run level, bei deren Eintritt das Kommando starten
soll.
Das wait sagt, daß das Kommando einmal ausgeführt werden soll (mit
respawn würde es bei seinem Ende immer wieder gestartet werden)
und daß das Booten an der Stelle auf das Ende des Kommandos warten
soll (once würde auch einmal ausgeführt, aber ohne zu warten).
Dann kommt das auszuführende Kommando. Das soll ggf. ein sudo...
sein, damit der bestimmte Benutzer verwendet wird.

Ein anderer Weg ist (und etwas eleganter, aber auch komplizierter)
ist über den rc-Mechanismus (Skripte in /etc/init.d o.s.ä. je
nach Linux, letztlich aufgerufen über die l1-l5-Einträge in der
obigen Datei).
Die BEschreibung dieses Mechanismus spare ich mir, sie ist
z.B. in http://www.wachtler.de/skript_tools/node66.html
kurz beschrieben anhand eines anderen Beispiels.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

@ Nez

Also sowas wie ein Kiosk Modus?
http://www.faqs.org/docs/Linux-HOWTO/Kiosk-HOWTO.html

Statt des Webbrowsers dann dein Userprogramm starten ODER dein 
Userprogramm aus dem Webbrowser heraus ausführen (Javascript, lokaler 
Webserver mit PHP, Python, Perl o.ä.)

von Klaus W. (mfgkw)


Lesenswert?

ach so, mein Text oben hat sich ja erledigt.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Klaus Wachtler schrieb:
> ach so, mein Text oben hat sich ja erledigt.

Nicht unbedingt. Beides austesten und das bessere Verfahren nehmen. 
Auswahl zu haben ist meistens gut.

von Nez (Gast)


Lesenswert?

@ Klaus Wachtler
>Soll der Benutzer dann entsprechend in einem Terminal oder einer
>Konsole eingeloggt bleiben und Kommandos ausführen können?
>Vermutlich nicht, weil dann ja jeder ohne weitere Anmeldung Kommandos
>starten kann.
>Ich vermute eher, daß einfach nur nach dem Start zusätzlich zu den
>üblichen gestarteten Programmen dein gewünschtes laufen soll?
Ja. Genau. Der Benutzer soll keine eigenen Kommandos absetzen können, 
weder per Terminal noch per graphischer Oberfläche.
Er soll nur das Programm bedienen können und einer der Menüpunkte wird 
sein, den Rechner runterzufahren. (CTRL-ALT-DEL zum runterfahren wäre 
auch OK). Dämonen, Services und so weiter sollen normal laufen.

Deinen Script werde ich mal probieren.


@  Stefan B.
Ja. So in der Art wie ein Kiosk. Nur das das Programm etwas komplexer 
ist, weil des Peripherie bedienen muss. Aber das spielt wohl bei dem 
Link, den Du da gepostet hast keine Rolle.

Vielen Dank euch.

von Nez (Gast)


Lesenswert?

Die Benutzer sind sehr wahrscheinlich vom Wissen her garnicht in der 
Lage gezielt Schaden anzurichten. Aber es sollte doch verhindert werden, 
das sie beim Rumspielen irgendwas verbiegen.

von Klaus W. (mfgkw)


Lesenswert?

das was ich beschrieben hatte, geht aber nicht unter der GUI sinnvoll.
Wenn es das sein soll, muß man wie bereits beschrieben dem gdm oder
dem kdm (geht bei beiden) ein automatisches Anmelden beibringen,
weiterhin einen Windowmanager dafür auswählen, der entsprechend
abgemagert werden kann (fvwm2, icewm) und das gewünschte Programm
z.B. über die Datei .xsession starten.

von Nez (Gast)


Lesenswert?

@ Klaus Wachtler

>das was ich beschrieben hatte, geht aber nicht unter der GUI sinnvoll.
Naja. Das wäre nicht wirklich ein Hinderniss. Ich kann das in C und 
Tcl/Tk programmieren. (Tcl/Tk weil ich schon etwas grafische 
Möglichkeiten brauche um z.B. eine Abgleichkurve anzuzeigen).
Das würde ja gleichermassen in einem Terminalfenster auf der GUI laufen.
Aber bei der GUI wäre halt das Problem das der Benutzer über die Menues 
etc. noch andere Kommandos absetzten könnte.
Darauf beziehst Du Dich wahrscheinlich mit:
>einen Windowmanager dafür auswählen, der entsprechend abgemagert werden >kann
Das stelle ich mir sehr aufwändig vor. Wie geht das im Prinzip? Müsste 
wahrscheinlich im Quelltext irgendwo ändern. Oder kann man das in 
Konfigurationsfiles ändern? (Wenn ich mal als root da was dran arbeiten 
möchte, würde ich gerne die normalen Möglichkeiten haben).

von Nez (Gast)


Lesenswert?

Ui. Da habe ich nicht aufgepasst. TK geht ja auch nicht auf der Konsole. 
Nur in der GUI.

von Nez (Gast)


Lesenswert?

Also ist dann das Problem wie ich bei der GUI sämtliche anderen 
Menues/Befehle rausnehme und nur meine Applikation laufen lasse.

von Klaus W. (mfgkw)


Lesenswert?

und da hängt es vom jeweiligen WM ab, was man wie abstellen kann.

Das Arbeiten als root wird bei allen gehen, indem man mit
Ctl-Alt-F1 (oder ...F2-F6) auf eine Konsole geht und sich dort
anmeldet.
Man kann auch aus der Konsole eine weitere X-Window-Sitzung starten.
Normalerweise ist ja auf Ctl-Alt-F1 bis Ctl-Alt-F6 jeweils eine
Textkonsole gestartet (siehe die /etc/inittab oben).
Unter der 7. Konsole findet sich dann die GUI mit X-Windows,
man kommt also mit Alt-F7 oder Ctl-Alt-F7 wieder ins X-Windows.
Hat man nun seinen DAU auf der 7. Konsole in der GUI,
wechselt mit Ctl-Alt-F1 auf die erste Textkonsole, meldet sich
dort an (z.B. als root), dann kann man mit
1
startx -- :1
ein zweites X-Windows starten, wenn alles korrekt eingerichtet
ist. Dann hat man wie gehabt auf den Konsolen 1-6 die
Textkonsolen, auf der 7. den DAU in seiner GUI und auf der
8. das zqweite X-WIndows als root. Mit Ctl-Alt-F7 und
Ctl-Alt-F8 kann man zwischen den beiden X-Windows wechseln.
Die beiden können unterschiedliche Windowmanager nutzen, also
z.B. der DAU auf der 7. hat seinen icewm, während der root
auf der 8. einen beliebigen anderen WM hat.

von Nez (Gast)


Lesenswert?

>und da hängt es vom jeweiligen WM ab, was man wie abstellen kann.

Hmm. Da muss ich mal schauen.

Die Bemerkung darüber das ich als root nach wie vor einem WM benutzen 
will, bezog sich darauf, das ich die nicht-abgespeckte Version brauche 
im Gegensatz zum DAU. (Welch böse Abkürzung :-) ).
Nicht das ich durch das abspecken überhaupt nur noch eben diese 
verminderte GUI habe.
Aber so richtig schlimm wäre das auch nicht. Auf der Konsole kann man ja 
auch alles machen.

Ein Hinweis auf Anleitungen wie ich gdm oder kdm abmagern kann, wäre 
noch hilfreich.

von Nez (Gast)


Lesenswert?

Mal sehen wie weit ich mit dem Kiosk Link komme.
Sonst noch Tips?

von Nez (Gast)


Lesenswert?


von Klaus W. (mfgkw)


Lesenswert?

oh oh. zur Klarstellung:

Du musst NICHT gdm oder kdm abmagern, sondern den Windowmanager,
der nach dem Einloggen läuft.


gdm oder kdm (oder theoretisch xdm) ist das Programm, das vor dem
Anmelden läuft und nach Name und PW fragt.
Als root kann man nach dem Anmelden eben dieses Programm konfigurieren
(zumindest bei kdm über Klickibunti im Program kcontrol).
Hier kann man jeweils einstellen, wie der Startbildschirm aussehen soll
oder eben, ob immer ein bestimmter Benutzer angemeldet werden soll
statt nach Name und PW zu fragen.
Ebenfalls im gdm oder kdm wird eingestellt, welcher Windowmanager
für den jeweiligen Benutzer NACH dem Anmelden laufen soll (bzw.
kann man das über die Startskripte von X11 einstellen; siehe
man xsession).
Das wiederum kann unabhängig vom gdm oder kdm einer der folgenden sein:
- KDE
- gnome
- icewm
- fvwm
- fvwm2
- twm
- ...
Und eben dieser muss dann abgemagert werden, daß er nicht unnötiges
anbietet.
Wobei ich eher vermute, daß das mit KDE oder gnome gar nicht geht
oder schwierig ist. Gefühlsmäßig würde ich bei fvwm2 oder icewm
anfangen.

von bb (Gast)


Lesenswert?

Also wenn NUR eine einzige GUI Applikation laufen soll, kann man sich 
Anmelde- und Windowmanager auch komplett schenken. Es sollte genügen, im 
letzten Init-Script den X-Server zu starten (startx) und die zu 
startende Applikation ins entsprechende .xinitrc einzutragen.

von Nez (Gast)


Lesenswert?

@ Klaus Wachtler

Uups. Ja. Du hast recht. kdm/gdm sind die Anmeldemanager, gnome und kde 
die user interfaces.

@ bb
>Also wenn NUR eine einzige GUI Applikation laufen soll, kann man sich
>Anmelde- und Windowmanager auch komplett schenken. Es sollte genügen, im
>letzten Init-Script den X-Server zu starten (startx) und die zu
>startende Applikation ins entsprechende .xinitrc einzutragen.

An sich wäre das optimal, wenn nur ein bestimmter user, zwar automatisch 
aber eben doch, eingeloggt wird. Wenn aber der X-Server gestartet wird 
sollte schon ein user eingeloggt sein, oder?

von bb (Gast)


Lesenswert?

> An sich wäre das optimal, wenn nur ein bestimmter user, zwar automatisch
> aber eben doch, eingeloggt wird. Wenn aber der X-Server gestartet wird
> sollte schon ein user eingeloggt sein, oder?

Wenn der X-Server aus einem init-script gestartet wird, läuft der unter 
der UID 0 (root). Wenn eine andere UID gewüscht wird, sollte ein starten 
des X-Servers mit 'su <meinuser> -c "startx"' funktionieren.

von ... .. (docean) Benutzerseite


Lesenswert?

und nicht vergessen unter /etc/inittab die Konsolen auszuschalten...

Kommst ja immer noch per SSH/telnet auf die Kiste

von Gast (Gast)


Lesenswert?

ersteinmal den Teil mit den Konsolen in der /etc/inittab so abaendern:
1
c1:2345:boot:/sbin/agetty -8 -n -l /usr/sbin/autologinuser 38400 vc/1 linux
2
c2:2345:respawn:/sbin/agetty -8 38400 vc/2 linux
3
c3:2345:respawn:/sbin/agetty -8 38400 vc/3 linux
4
c4:2345:respawn:/sbin/agetty -8 38400 vc/4 linux
5
c5:2345:respawn:/sbin/agetty -8 38400 vc/5 linux
6
c6:2345:respawn:/sbin/agetty -8 38400 vc/6 linux

Das programm autologinuser ist dieses hier:
1
#include <unistd.h>
2
3
int main() {
4
   execlp( "login", "login", "-f", "user", 0);
5
}

Bei "user" deinen Usernamen eingeben und compilieren und nach /usr/sbin/ 
kopieren.

In der ~/.bashrc muss dann ein startx vorhanden sein und der Rest geht 
dann in der ~/.xinitrc ab. Dort kannst du dann nen WM oder auch nur dein 
Programm oder was auch immer starten.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.