• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Benutzer kann Script ausführen aber Process nicht killen

byron1778

Hacker
Hallo Forum,

ich habe ein Problem mit einem Script bzw. mit den Berechtigungen!

Wir verwenden eine Anwendung, wobei die Anwender sich mit einem allgemeingültigen User x anmelden. Dieser User x führt dann unter der jeweiligen Personalnummer des Anwenders das Programm aus.

Jetzt kommt es hin und wieder vor, dass der Prozess trotz beendens der Applikation hängen bleibt und wir uns als root anmelden müssen und diesen Process abschalten müssen.

Ich wollte nun ein Script schreiben mit dem der Anwender selber seinen Process killen kann, sein Process läuft unter seiner Personalnummer, wie oben geschrieben.

Leider habe ich aber festgestellt, dass der allg.gültige User x zwar das Programm mit der Personalnummer starten kann aber nicht den Process killen kann.

Kann ich das irgendwie umgehen?
Hoffe, es war alles soweit verständlich geschrieben?!

Wichtig: Es soll nur der User x verwendet werden, also keiner neuer User angelegt werden und die Anwender können sich auch am Solaris System nicht anmelden mit ihrer Personalnummer, den dort ist ihr User auf NP gesetzt.
Weiters kann der allg.gültige User sich anmelden ohne PW (wurde alles damals so eingerichtet, auch wenn es sicherheitsmäßig grauslich ist!!).

Vielen Dank für jede Hilfe!

mfG
 

rolle

Guru
Mir ist das Problem mit User X noch nicht so ganz klar. Ihr habt da ein Programm - das wird als unter User X gestartet (per sudo oder wie auch immer) - der Prozeß und alle seine Kinder gehören User X - aber User X kann den Prozeß nicht killen. Richtig? Weiterhin kann root den Prozeß killen.
Als vorläufige Umgehung des Problems könnte man ja sudo so konfigurieren, daß alle Nutzer diesen einen Prozeß als root killen dürfen.
 
OP
B

byron1778

Hacker
Hallo,

naja es sieht so aus:

es gibt einen User startkon (das war der User x), der führt ein Script namens startkonuser aus mit dem Parameter Pxxxx (Personalnummer des Anwenders).

Und jetzt startet dann das Programm unter dem User Pxxxx.

Dh. der User startkon kann das Programm mit einer FremdID starten, aber will ich es nun stoppen das Programm, ebenfalls mit startkon, dann geht das leider nicht.

Wir haben eiinfach ein Script geschrieben mit: pkill -U Pxxxx und genau dieses stopscript führt der startkon auch aus, aber das pkill geht nicht, da kommt die Fehlermeldung: Permission denied.

Und wir wollen genau das hinbekommen, starten geht, aber stoppen leider nicht!!
 

rolle

Guru
Wenn man nun die Zeile so änderte?
Code:
sudo Pxxxx pkill -U Pxxxx

Dazu dann die sudoers anpassen, das könnte gehen.
 
OP
B

byron1778

Hacker
Das könnte ich mal versuchen.

Kann es aber dann auch sein, dass der Anwender andere Programme/Scripte so aufrufen kann?

Mir ist wichtig, dass nur dieses eine Script ausgeführt werden darf und kein anderes!!

Danke Dir vielmals
 

rolle

Guru
Die sudoers richtig zu konfigurieren könnte tricky werden, man kann aber genau definieren, wer als wer welchen Befehl ausführen darf. Ist nur nen bißchen Pfriemelei.
 

regexer

Advanced Hacker
byron1778 schrieb:
Dh. der User startkon kann das Programm mit einer FremdID starten, aber will ich es nun stoppen das Programm, ebenfalls mit startkon, dann geht das leider nicht.
Ist dieser Pxxxx eine BenutzerID? Dann ist das soweit erstmal logisch. Wäre ja auch schlimm wenn user startkon einfach mir nix, dir nix einen process von Pxxxx killen könnte.

Was ich aber in diesem Zusammenhang fragen wollte: Geht es hier nun um Solaris? Wie startet man hier als startkon einen Prozess mit dem User Pxxxx?
 
OP
B

byron1778

Hacker
Hallo,

ja es handelt sich hier um Solaris 8.

