Forum: PC Hard- und Software Hab plötzlich einen "Punkt" in $PATH ( openSuSE11.4)


von Giuseppe B. (brungi)


Lesenswert?

Hallo Leute,

kürzlich fiel mir auf, dass scripte im aktuellen Verzeichnis auch ohne 
angabe des relativ-Pfades ausführbar waren. Das soll so ja nicht sein. 
:(

Bei der Überprüfung von $PATH:
1
echo $PATH
2
/home/giui/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/opt/cross/bin:/usr/lib/jvm/jre/bin:/usr/lib/mit/bin:.

fällt dann sofort der einzelne Punkt am Schluss auf.

Nun kann ich aber die Datei nicht finden, welche für diesen Eintrag 
verantwortlich ist.
In /etc/profile , in /etc/bash.bashrc und in ~/.bashrc  steht´s nicht.

Wenn ich $PATH als "root" lese, dann fehlt der Punkt. Folglich müsste es 
irgendwo in der Einstellungen für den normalen Benutzer stehen.

Der Befehl
1
 
2
grep PATH *
vom Benutzerverzeichnis aus bringt gar nichts

Weiß jemand, wo ich noch suchen könnte?

mfg Giuseppe


mfg
Giuseppe

von Rolf (Gast)


Lesenswert?

Giuseppe B. schrieb:
> Der Befehl
> grep PATH *
> vom Benutzerverzeichnis aus bringt gar nichts

grep PATH .*

von Rolf (Gast)


Lesenswert?

bei mir mit Debian:

$ grep PATH .*
.profile:# set PATH so it includes user's private bin if it exists
.profile:    PATH="$HOME/bin:$PATH"

von Giuseppe B. (brungi)


Lesenswert?

mit
1
grep PATH .*

leider nur meine eigenen versuche aus der .bash_history

in der ~/.profile leider (fast) nur ein verweis auf /etc/profile.

(Editiert)
Dort nichts auffälliges...

von marc (Gast)


Lesenswert?

Giuseppe B. schrieb:
> mitgrep PATH .*
>
> leider nur meine eigenen versuche aus der .bash_history
>
> in der ~/.profile leider (fast) nur ein verweis auf /etc/profile.


such mal in ind ganz /etc nach zeugs.

Teilweise komme da Pfade noch aus ganz aderen Dateien
die dann included werden.

hast du den "." nur im X Terminal oder Konsole in deiner GUI ?
Oder auch auf der  Standart Konsolen ? (globales init script von anmelde
Manager oder deiner Gnome/kde/fvmw2/...... Datei.

von Markus M. (adrock)


Lesenswert?

...wenn alles nichts hilft:

find / -type f | xargs grep -lI "PATH"

Das sucht auf der ganzen Platte in allen non-binary files...

Aber ich vermute es eher in etc...

Werden evtl. noch Sachen aus /etc/profile.d/... gezogen?

Grüße
Markus

von marc (Gast)


Lesenswert?

suse.... lange nicht in der hand gehabt...habe yast und seine 10000 
Dateien immer gehasst.
aber das ist dann wohl auch der beste erste Angriffspunkt...
Ich meine mich erinnern zu können das es da ne Option gab den "." in 
path zu haben.

Wenn ich mich recht erinnere sollte das dann nur als user der fall sein.
Root hat dann einen anderen Path ohne den Punkt.

von Giuseppe B. (brungi)


Lesenswert?

Des Rätsels Lösung:

Hier ein Auszug aus der  etc/sysconfig/suseconfig:
1
## Type:        yesno
2
## Default:     yes
3
#
4
# Do you want to have "." in the path for normal users?
5
# Defaults to "yes" since this has been the case for years.
6
#
7
CWD_IN_USER_PATH="yes"

Bin ich total bescheuert, oder wieso bemerke ich das erst vor n paar 
Wochen ?
Was machen die da ? Wusste Jemand von euch, daß das seit n paar Jahren 
normal sein soll ?

marc schrieb:
> Wenn ich mich recht erinnere sollte das dann nur als user der fall sein.
> Root hat dann einen anderen Path ohne den Punkt.

Ja, das stimmt. Der root bekommt einen eigenen Eintrag, welcher in der 
Erklärung auf "NO" empfohlen wird.

von Jens G. (jensig)


Lesenswert?

Also gesehen hatte ich schon gelegentlich :. am Ende des PATH (eher im 
Unterbewußtsein ;-)
Kann Dir aber jetzt nicht sagen, ob das auf irgendeiner Möhre auf Arbeit 
war, oder sonst wo - habe eben nie darauf geachtet ...

von Uhu U. (uhu)


Lesenswert?

Giuseppe B. schrieb:
> Das soll so ja nicht sein.

Wieso eigentlich nicht?

von Simon B. (nomis)


Lesenswert?

Uhu Uhuhu schrieb:
> Giuseppe B. schrieb:
>> Das soll so ja nicht sein.
>
> Wieso eigentlich nicht?

Angenommen jemand sendet Dir per Mail ein ausführbares Programm namens 
"ls" und du legst das in dein Homeverzeichnis. Irgendwann gibst Du "ls" 
ein, hast den Punkt als erstes Element im Pfad und das "falsche" Binary 
wird ausgeführt.

Deswegen wird davon abgeraten den Punkt im Pfad zu haben.

Viele Grüße,
       Simon

von Rolf (Gast)


Lesenswert?

Simon Budig schrieb:
> Angenommen jemand sendet Dir per Mail ein ausführbares Programm namens
> "ls" und du legst das in dein Homeverzeichnis. Irgendwann gibst Du "ls"
> ein, hast den Punkt als erstes Element im Pfad und das "falsche" Binary
> wird ausgeführt.

Du musst noch dazu sagen, dass das falsche ls sehr böse sein kann, ein 
Virus oder ein Trojaner oder sowas.

von Uhu U. (uhu)


Lesenswert?

Rolf schrieb:
> Du musst noch dazu sagen, dass das falsche ls sehr böse sein kann, ein
> Virus oder ein Trojaner oder sowas.

Na ja, daß per EMail irgendwas bösartiges ohne Users Zutun direkt in ~ 
oder seine Unterverzeichnisse kommt, ist doch ziemlich unwahrscheinlich 
- deswegen haben die suse-Leute auch diese Option eingebaut.

von Rolf (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Rolf schrieb:
>> Du musst noch dazu sagen, dass das falsche ls sehr böse sein kann, ein
>> Virus oder ein Trojaner oder sowas.
>
> Na ja, daß per EMail irgendwas bösartiges ohne Users Zutun direkt in ~
> oder seine Unterverzeichnisse kommt, ist doch ziemlich unwahrscheinlich
> - deswegen haben die suse-Leute auch diese Option eingebaut.

In einem Mehrbenutzersystem kann man ja auch ein ls in /temp oder 
ähnlich legen. Dann noch schön die Funktionalität vom normalen ls 
einbauen plus versteckt die böse Funktion. Dann merkt man es erst 
später.

von Rolf (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> - deswegen haben die suse-Leute auch diese Option eingebaut.

Die Suse-Leute haben von Sicherheit und Vorsicht keine Ahnung.

von Uhu U. (uhu)


Lesenswert?

Rolf schrieb:
> In einem Mehrbenutzersystem

OK, dort macht das Standardverhalten auf jeden Fall Sinn.

Rolf schrieb:
> Die Suse-Leute haben von Sicherheit und Vorsicht keine Ahnung.

Und warum haben sie dann eine Option in yast dafür eingebaut?

von Rolf (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
>> Die Suse-Leute haben von Sicherheit und Vorsicht keine Ahnung.
>
> Und warum haben sie dann eine Option in yast dafür eingebaut?

Weil es viel Tipparbeit bei der Arbeit erspart. Nehmen wir z.B. 
Softwareentwicklung in C unter Linux. Du schreibst den Quelltext, 
kompilierst und dann führst Du aus.

In einem sicheren System führst Du aus mit "./ausfuehrdatei", im 
unsicheren Suse mit "ausfuehrdatei". Du sparst also im Suse das ./ 
vorweg. Das alles auf Kosten der Sicherheit.

Früher vor etlichen Jahren war . in $PATH mal üblich und beliebt. 
Heutzutage ist das anders aus Sicherheitsgründen. Nur die Suse-Leute 
haben das noch nicht mitbekommen wie mir scheint.

von Giuseppe B. (brungi)


Lesenswert?

Simon Budig schrieb:
> Uhu Uhuhu schrieb:
>> Giuseppe B. schrieb:
>>> Das soll so ja nicht sein.
>>
>> Wieso eigentlich nicht?
>
> Angenommen jemand sendet Dir per Mail ein ausführbares Programm namens
> "ls" und du legst das in dein Homeverzeichnis. Irgendwann gibst Du "ls"
> ein, hast den Punkt als erstes Element im Pfad und das "falsche" Binary
> wird ausgeführt.
>
> Deswegen wird davon abgeraten den Punkt im Pfad zu haben.

Genauso sieht´s nämlich aus...

von Simon B. (nomis)


Lesenswert?

Rolf schrieb:
> Früher vor etlichen Jahren war . in $PATH mal üblich und beliebt.

Heh, ich erinnere mich daran, ja.

Und es war immer eine schlechte Idee ein Testprogramm "test.c" zu 
nennen.

Plötzlich funktionieren dann diverse Shellskripte nicht mehr...

Viele Grüße (und frohe Feiertage)
        Simon

von Uhu U. (uhu)


Lesenswert?

Giuseppe B. schrieb:
> Genauso sieht´s nämlich aus...

Den . hinten anzufügen ist relativ gefahrlos, das Horroscenario mit dem 
falschen ls wird damit nicht auftreten, so lange es ein ls in den vor 
dem . aufgeführten Pfaden gibt.

Zudem ist dieses "Sicherheitsfeature" inkonsequent: Es gibt keinen 
Schutz davor . oder sonst irgendwas an den PATH an- oder einzufügen.

Das Ganze gehört wohl eher in die Kategorie Snakeoil.

von Simon B. (nomis)


Lesenswert?

Uhu Uhuhu schrieb:
> Zudem ist dieses "Sicherheitsfeature" inkonsequent: Es gibt keinen
> Schutz davor . oder sonst irgendwas an den PATH an- oder einzufügen.

Naja, es ist ja kein Security-Feature der Shell, sondern es ist eine 
etwas sicherere Defaultkonfiguration. Und über das Ausmaß der gewonnenen 
Sicherheit lässt sich sicher streiten. Mich hat in der Vergangenheit das 
"test"-Problem tatsächlich gebissen  :)

Ich habe mich inzwischen an das Tippen von "./" gewöhnt, meine eigenen 
Sachen packe ich in $HOME/bin (welches im $PATH ist) und fahre damit 
ganz gut.

Viele Grüße,
        Simon

von Uhu U. (uhu)


Lesenswert?

Simon Budig schrieb:
> Mich hat in der Vergangenheit das
> "test"-Problem tatsächlich gebissen

Dann hattest du aber den . vorne im PATH - das ist wirklich keine gute 
Idee, das aber nicht unbedingt aus Sicherheitsgründen, sondern weil man 
als User von einer bestimmten Hierarchie der Namensräume ausgeht, die 
damit gestört wird.

Aber man könnte den Schwachsinn mit dem ./ ja für politisch korrekt 
erklären... (auf englischen Tastaturen sind die beiden Zeichen auch 
besser zu greifen - da weiß der deutsche Michel dann gleich, daß der 
gegen die letzte Welt-Supermacht niemals im Leben einen Stich macht.)

von Simon B. (nomis)


Lesenswert?

Uhu Uhuhu schrieb:
> Dann hattest du aber den . vorne im PATH

Mag sein, ist inzwischen ein paar Jährchen her.

> - das ist wirklich keine gute
> Idee, das aber nicht unbedingt aus Sicherheitsgründen, sondern weil man
> als User von einer bestimmten Hierarchie der Namensräume ausgeht, die
> damit gestört wird.

Sagen wir so: Ich sehe keinen wirklich guten Grund, den "." in $PATH zu 
haben. Entweder man braucht ein Programm regelmäßig, dann ist es in 
$HOME/bin gut aufgehoben, oder man bastelt gerade daran rum, dann kann 
man die explizite Pfadangabe "./" mit angeben (bzw. wieder und wieder 
aus der History abrufen). Aber wenn für Dich nützlich ist: Biddeschön.

> Aber [...] Schwachsinn [...] politisch korrekt [...] englischen
> Tastaturen [...] deutsche Michel [...] Welt-Supermacht [...] Stich macht.)

Achso, du bist auf einem Kreuzzug  :)

Viele Grüße und fröhliche Feiertage,
        Simon

von Uhu U. (uhu)


Lesenswert?

Simon Budig schrieb:
> Sagen wir so: Ich sehe keinen wirklich guten Grund, den "." in $PATH zu
> haben.

Na, wenn Fingergymnastik gut ist, dann darf dort natürlich kein "." 
stehen, denn der würde nur dem inneren Schweinehund zuarbeiten und die 
Sitten würden im Sauseschritt verlottern.

von Giuseppe B. (brungi)


Lesenswert?

Jetzt sagen wir´s doch einfach mal so...

Sicherlich haben die Leute von SuSE irgendwas dabei gedacht als Sie den 
. in $PATH kurzerhand zum Standard erklärten. Vermutlich wollten Sie 
Linux-Anfängern den Wechsel von anderen Systemen wenigstens ein Bisschen 
erleichtern indem Sie Ihnen das  ... Fingerturnen ... für jeden 
einzelnen Script-Start abnehmen.  Mag ja ok sein.

Nun hatte sich aber in der Zeit davor bereits der Standard etabliert, 
nachdem man eben grundsätzlich KEINEN Punkt im Pfad hat.

Warum ich es erst so spät bemerkt habe ? Ich hatte nicht damit gerechnet 
und somit immer schön brav ./ vor die Scripte oder Programme (ausserhalb 
der Suchpfade) getippt.

Das Szenario mit dem falschen ls mag ja tatsächlich ziemlich 
unwahrscheinlich sein. Daher geht´s einfach um´s Prinzip...

mfg
Giuseppe

p.s. frohe Weihnachten allerseits

von Klaus Maus (Gast)


Lesenswert?

Hallo Simon,

Simon Budig schrieb:
>> Wieso eigentlich nicht?
>
> Angenommen jemand sendet Dir per Mail ein ausführbares Programm namens
> "ls" und du legst das in dein Homeverzeichnis. Irgendwann gibst Du "ls"
> ein, hast den Punkt als erstes Element im Pfad und das "falsche" Binary
> wird ausgeführt.

Erstens: niemand, ich wiederhole: absolut niemand kann einem Linux per 
E-Mail ein ausführbares Programm senden. Man kann zwar einen Anhang mit 
Programmcode versenden, aber auch der wird erst ausführbar, wenn jemand 
den Anhang in eine Datei speichert und deren Execute-Bit setzt.

Zweitens steht der Dot nicht als erstes, sondern als letztes Element in 
der PATH-Umgebungsvariable. Im lokalen Verzeichnis wird also erst 
gesucht, wenn alle anderen Pfade bereits erfolglos durchforstet sind.

Richtig ist daher, daß der Dot nicht als erstes Element in den Suchpfad 
gehört. Richtig ist auch, daß er gar nicht in den Pfad von root gehört. 
Aber ebenso richtig ist, daß es auf einem Desktopsystem kein besonderes 
Sicherheitsproblem darstellt, das aktuelle Verzeichnis als letzte Angabe 
in den Pfad zu übernehmen. Alles andere hat weniger mit Sicherheit zu 
tun, als mit einer totalen Paranoia.

Freundliche Grüße,
Klaus

von Klaus Maus (Gast)


Lesenswert?

Hallo nochmal, Simon,

Simon Budig schrieb:
> Rolf schrieb:
>> Früher vor etlichen Jahren war . in $PATH mal üblich und beliebt.
>
> Heh, ich erinnere mich daran, ja.

Nein, eigentlich ist es genau andersherum: früher mal, als Linux auf dem 
Desktop eher die Ausnahme und vor allem auf Servern im Einsatz war, 
wurde aus Sicherheitsgründen dringend von der Angabe des working 
directory in den Suchpfad abgeraten. Das war zum Beispiel bei 
fehlerhaften CGIs mit Dateiupload-Funktion nämlich durchaus gefährlich.

Seitdem Linux häufiger auf dem Desktop und vermehrt von unerfahrenen 
Usern eingesetzt wird, kann man das aktuelle Verzeichnis bei 
Desktop-Systemen durchaus ohne größere Probleme in den Suchpfad 
eintragen. Es sei denn, man hat Benutzer auf dem System, die wild auf 
alles klicken, das nicht schnell genug auf den Bäumen ist. Aber dann hat 
man ohnehin ganz andere Probleme.

> Und es war immer eine schlechte Idee ein Testprogramm "test.c" zu
> nennen.
>
> Plötzlich funktionieren dann diverse Shellskripte nicht mehr...

Nein, das ist überhaupt kein Problem. Wenn man das Testprogramm nämlich 
mit "gcc test.c" übersetzt, dann heißt das resultierende Binary "a.out".

Zum Problem wird das nur dann, wenn man das Programm in eine ausführbare 
Datei namens "test" übersetzt -- also: "gcc text.c -o test" -- und diese 
ausführbare Datei zudem in einem Verzeichnis gespeichert ist, das im 
Suchpfad vor dem Systemverzeichnis für das ausführbare Kommando "test" 
(/usr/bin) eingetragen ist. Dann, und nur dann, kann es nämlich 
passieren, daß ein fehlerhaftes Shellskript das eigene Programm "test" 
statt "/usr/bin/test" verwendet und dann -- wenn das eigene Programm 
eine andere Funktion hat als "/usr/bin/test" -- nicht mehr funktioniert.

Dann wäre aber das Shellskript fehlerhaft, denn wenn ein Shellskript 
"/usr/bin/test" nutzen will, dann soll es das gefälligst mit absoluter 
Pfadangabe referenzieren. Aber trotzdem kann das heute in den meisten 
Fällen nicht mehr passieren, denn die meisten Linux-Systeme (außer 
Ubuntu und ein paar Exoten) verwenden die Bourne Again Shell (bash) oder 
Busybox als Shell, und die haben ein eigenes Builtin Command namens 
"test", das auch vom [[]]-Shortcut verwendet wird.

Freundliche Grüße,
Klaus

von Uhu U. (uhu)


Lesenswert?

Klaus Maus schrieb:
> denn die meisten Linux-Systeme (außer
> Ubuntu und ein paar Exoten) verwenden die Bourne Again Shell (bash) oder
> Busybox als Shell,

Ubuntu nutzt auch die bash - [[]] funktioniert jedenfalls. Wäre das bei 
Ubuntu so, wie bei den "paar Exoten", dann wäre es auch bei Debian so, 
denn davon stammt Ubuntu direkt ab und erhält auch von dort die Mehrheit 
der Updates.

Ich habe bisher nur beim at-Kommando bemerkt, daß das mit der 
Bourne-Shell arbeitet - es warnt bei jedem Aufruf davor.

Diese Szenarien mit ls und test, die mit dem Punkt im PATH plötzlich ein 
kriminelles Eigenleben entwickeln sollen, sind einfach nur an den Haaren 
herbeigezogener Quatsch, der auf dem falsch plazierten '.' im PATH 
zurückzuführen ist. Wie

Giuseppe B. schrieb:
> Daher geht´s einfach um´s Prinzip...

und dem ist mit Argumenten nicht beizukommen, sondern höchstens mit 
Ironie und Sakasmus.

von Uhu U. (uhu)


Lesenswert?

Nachtrag: Die Idee der SuSE-Leute, den '.' kontrolliert und optional an 
die richtige Stelle im PAATH zu plazieren, ist sehr gut, weil so 
Erweiterungen des PATH überwacht werden und der '.' immer am Ende 
eingefügt wird.

von Klaus Maus (Gast)


Lesenswert?

Hallo Uhu,

Uhu Uhuhu schrieb:
> Klaus Maus schrieb:
>> denn die meisten Linux-Systeme (außer
>> Ubuntu und ein paar Exoten) verwenden die Bourne Again Shell (bash) oder
>> Busybox als Shell,
>
> Ubuntu nutzt auch die bash - [[]] funktioniert jedenfalls. Wäre das bei
> Ubuntu so, wie bei den "paar Exoten", dann wäre es auch bei Debian so,
> denn davon stammt Ubuntu direkt ab und erhält auch von dort die Mehrheit
> der Updates.

Im Gegensatz zu Debian verwendet Ubuntu standardmäßig die dash. Da 
funktioniert [[]] zwar auch, greift dabei jedoch meines Wissens nicht 
auf ein Builtin, sondern auf das externe Programm "test" zurück.

Freundliche Grüße,
Klaus

von Malte S. (maltest)


Lesenswert?

Und wenn man dann den Leuten den Umstieg von $OTHEROS einfach gemacht 
hat, dann fluchen sie nämlich, wenn sie dann mal die 
SuSE-Wattebauschumgebung verlassen und auf einem anderen Linux den 
ganzen Kram nicht vorfinden. s. auch Aliase wie ll="ls -l" oder ..="cd 
.."
Sind die paar Zeichen denn so schwer zu tippen, dass man das jedem von 
Anfang an vorsetzen muss? Wenn $POWERUSER das selbst macht, dann ist das 
wenigstens ne qualifizierte Entscheidung für die Bequemlichkeit.

von Uhu U. (uhu)


Lesenswert?

Klaus Maus schrieb:
> Im Gegensatz zu Debian verwendet Ubuntu standardmäßig die dash.

Wie kann man das herausbekommen?

Malte S. schrieb:
> Wenn $POWERUSER das selbst macht, dann ist das
> wenigstens ne qualifizierte Entscheidung für die Bequemlichkeit.

Nur daß die Option von SuSE doch etwas mehr ist, als "selbermachen": Es 
wird sichergestellt, daß der '.' auch nach den nächsten (automatischen?) 
Pfaderweiterung auch noch am Ende steht.

von Klaus Maus (Gast)


Lesenswert?

Hallo Uhu,

Uhu Uhuhu schrieb:
> Klaus Maus schrieb:
>> Im Gegensatz zu Debian verwendet Ubuntu standardmäßig die dash.
>
> Wie kann man das herausbekommen?

Wenn Du eine Ubuntu-Installation zur Hand hast, kannst Du ja mal
1
ls -l /bin/sh
oder
1
echo $0
in Deine Shell eingeben, oder ansonsten hier:

  https://wiki.ubuntu.com/DashAsBinSh
  http://en.wikipedia.org/wiki/Debian_Almquist_shell
  http://wiki.ubuntuusers.de/Dash

nachlesen.

Ein anderer Hinweis ist der häßliche Shellprompt, den neu angelegte User 
haben -- die müssen dann erstmal chsh(1) ausführen, um eine bash (oder 
zsh, csh, ksh) zu bekommen. ;-)

HTH,
Klaus

von Uhu U. (uhu)


Lesenswert?

Klaus Maus schrieb:
> Wenn Du eine Ubuntu-Installation zur Hand hast, kannst Du ja mal
> ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mär 29  2012 /bin/sh -> dash

> echo $0
bash

Interessant. Dort wo sh aufgerufen wird - also z.B. in at - wird die 
dash benutzt. In dem bei der Installation angelegten User ist es die 
bash.

Wenn man einen neuen User anlegt, dann bekommt der auch automatisch die 
bash.

von Malte S. (maltest)


Lesenswert?

Uhu Uhuhu schrieb:
> Nur daß die Option von SuSE doch etwas mehr ist, als "selbermachen": Es
> wird sichergestellt, daß der '.' auch nach den nächsten (automatischen?)
> Pfaderweiterung auch noch am Ende steht.

Ja schon, so magic ist das jetzt auch nicht, es wird halt in 
/etc/profile.d/profile.sh sichergestellt, dass der Punkt bei 
eingeschalteter Option ans Ende gestellt wird. Kann man auch in 
~/.bashrc sehr einfach machen.
Ich will das Feature auch gar nicht schlechter machen als es ist, es ist 
an sich ja eine nette Sache. Aber als Standardeinstellung fällt es für 
mich schon klar in die Kategorie der SuSE-Spezialitäten, die einen dann 
beißen, wenn man sie - da Standard - ohne nachzudenken als gegeben 
ansieht, wenn man es mal mit einer nicht per default so eigenwillig 
durchkonfigurierten Distro zu tun hat :)

