PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnisse von FTP Usern festlegen



boesi666
17.09.03, 12:25
Hallo,

Ich habe mal eine Frage zu FTP User Erstellung und deren Rechten.
(Mein System:Linux Suse8.2)

Ich habe ein HTTP SERVER erstellt mit z.B. folgender Verzeichnisstruktur:

/home/userxy/PUBLIC_HTML\
-> DIR1
-> DIR2

Also /home/userxy/PUBLIC_HTML\DIR1
&
/home/userxy/PUBLIC_HTML\DIR2

Nun sollen 2 verschiedene User angelegt werden, wobei der eine nur auf DIR1 Zugriff hat und der andere nur auf DIR2

Mein Problem besteht darin, dass der Zugrif User nicht auf ein Verzeichnis begrenzt ist.
Ich habe zwar schon gefunden wie man ein Startverzeichnis vestlegt, in welches nach dem FTP Login automatisch gesprungen wird, ist aber nur der halbe Erfolg, wenn man dann anschliessend sämtliche Verzeichnisebenen höherrutschen kann.

Was ich bisher getan habe:
in die Datei /etc/passwd folgenden Eintrag eingefügt:

ftp_user_dir1:x:505:100::/home/userxy/public_html/DIR1:/dev/null

(Mit /dev/null soll kein Recht gegeben werden irgendeine Shell aufzuführen)

Wie gesagt springt der FTPCLient zwar nach dem Login in "::/home/userxy/public_html/DIR1", danach kann man jedoch beliebig bis zur Wurzel hochrutschen.

Hab schon überlegt, die LeseRechte des nächst höher liegenden Verzeichnis zu ändern, habe aber die Befürchtung, dass das public_html durch den httpd (Apache) Dienst auch nicht mehr gelesen werden kann und dann beim Surfen auf die Site wieder die lästigen "Acsess denied§ etc. Meldungen kommen


Hat jemand ne Idee??? Bei Anbietern wie Tripod etc geht'S ja auch. Is sicher ganz simpel...

ThanX im VORAUS!!

reno
17.09.03, 13:59
Ja griaß Di,

was für einen FTP Server verwendest du denn? Bei proftpd geht Das mit der "DefaultRoot"-Direktive. Ein "DefaultRoot ~" bewirkt, dass jeder FTP-User in seinem Heimatverzeichnis eingesperrt wird.

boxa
17.09.03, 14:56
noch ein hinweis. damit ein user sich nicht über eine shell anmelden kann, sollte man in der datei /etc/passwd die shell /bin/false angeben!!

meinem vorredner gebe ich absolut recht!

boesi666
17.09.03, 18:04
in meiner inetd.conf steht der eintrag

/usr/sbin/tcpd in.ftpd -u 22

Der propftpd oder wie der heisst ist deaktiviert, weil der nach der Installation keine Verbindung annahm (was für bessere Kenner sicherlich kein Problem wäre)

Wo kann man den das mit der DefaultRoute festlegen???

Doh!
18.09.03, 08:41
Original geschrieben von boesi666

Wo kann man den das mit der DefaultRoute festlegen???

Genau LESEN!: DefaultRoute != DefaultRoot
die Default Route hat was mit Netzwerk Routing zu tun, defaultroot was mit den unix-user und den Rechten!!!

boesi666
18.09.03, 11:33
Ja Danke.
Tschuldigung wegen DefaultRoute!!! Es heisst natürlich DefaultRoot. Hab ich durcheinander bekommen, weil ich mich mit dem Routing im Moment auch tierisch quäle.

So, ich hab jetzt das blöde in.ftpd runtergeschmissen und proftpd installiert.

Das mit dem DefaultRoot hilft aber nur indirekt.

Ich habe nun folgenden Eintrag gemacht:


DefaultRoot ~/public_html

Jetzt kann zwar jeder User beim Login nur sein public_html Verzeichnis sehen und nicht häher rutschen (was schon mal nicht schlecht ist) hilft aber noch nicht ganz weiter.:
Meine Verzeichnisstruktur:

/home/userxy/public_html/DIR1
/home/userxy/public_html/DIR2
/home/userxy/public_html/DIR3 etc

jetzt habe ich für den FTP Zugriff insgesamt 3 FTP User erstellt. (z.B. User_abc,User_2,Testuser)

Wenn die sich jetzt anmelden sucht dann aber jeder user nach z.B.:
/home/user_abc/public_html/
/home/user_def/public_html/
/home/testuser/public_html/

Sie sollen aber nach:

/home/userxy/public_html/DIR1
/home/userxy/public_html/DIR2
/home/userxy/public_html/DIR3