Der Benutzer Pxxx ist ein User am Solaris System, der "No Password" gesetzt hat, nur so nebenbei.
Dann gibt es noch den User Startkon, mit dem verbinden sich die Anwender, dieser User Startkon schafft es dann ein Programm unter dem User Pxxxx zu starten.

Tja, starten kann man nun den Process auf diese Weise, aber leider nicht stoppen.

Gestartet wird das Ganze über Hummingbird Exceed.
Die Anwender habe da die Zeile:

Code:
C:\Programme\exceed.nt
xstart.exe -m rlogin -h UZ -u startkon -c "/usr/home/scripts/startkondor Pxxxxx"

startkondor ist ein Script, dieses Script wirft dann den Process an, der mit dem Benuter Pxxx läuft!
 

regexer

Advanced Hacker
byron1778 schrieb:
startkondor ist ein Script, dieses Script wirft dann den Process an, der mit dem Benuter Pxxx läuft!
Gut - soweit habe ich das verstanden. Vielleicht bin ich blöd, aber ich frage mich immer noch: Wie macht das dieses Script? Genau auf diese Weise müsste es doch möglich sein, einen kill mit der UID Pxxx abzusetzen.
 
OP
B

byron1778

Hacker
Also so sieht das Script aus:

Code:
USERFILE=/usr/home/scripts/kondorusers
KUSER=$1

EXCEEDSERVER=`nawk '{if (toupper($1) == toupper("'$KUSER'"))  print $3}' $USERFILE`
MASCHINE=`who am i| awk '{print substr($6,2,length($6)-2)}'`
DISPLAY=$MASCHINE:0
DATUM=`date '+%d.%m.%Y %H:%M:%S'`
TEST1="1"

/usr/sbin/ping $EXCEEDSERVER > /dev/null 2>&1

if [ $? -eq 0 ]
then
   USERZ=`nawk '{if (toupper($1) == toupper("'$KUSER'"))  print "rsh " $3 " -l " $2 " /usr/home/scripts/startkondoruser '$DISPLAY'"}' $USERFILE`
else
   USERZ=`nawk '{if (toupper($1) == toupper("'$KUSER'"))  print "rsh " $4 " -l " $2 " /usr/home/scripts/startkondoruser '$DISPLAY'"}' $USERFILE`
   TEST1=""
fi

if [ -z "$USERZ" ]
then
   echo "$DATUM: Der User \"$KUSER\" auf der Maschine \"$MASCHINE\" ist nicht als Kondoruser angelegt!" >> nouser.log
   /usr/openwin/bin/xterm -display $DISPLAY -geometry 110x5 +sb -title "Kondor Error" -e /bin/sh -c " \
   echo $DATUM: Der User \"$KUSER\" auf der Maschine \"$MASCHINE\" ist nicht als Kondoruser angelegt!; \
   echo; \
   echo Bitte kontaktieren Sie ihren Kondor-Administrator.; \
   sleep 60 \
   "
else
   if [ -z "$TEST1" ]
   then
      echo "$DATUM: Server $EXCEEDSERVER antwortet nicht (User: $KUSER )." >> serverausfall.log
   fi
   echo "$DATUM: $USERZ" > startkondor.$KUSER.$$.log
   $USERZ >> startkondor.$KUSER.$$.log 2>&1
   sleep 60
fi

exit

Warum der User das so starten kann ist mir auch unerklärlich, aber es geht, und warum er es aber nicht stoppen kann, naja auch ein Mysterium.

So sehen die Rechte des Scriptes aus:



  • -rwxr-xr-x 1 root other 1594 Aug 8 15:55 startkondor

Im kondorusers - Script stehen nur die X - Server der jeweiligen Benutzer!
 

rolle

Guru
Ich bin jetzt zwar kein Scriptingguru, mir scheint aber das Script arbeite mit rsh zum Starten des Programms. Eventuell kann man damit den Prozeß auch killen.
 
OP
B

byron1778

Hacker
Hallo,

das haben wir schon versucht mittels rsh zu killen.
Leider bekommen wir "Permission denied".

Seltsam ist halt, dass man einen Prozess starten kann, aber nicht stoppen.
Nicht stoppen können lass ich mir einreden, aber dass ich einen Fremdprozess starten darf ist schon seltsam!
 