von Simon B. (nomis)


Lesenswert?

Hallo Klaus.

Klaus Maus schrieb:
> Simon Budig schrieb:
>>> Wieso eigentlich nicht?
>>
>> Angenommen jemand sendet Dir per Mail ein ausführbares Programm namens
>> "ls" und du legst das in dein Homeverzeichnis. Irgendwann gibst Du "ls"
>> ein, hast den Punkt als erstes Element im Pfad und das "falsche" Binary
>> wird ausgeführt.
>
> Erstens: niemand, ich wiederhole: absolut niemand kann einem Linux per
> E-Mail ein ausführbares Programm senden. Man kann zwar einen Anhang mit
> Programmcode versenden, aber auch der wird erst ausführbar, wenn jemand
> den Anhang in eine Datei speichert und deren Execute-Bit setzt.

...oder man es auf einem gemounteten DOS-Filesystem abspeichert, das so 
gemounted ist, dass bei allen Dateien automatisch das x-flag gesetzt 
wird.

...oder das "bösartige" ls in einem tar-archiv ist und der Nutzer die 
Anweisung bekommt, das auszupacken und der sich dann mal mit "ls" den 
Inhalt angucken will.

Oder was auch immer. Natürlich sind das konstruierte Beispiele wo auf 
mehreren Ebenen etwas schiefgehen muss, damit das Problem zum Tragen 
kommt.