suchen und darin eingesperrt bleiben. Ist für mich recht knifflig, da jeder User nach nem Login in sein eigenes Homeverzeichnis springen will (was NICHT existiert, weil nicht notwendig und gewollt)

Kann man das umsetzen??
Wie gesagt, in der passwd.conf haben die User ihr eigentliches Startverzeichnis schon mitbekommen (user_abc:x:505:100::/home/userxy/public_html/DIR1:/bin/false etc.)
Ich will Sie darin nur noch "einsperren"

Um Hilfe bin ich wieder SEHR dankbar. Mann lernt ja nie aus...

Doh!
18.09.03, 12:18
Holla, das wird aber verzwickt:

Also nochmal zur rekapitulation ob ich's richtig kapiere:

Du hast insgesamt 4 user:
"userxy" mit dem Homeverzeichnis "/home/userxy"
"user_abc" mit dem Homeverzeichnis "/home/user_abc"
"user_def" mit dem Homeverzeichnis "/home/user_def"
"testuser" mit dem Homeverzeichnis "/home"testuser"

In den Homeverzeichnisen der user 2-4 gibt es jeweils ein Verzeichnis "public_html", die aber eigentlich für Dich nicht relaevant sind, denn die relevanten Daten finden sich in den Verzeichnissen

"/home/userxy/public_html/DIR1-3"

So, davon gehe ich jetz mal aus. Mache mal folgendes. Die Daten, die im Original in den Verzeichnissen

"/home/userxy/public_html/DIR1-3" liegen, kopiertst Du nach "/home/user_abc/public_html/DIR1", "/home/user_def/public_html/DIR2" und "/home/testuser/public_html/DIR3". Nun lösche den Inhalt (nicht die Folder selbst!) von "/home/userxy/public_html/DIR1-3", so dass diese leer sind. Nun machst Du folgende Befehle in der Konsole:



mount bind /home/user_abc/public_html/DIR1 /home/userxy/public_html/DIR1
mount bind /home/user_def/public_html/DIR2 /home/userxy/public_html/DIR2
mount bind /home/testuser/public_html/DIR1 /home/userxy/public_html/DIR3


Die originalen Dateien befinden sich nun auf den Homeverzeichnissen der User. Diese Ordner wurden jetzt aber zusätzlich in das home von userxy eingehängt. Somit stehen die überall zur Verfügung und Du kannst die user im Proftpd mit

DefaultRoot ~/public_html

einsperren.

Anmerkung: Das ganze würde in diesem konkreten Fall auch mit Symlinks funktionieren, allerdings würde es dann ein Problem geben, sobald das Verzeichnis "/home/userxy/public_html" ebenfalls über FTP freigegeben werden soll. Innerhalb einer CHROOT Umgebung funktionieren Symlinks nämlich bei Proftpd zumindest nicht! Warum kann man hier nachlesen: http://www.linuxforen.de/forums/showthread.php?s=&threadid=77904 (vierter Beitrag)

boesi666
18.09.03, 13:06
Vielen Dank für die Antwort!!!

Ganz so wie Du es verstanden hast ist es nicht. Ein Home Verzeichnis existiert NUR von Benutzer Userxy!!!!! Die User User_abc, User_def und TestUser haben KEIN EigenesHOME VERZEICHNIS. Es besteht für diese User ledeglich die Möglichkeit sich per FTP am System anzumelden. Die User User_abc, User_def und TestUser sollen per FTP lediglich jeweils Zugriff auf ein Verzeichnis
(
User_abc auf: /home/userxy/public_html/DIR1 ;
User_def auf /home/userxy/public_html/DIR2 und
Testuser auf /home/userxy/public_html/DIR3
)
haben.

Dies habe ich so gemacht, da ich Apache als DirectoryRoot ledeglich /home/userxy/public_html/ mitgeteilt habe. Die externen DE Domainadressen der verschiedenen Benutzer linken dann jeweils auf

LinuxRechnerIP/DIR1
LinuxRechnerIP/DIR2
LinuxRechnerIP/DIR3

Sollte sich das wirklich nicht auf diese Weise lösen lassen, muss ich eben für die verschiedenen Benutzer jeweils ein home/public_html Verzeichnis erstellen und Deinen Vorschlag somit umsetzen. Dann stellt sich mir aber die Frage ob der Apache Server genau wie ProFTP auf die "Links" von /home/userxy/public_html/DIR1 -> /home/User_abc/public_html/DIR1 reinfällt.
Ausserdem wäre es bei der Verlinkung innerhalb der HTML Projekte auch schwieriger, wenn die die Verzeichnisse auseinanderrupfe.

