PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C programm läuft nicht in der Konsole



Compiman79
29.02.04, 22:22
Hallo
fange grade mit Linux und C Programmierung an, das erste " Hallo Welt" Programm habe ich schon fertig Compilert aber kann es nicht in der Konsole starten oder es macht zumindest nichts was mache ich falsch oder wo kann ich es starten
habe es so Compilert " cc -o Hallo Hallo.c " danke schon mal in Windows läuft es(aber wer will Windows wenn man Linux hat?) :)

aTTo
29.02.04, 22:27
./Hallo

Detrius
29.02.04, 22:27
Wie hast du es denn versucht zu starten und was war die Fehlermeldung?
Normalerweise kannst Du Dateien im aktuellen Verzeichnis nur ausführen, wenn du ein "./" voranstellst, also "./dateiname".

Bei Fragen zur Programmierung, bist Du im Schwesterforum www.mrunix.de (http://www.mrunix.de) eigentlich besser aufgehoben.

sirmoloch
29.02.04, 22:32
Original geschrieben von Detrius
Normalerweise kannst Du Dateien im aktuellen Verzeichnis nur ausführen, wenn du ein "./" voranstellst, also "./dateiname".

Alternativ die Pfadvariable ändern: PATH=$PATH:.
bzw. die ~/.profile bearbeiten.

f0rtex
29.02.04, 23:11
Original geschrieben von sirmoloch
PATH=$PATH:.

Sicherheitstechnisch ist das bedenklich ;)
ergo: Sein lassen ;)

Blackhawk
01.03.04, 08:07
Auch nicht vergessen das EXECUTE-Recht zu setzen ;)

Bubble
01.03.04, 09:36
Macht das nicht schon der Compiler?
Bubble

zander
01.03.04, 10:46
Der linker erzeugt eine ausführbare Datei (insofern es keine umask Konflikte gibt).

Compiman79
01.03.04, 13:39
So kann mich nur noch mal bei euch bedanken besonders bei Detrius und aTTo
das mit ./ hat mir nur gefehlt. Danke Danke Danke :)

sirmoloch
01.03.04, 21:05
Original geschrieben von f0rtex
Sicherheitstechnisch ist das bedenklich ;)
ergo: Sein lassen ;)

Hmm, das musst du mir erklären. Was ist daran gefährlich?

Monsta
01.03.04, 21:26
Bsp.: Jemand packt in irgendein Verzeichnis auf dem Rechner an dem du sitzt, z.B. einer mit mehreren user accounts und gemeinsamem verzeichnis ein bösartiges programm. Du gehst nun in das verzeichnis und willst eine datei herauskopieren und tippst cp bla.bla /bla.bla ein. dummerweise hat der böse bub sein böses Programm cp genannt und es ausführbar in das gemeinsame verzeichnis gepackt. nun löscht das Teil deine ganzen selbstgeschriebenen Texte. Blöd oder?

MfG Monsta

P.S. WEnn was falsch war bitte verbessern!:D

Bubble
01.03.04, 23:23
Nein, das ist auch der Grund der mir einfallen würde warum es unsicher ist . in $PATH aufzunehmen.

Nur mal eine Frage: Wird $PATH der Reihe nach durchgearbeitet oder zufällig? Denn wenn . ganz am Ende steht würde dennoch das richtige cp ausgeführt werden, und dann wäre es sicherheitstechnisch nicht mehr bedenklich. Weiß da jemand was definitives über die Reihenfolge?
Bubble

christophwth
02.03.04, 02:02
HI

nein die reichenfolge ist von vorne nach hinten.
d.h dein programm cp wird nur ausgeführt wenn die
anderen pfade kein cp enthalten.
selbst wenn die anderen cp versionen nicht das recht haben ausgeführt zu werden.

totzdem gibt es fälle in denen es sicherheitstechnisch bedenklich ist den . im pfad zu haben

gruss
christoph

zander
02.03.04, 09:21
@christophwth: das stimmt nicht ganz, die shell durchsucht PATH nach ausführbaren Dateien, nicht ausführbare Dateien gleichen Namens werden ignoriert (vgl. z.B. bash(1), COMMAND EXECUTION).

Ein einfacher Versuch dazu:

# cd /tmp; mkdir bin
# echo '#!/bin/bash' > bin/cp; echo 'echo "malicious cp!"' >> bin/cp
# chmod +x bin/cp
# cp --version | head -1
cp (coreutils) 5.0.91
# export PATH=/tmp/bin:$PATH
# cp --version | head -1
malicious cp!
# chmod -x bin/cp
# cp --version | head -1
cp (coreutils) 5.0.91

christophwth
02.03.04, 13:19
Hi

@zander den test versteh ich nicht ganz

export PATH=/tmp/bin:$PATH

damit setzt du das /tmp/bin doch ganz an den anfang
wenn du selbiges mit export PATH=$PATH:/tmp/bin machst sollte das
nicht passieren ?

ich habe es selber auch getestest
ein kleine C-programm mit namen cp im homeverzeichnis mit rechten 777 versehen.
# cp
bewirkt das /bin/cp ausgeführt wurde
#chmod 700 /bin/cp
#cp
hatte eine fehlermeldung zur folge .

der selbe test ergibt jetzt unter debian das mein programm ausgeführt wurde ?
der andere test war meines wissens unter slackware.
( schon blöd wenn man immer mehr als ein linux system zur zeit laufen hat ;) )

gruss
christoph

sirmoloch
02.03.04, 16:29
@Monsta: Unter dem Aspekt hast du natürlich Recht! Aber, wie die Anderen ja schon festgestellt haben, wird $PATH von vorne nach hinten interpretiert und daher sieht die Situation anders aus...;)

Auf jeden Fall danke! Unter dem Aspekt habe ich noch nie über $PATH nachgedacht...;)

zander
02.03.04, 22:09
@christophwth: 0700 ist ausführbar, wenn auch nicht für jedermann; der Versuch sollte nur zeigen, daß die shell (zumindest bash) nicht-ausführbare Dateien gleichen Namens ignoriert. Vielleicht hättest Du Deine ursprüngliche Aussage zu "selbst wenn Dein Benutzer nicht das Recht hat weitere, für andere Benutzer ausführbare cp Versionen auszuführen" präzisieren sollen? Wortklauberei, ich weiß... ;)