Der Punkt (pun intended) ist doch, dass man mit dem Punkt im Pfad ein 
Stück weit die Kontrolle darüber aufgibt, wo die ausführbaren Programme 
hergenommen werden. Und damit automatisch die Schilde ein Stück weit 
senkt. Ob das für einen relevant ist oder nicht, muss man letztlich 
selber bewerten. Ich bin der letzte, der hier anderen Leuten den Punkt 
im Pfad verbieten will.

> Zweitens steht der Dot nicht als erstes, sondern als letztes Element in
> der PATH-Umgebungsvariable.

Du meinst in dem System was Du kennst ist es so. Und Du kennst kein 
Gegenbeispiel. Bei mir damals (tm) war es ein AIX, welches man erstmal 
mit selbstgestrickten Startup-Skripten in einen benutzbaren Zustand 
bringen musste. Und natürlich habe ich mir damals keine Gedanken 
darüber gemacht, ob der Punkt vorne oder hinten hingehört.

Solche Policies wie "der Punkt gehört nicht in den Pfad" sind immer für 
die Nutzer die keine Ahnung haben. In dem Moment was man weiß was man 
tut kann man die gepflegt ignorieren.

> Alles andere hat weniger mit Sicherheit zu tun, als mit einer totalen
> Paranoia.