Jetzt mal 'ne blöde Frage, da ich mich mit Solaris so gar nicht auskenne: Was sagt ein ps aux | grep startkondoruser denn welcher Benutzer das Skript ausführt?

Und das nächste was mir so auffällt: Hast Du zwei Skripte mit fast identischen Namen? USERFILE ist nämlich mit kondorusers angegeben, während im Skript kondoruser also ohne s am Ende verwendet wird.
 

regexer

Advanced Hacker
Geier0815 schrieb:
Was sagt ein ps aux | grep startkondoruser denn welcher Benutzer das Skript ausführt?
Gar nichts, denn unter Solaris heißt sowas ähnliches ps -ef ;)
USERFILE ist nämlich mit kondorusers angegeben, während im Skript kondoruser also ohne s am Ende verwendet wird.
das kondorusers wird offensichtlich mit dem awk nach einem passenden Eintrag durchgeforstet und daraus Username und Rechnername entnommen - so verstehe ich das ganze zumindest.

byron1778 schrieb:
Warum der User das so starten kann ist mir auch unerklärlich, aber es geht, und warum er es aber nicht stoppen kann, naja auch ein Mysterium.
Also: aus deinem Script wird nicht so ganz deutlich, wieviele Rechner da mit im Spiel sind. Man kann natürlich auch eine rsh auf sich selbst aufmachen.

Abgesehen davon müsste es doch gehen, genau mit dieser rsh-Logik einen kill loszulassen. Also in etwa
Code:
rsh rechnername -l username "kill -15 PID"
Im Logfile startkondor.$KUSER.$$.log müsste doch der Startaufruf im Klartext drinstehen. Vom dem könntest du doch für einen schnellen Test abschreiben...
 
OP
B

byron1778

Hacker
Ein ps aux ... gibt es leider bei Solaris nicht, es ist hier ein ps -ef.

Das Script wird nur ausgeführt, wenn es angestossen wird.

Angestossen wird es durch den Anwender auf einem Windows - Desktop mit folgendem Befehl:

Code:
xstart.exe -m rlogin -h UZKONDOR -u startkon -c "/usr/home/scripts/startkondor Pxxx"

Also der User startkon stößt das Script an: startkondor
Und dieser startkondor meldet dann den Benutzer Pxxx an und setzt ihm die Displayvariable.

Bzgl. dem anderen File habe ich mich verschrieben, tut mir leid.
 

regexer

Advanced Hacker
byron1778 schrieb:
Also der User startkon stößt das Script an: startkondor
Und dieser startkondor meldet dann den Benutzer Pxxx an und setzt ihm die Displayvariable.
Und jetzt ist die Frage, wo der Benutzer via rsh angemeldet wird. Auf der selben Kiste wie der User startkondor?
Auf welchem Rechner soll dann der Kill erfolgen?
 
OP
B

byron1778

Hacker
Die Aufteilung ist so:

--> = Verbindung zu

Windows - PC --> Kondor --> X - Server

Anwender --> startkon läudt auf Kondor führt dann den Process auf X - Server aus (Pxxx)

also man kommt mit rsh vom Windows - PC zum Kondor und dann weiter zum X - Server

Das Verzeichnis, wo die Scripte liegen, wird gemountet am X - Server!
Physisch liegt das Verzeichnis auf der Kondor - Maschine.

Hoffe, ich habe es verständlich erklären können?!?!
 

regexer

Advanced Hacker
byron1778 schrieb:
Windows - PC --> Kondor --> X - Server

Anwender --> startkon läudt auf Kondor führt dann den Process auf X - Server aus (Pxxx)

also man kommt mit rsh vom Windows - PC zum Kondor und dann weiter zum X - Server
Wenn ich dich richtig verstanden habe läuft der zu killende Prozess auf dem "X - Server". Wenn du nun als startkon@Kondor eine rsh mit dem oben genannten kill aufrufst, dürftest du doch keine Probleme haben...

Oder willst du etwa die rsh killen?
 
OP
B

byron1778

Hacker
Richtig, der zu killende Process läuft auf dem X-Server.

Ob es mit startkon@KONDOR funkt muss ich ausprobieren.
Werde morgen dann Bescheid geben.

die rsh will ich nicht killen!!

Danke vielmals
 
Oben