Doh!
18.09.03, 23:51
Original geschrieben von boesi666
Sollte sich das wirklich nicht auf diese Weise lösen lassen, muss ich eben für die verschiedenen Benutzer jeweils ein home/public_html Verzeichnis erstellen und Deinen Vorschlag somit umsetzen. Dann stellt sich mir aber die Frage ob der Apache Server genau wie ProFTP auf die "Links" von /home/userxy/public_html/DIR1 -> /home/User_abc/public_html/DIR1 reinfällt.
Ausserdem wäre es bei der Verlinkung innerhalb der HTML Projekte auch schwieriger, wenn die die Verzeichnisse auseinanderrupfe.

Brauchst Dir keine Sorgen zu machen, dass ist kein Rumgewackel, sondern eine saubere und legitime Lösung. Es ist ja gerade KEIN Link. Man hängt das Verzeichnis zusätzlich noch wo anders in den Verzeichnisbaum. Das ist unter Linux völlig i.O.

Im Moment fällt mir nix anderes ein (ich denk aber nochmal nach), weil Du halt kein homeverzeichnis vom einen user innerhalb eines homers eines anderen legen kannst.

Doh!
18.09.03, 23:55
warum liegen eigentlich die Apache Daten im Homeverzeichnis von userxy? Wenn das nicht nötig ist, wär's nämlich einfach

boesi666
19.09.03, 11:17
warum liegen eigentlich die Apache Daten im Homeverzeichnis von userxy? Wenn das nicht nötig ist, wär's nämlich einfach

-> Das wäre nicht unbedingt nötig. Habe ich Ursprungsweise so festgelegt, da ich zwischen dem Html Verzeichnis /srv/www von apache und dem home Verzeichnis des userxy keinen grossen technischen unterschied sah und es für mich so sauberer und ordentlicher aussah.

Alternative????

WebSurfer
29.04.04, 14:44
also, hier aufm server (P3-700, 100mbit anbindungs ans i-net)
will ich für 3 leuten ne shell einrichten, soweit kein thema.
aber die jungens sollen nur in ihr verzeichniss bleiben.
also /home/shell/user1/ oder /home/user1/ (bin da relativ offen :D )
aber leider finde ich nichts passendes, was mir da hilft.

jemand nen einfachen tip für mich ?


wird nur für shell benötigt, noch nicht für http, wenn des soweit ist, melde ich mich nochmals :D

boesi666
29.04.04, 20:36
Hab mir den ProFTPd FTP Server geholt & in dessen config folgenden Eintrag gesetzt:

DefaultRoot ~

(ftp root nach login in wurzel)

Dann hab ich die /etc/passwd editiert (Vorsicht beim bearbeiten!!! Benutzerdatei Linux!!!)

neuer Eintrag...

FTP_Usr1::500:100::/srv/ftp/userDir1:/bin/false
FTP_Usr2::501:100::/srv/ftp/userDir2:/bin/false
FTP_Usr3::502:100::/srv/ftp/userDir3:/bin/false

danach speichern & exit(!!)

Unterverzeichnisse jetzt anlegen und Gruppen & Benutzerrechte setzen:
cd /srv/ftp

mkdir userDir1
mkdir userDir2
mkdir userDir3
chown FTP_Usr1 userDir1
chown FTP_Usr2 userDir2 ...

danach mit passwd FTP_Usr1 [RETURN]
passwd FTP_Usr2 [RETURN]
passwd FTP_Usr3 [RETURN]

passwort festgelegt

danach sieht Eintrag in der /etc/passwd ungefähr so aus:
FTP_Usr1:fdAghj32:500:100::/srv/ftp/userDir1:/bin/false
FTP_Usr2:khjk§fd:501:100::/srv/ftp/userDir2:/bin/false
FTP_Usr3:öZj3657:502:100::/srv/ftp/userDir3:/bin/false

da in der passwd als shell bin/false angegeben wurde ist telnet login unmöglich.
Da Startverzeichnis /srv/ftp/UserDirXY gesetzt wurde ist dies somit die Wurzel des Users. Ein höher rutschen ist somit unmöglich.

Passwort ändern / login ist nur möglich, wenn der Zugrif (exist & Rechte) zum UserDir existieren.

Umständlich, aber es klappt. Für weitere Tipps bin ich selbst offen!!!!

WebSurfer
30.04.04, 06:42
hab kein FTP am laufen, nur SSH ;)
klappt des denn auch ?

boesi666
01.05.04, 17:42
weiss ich nicht genau. probier es.

ich weiss nur, dass du den jewiligen Usern auch alternativ ein einzelnes Programm als shell zuweisen kannst.

zb. FTP_Usr1::500:100::/srv/ftp/userDir1:/bin/mein_eigenes_proggie


ist mein_eigenes_proggie als shell angegeben, wird dieses auch nur nach login ausgeführt

(/bin/sh was sonst dtandart ist wäre die normale linux konsole)