Ach was. Ich habe mir schon so oft selber in den Fuß geschossen, dass 
ich solche Guidelines gerne annehme um mich vor mir selbst zu schützen. 
Das hat mit Paranoia nix zu tun.

> Nein, das ist überhaupt kein Problem. Wenn man das Testprogramm nämlich
> mit "gcc test.c" übersetzt, dann heißt das resultierende Binary "a.out".

Wie gut dass Du besser weißt als ich, wie ich damals den Compiler 
aufgerufen habe. Bestimmt habe ich mir das komische Verhalten damals nur 
eingebildet...   :-)

(Natürlich habe ich es "test" genannt, und natürlich war der "." vor 
allem anderen in meinem Pfad. Natürlich bin ich selber schuld.)

> Aber trotzdem kann das heute in den meisten Fällen nicht mehr passieren,
> denn die meisten Linux-Systeme (außer Ubuntu und ein paar Exoten)
> verwenden die Bourne Again Shell (bash) oder Busybox als Shell, und die
> haben ein eigenes Builtin Command namens "test", das auch vom
> [[]]-Shortcut verwendet wird.

Klar, und SuSE ist Industriestandard und für alle Linux-Systeme 
vorgeschrieben. Wie sollen sich auch Systeme durchsetzen können, wenn 
die "." nicht im Pfad haben???!? Und außer Linux gab es eh nie was 
anderes.

