Hallo,
ich schreibe gerade an einer (Login-)Shell, die User chrootet, wenn sie ein /./ in Pfad ihres Home-Verzeichnisses haben.
Funktioniert an und für sich schon ganz gut, es stören mich nur noch ein paar kleine Sachen.
Und zwar habe ich ein kleines Problem, wenn zwei User unterschiedliche Namen, aber gleiche uid haben und nur der eine gechrootet wird. Da ich mir nämlich den Login-Namen über getenv("USER") hole, kann der erste in das chroot des zweiten springen, wenn er USER umdefiniert. Es gibt IMO zwar nicht viele Fälle, wo man das ausnutzen kann, trotzdem möchte ich das gerne vermeiden.
Nun zur Frage: gibt eine Möglichkeit den Login-Namen außer über die Umgebungsvariable sicher zu bekommen oder o.g. Szenario anderweitig zu vermeiden?
Zweck des ganzen ist, den Usern beschränkten ssh-Zugriff zu gewähren. Ich weiß, dass es einen openssh-patch gibt, aber der funktioniert bei mir nicht richtig und gefällt mir auch nicht so.
Gibt es schon ein Programm, das sowas macht? Ich habe gesucht, aber bisher nichts gefunden.
Wenn jemand Interesse anmeldet schicke ich zum peer-Review auch gerne den ganzen Code.
Grüße
Frank Benkstein.
PS: Frohe Ostern.
On Sat, Apr 10, 2004 at 06:03:13PM +0200, Frank Benkstein wrote:
Hallo,
Hi Frank,
Nun zur Frage: gibt eine Möglichkeit den Login-Namen außer über die Umgebungsvariable sicher zu bekommen oder o.g. Szenario anderweitig zu vermeiden?
man getpwent(3)
Ciao, Tobias
Hallo.
On Tue, 13 Apr 2004 13:41:23 +0200 Tobias Koenig tokoe@kde.org wrote:
On Sat, Apr 10, 2004 at 06:03:13PM +0200, Frank Benkstein wrote:
Nun zur Frage: gibt eine Möglichkeit den Login-Namen außer über die Umgebungsvariable sicher zu bekommen oder o.g. Szenario anderweitig zu vermeiden?
man getpwent(3)
| The first time it is called it returns the first entry; thereafter, | it returns successive entries.
Was soll mir das bringen? Danach bin ich auch nicht schlauer. Ich habe ja, den Fall, dass zwei Nutzer gleiche uid haben, und trotzdem unterscheiden will, welcher von beiden es ist.
Frank.
On Tue, Apr 13, 2004 at 02:28:09PM +0200, Frank Benkstein wrote:
Hallo.
Hi Frank,
| The first time it is called it returns the first entry; thereafter, | it returns successive entries.
Was soll mir das bringen? Danach bin ich auch nicht schlauer. Ich habe ja, den Fall, dass zwei Nutzer gleiche uid haben, und trotzdem unterscheiden will, welcher von beiden es ist.
Ahh, ok. Das wird wohl nicht machbar sein, da Unix sich nun mal darauf verlässt das jeder Benutzer eine eigene UID hat. Wenn zwei Benutzer also die gleiche ID haben, sind sie aus Sicht des Betriebssystems immer identisch und können somit jederzeit auf die Prozesse des anderen zugreifen.
Ciao, Tobias
Frank Benkstein said:
man getpwent(3)
| The first time it is called it returns the first entry; thereafter, | it returns successive entries.
Was soll mir das bringen? Danach bin ich auch nicht schlauer. Ich habe ja, den Fall, dass zwei Nutzer gleiche uid haben, und trotzdem unterscheiden will, welcher von beiden es ist.
getenv("USER");
sorry, aber wenn Du Nutzer mit der selben UID unterscheiden willst musst Du Dich auf die USER-Variable verlassen. Unix kennt nur UIDs, keine Namen.
Konrad
Hallo.
On Tue, 13 Apr 2004 15:53:27 +0200 (CEST) "Konrad Rosenbaum" konrad@silmor.de wrote:
getenv("USER");
Ja, genau das sagte ich ja original post.
sorry, aber wenn Du Nutzer mit der selben UID unterscheiden willst musst Du Dich auf die USER-Variable verlassen.
PAM? s.u.
Unix kennt nur UIDs, keine Namen.
Ja, ich weiß. Ich dachte nur, es gibt irgendein Voodoo, um den Namen vom Login-Programm, ssh, su etc. zu bekommen. Es ging mir ja v.a. um eine schnelle Lösung und darum, mir solche Sachen in C mal anzuschauen. Wenn ich ein bißchen mehr Zeit habe, werde ich mich mal mit PAM (z.B. pam_chroot) beschäftigen, was wahrscheinlich die sauberere Lösung ist.
Meine Lösung einer chroot-shell ist aber in meinem Fall gerade deshalb praktisch, weil z.B. "su - foo -c program" das Programm auch im Jail ausführt, was - correct me if I'm wrong - bei PAM nicht der Fall wäre.
Geruhsamen Abend
Frank Benkstein.
lug-dd@mailman.schlittermann.de