Im Ernst: Wir diskutieren hier doch über Sinn und Unsinn von "." im 
Pfad. Und um zu verstehen, wie eine solche Guideline wie "kein Punkt im 
Pfad" entstehen konnte und warum die mindestens mal sinnvoll war macht 
es doch keinen Sinn, a) nur Systeme zu betrachten die sich aus deiner 
Sicht vernünftig verhalten und b) einen vernünftigen Nutzer 
vorauszusetzen.

Wir reden hier von historisch gewachsenen "Regeln". Und die kommen eben 
typischerweise mit einem Batzen Geschichte, in diesem Fall tonnenweise 
wechselseitig inkompatible Shells, obskure Administrationstools, DAUs 
etc. pp. Und auch wenn das Angriffspotential inzwischen vielleicht 
wieder geringer ist können sie immer noch durchaus sinnvoll sein, 
insbesonders wenn man von Nutzern ausgeht, die keine 100%igen Cracks 
sind.

Viele Grüße,
        Simon

von Klaus Maus (Gast)


Lesenswert?

Hallo Uhu,

Uhu Uhuhu schrieb:
> Klaus Maus schrieb:
>> Wenn Du eine Ubuntu-Installation zur Hand hast, kannst Du ja mal
>> ls -l /bin/sh
> lrwxrwxrwx 1 root root 4 Mär 29  2012 /bin/sh -> dash
>
>> echo $0
> bash

Du bist sicher, daß Du da nichts umkonfiguriert hast? Welche Login-Shell 
ein User bekommt, steht in /etc/passwd. Der User kann das per chsh(1) 
ändern, als Sysop kannst Du das beim useradd(8) mit dem Parameter -s 
angeben (oder systemweit per default: siehe unten).

De facto haben dash(1) und bash(1) jedoch eine ähnliche Funktionalität 
und so ziemlich dieselbe Syntax, nur daß die bash(1) eben noch einen 
Haufen feine Sachen für den interaktiven Modus mitbringt wie Tab 
Completion, die Readline-Bibliothek und die Builtin Commands. Das macht 
die bash(1) zwar ziemlich fett, was ihren Ressourcenverbrauch angeht, 
prädestiniert sie aber andererseits für den interaktiven Modus, in dem 
sie deutlich mehr Komfort bietet als die dash(1).

Da man diese interaktiven Funktionen bei der Abarbeitung von Skripten 
aber nicht braucht, ist die dash(1) da besser geeignet als die fette 
bash(1), weil die dash(1) deutlich kleiner und daher viel 
ressourcenschonender ist. Das zeigt sich dann auch im einfachen 
Vergleich:
1
kl@us:~$ for i in $(which bash) $(which dash); do du -hs $i; ldd $i | sort; done
2
940K    /bin/bash
3
        /lib64/ld-linux-x86-64.so.2 (0x00007f6b66267000)
4
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6b65a52000)
5
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6b65e12000)
6
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6b66016000)
7
        linux-vdso.so.1 =>  (0x00007fffd244f000)
8
112K    /bin/dash
9
        /lib64/ld-linux-x86-64.so.2 (0x00007f14729dc000)
10
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f14725f3000)
11
        linux-vdso.so.1 =>  (0x00007fff885ff000)

Ziemlich eindeutig, oder?

> Interessant. Dort wo sh aufgerufen wird - also z.B. in at - wird die
> dash benutzt. In dem bei der Installation angelegten User ist es die
> bash.
>
> Wenn man einen neuen User anlegt, dann bekommt der auch automatisch die
> bash.

Das wird in /etc/default/useradd mit der Variablen SHELL festgelegt.

Freundliche Grüße,
Klaus

von Uhu U. (uhu)


Lesenswert?

Klaus Maus schrieb:
> Du bist sicher, daß Du da nichts umkonfiguriert hast? Welche Login-Shell
> ein User bekommt, steht in /etc/passwd. Der User kann das per chsh(1)
> ändern, als Sysop kannst Du das beim useradd(8) mit dem Parameter -s
> angeben (oder systemweit per default: siehe unten).

Ja. Ich habe extra in einer VM mit Ubuntu 12.04 einen neuen User 
angelegt und mit echo $0 im Terminal bash bekommen. Das System ist 
natürlich für meine Vorlieben konfiguriert - Gnome und rails ist drauf - 
welche shell man als user bekommt, habe ich jedoch nicht geändert.

> nur daß die bash(1) eben noch einen
> Haufen feine Sachen für den interaktiven Modus mitbringt wie Tab
> Completion, die Readline-Bibliothek und die Builtin Commands.

Das sind Dinge, die ich schon lange unter Ubuntu nutze, ohne mir groß 
Gedanken gemacht zu haben, ob ich dafür eine andere shell brauche.

> Das wird in /etc/default/useradd mit der Variablen SHELL festgelegt.

Merkwürdig: dort ist nur die Zeile
1
SHELL=/bin/sh
nicht auskommentiert. Trotzdem habe ich die bash als loginshell.

Das mit dem Speicherplatz ist ja heutzutage nicht mehr so das Problem.

von Klaus Maus (Gast)


Lesenswert?

Hi Simon,

Simon Budig schrieb:
> Oder was auch immer. Natürlich sind das konstruierte Beispiele wo auf
> mehreren Ebenen etwas schiefgehen muss, damit das Problem zum Tragen
> kommt.

Der Punkt (pun stolen) ist justament, daß da auf mehreren Ebenen etwas 
schief gehen muß und bei den Sicherheitsproblemen, die dadurch 
entstehen, das CWD im PATH noch das mit Abstand kleinste Problem ist.

Wovor soll es schützen, das CWD nicht in den PATH aufzunehmen? Davor, 
daß ein Angreifer, der schon a) Code auf unserem System platzieren und 
diesen b) ausführbar machen konnte, uns nicht auch noch c) dazu bringen 
kann, den Code unter unserer UID auszuführen. In dem Szenario, in dem 
uns der Inhalt von PATH uns vor einem Angriff schützt, haben wir also 
längst verloren und einen Angreifer nebst seinem Code auf dem System. 
Anders gesagt: zu einem Zeitpunkt, in dem uns die Einstellung von PATH 
mehr Sicherheit geben kann, ist es längst zu spät und das System bereits 
kompromittiert.

Was die Nichtaufnahme des CWD in den PATH nun also bewirkt, ist 
allenfalls eine Verbesserung der gefühlten Sicherheit. Das ist aber 
noch schlimmer, denn ein User, der sich sicher fühlt, wird im 
Zweifelsfalle dazu neigen, höhere Risiken einzugehen. Eine echte 
Auswirkung auf das Sicherheitsniveau des Systems hat die Einstellung 
aber nicht -- denn sie kann ja wie gezeigt erst greifen, wenn das Kind 
bereits im Brunnen liegt.

Statt nun also über solche Kinkerlitzchen zu hyperventilieren, sollte 
man sich vielmehr darauf konzentrieren, zu verhindern, daß ein Angreifer 
Code auf dem System ablegen und ihn ausführbar machen kann. Denn im 
Zweifel legt unser Angreifer seinen Code ohnehin in einem Verzeichnis 
ab, das im systemweiten PATH enthalten ist -- oder er kann den 
systemweiten PATH so manipulieren, daß das Verzeichnis mit seinem Code 
darin enthalten ist.

Freundliche Grüße,
Klaus

von Klaus Maus (Gast)


Lesenswert?

Hi Uhu,

Uhu Uhuhu schrieb:
> Ja. Ich habe extra in einer VM mit Ubuntu 12.04 einen neuen User
> angelegt und mit echo $0 im Terminal bash bekommen.

Ähm, okaaay... /me äußert Befremden.

>> Das wird in /etc/default/useradd mit der Variablen SHELL festgelegt.
>
> Merkwürdig: dort ist nur die Zeile
>
1
> SHELL=/bin/sh
2
>
> nicht auskommentiert. Trotzdem habe ich die bash als loginshell.
>
> Das mit dem Speicherplatz ist ja heutzutage nicht mehr so das Problem.

Hmmm... legst Du Benutzer mit dem GUI-Tool von Ubuntu an? Unter 
(K)Ubuntu trägt useradd(8) nämlich tatsächlich das ein, was in 
/etc/default/useradd steht. Wenn das GUI-Tool (das ich nicht benutze, 
ich bin ein bekennender Kommandozeilenjunkie) nicht die Einstellung aus 
/etc/default verwendet, würde ich das allerdings für einen Bug im 
GUI-Tool halten.

Freundliche Grüße,
Klaus

von Uhu U. (uhu)


Lesenswert?

Klaus Maus schrieb:
> Hmmm... legst Du Benutzer mit dem GUI-Tool von Ubuntu an?

Nein, das hatte ich mit adduser im Terminal gemacht.

von Klaus Maus (Gast)


Lesenswert?

Hallo Uhu,

Uhu Uhuhu schrieb:
> Klaus Maus schrieb:
>> Hmmm... legst Du Benutzer mit dem GUI-Tool von Ubuntu an?
>
> Nein, das hatte ich mit adduser im Terminal gemacht.

OK, das zieht seine Config offenbar aus /etc/adduser.conf, und da ist 
als DSHELL tatsächlich /bin/bash eingetragen. Weiß der Himmel, warum die 
Ubuntu-Leute das so machen...

Freundliche Grüße,
Klaus

von Jens G. (jensig)


Lesenswert?

@Klaus Maus (Gast)

>kl@us:~$ for i in $(which bash) $(which dash); do du -hs $i; ldd $i | sort; >done
>940K    /bin/bash
>        /lib64/ld-linux-x86-64.so.2 (0x00007f6b66267000)
>        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6b65a52000)
>        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6b65e12000)
>        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 
>(0x00007f6b66016000)
>        linux-vdso.so.1 =>  (0x00007fffd244f000)
>112K    /bin/dash
>        /lib64/ld-linux-x86-64.so.2 (0x00007f14729dc000)
>        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f14725f3000)
>        linux-vdso.so.1 =>  (0x00007fff885ff000)
>
>Ziemlich eindeutig, oder?

Nicht wirklich. bash mag zwar mehr Libs anziehen als dash, aber die 
zusätzlichen Libs sind wahrscheinlich/möglicherweise bereits von anderen 
Prozessen geladen worden. Und wenn schonmal von einem Prozess geladen, 
dann wird diese Lib nicht mehr für weitere Prozesse nochmal geladen. Die 
ganze Sache relativiert sich also ganz kräftig, und ist für gewöhlich 
(zumindest bei den Standard-Libs) bezüglich Ressourcen/Speicher nicht 
die Rede wert.
Wenn Du die Bash zweimal startest, belegt der Code ja nicht den 
zweifachen Platz im Speicher.

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.