Mögliches Duplikat:
Linux-Verzeichnisberechtigungen
Ich arbeite mit einigen Drittentwicklern zusammen und möchte SFTP- (oder FTP-) Zugriff auf den Stammordner für eine Website gewähren, an der sie arbeiten, dh '/var/www/html/website_abc'
damit sie die Dateien dort hochladen können. Beachten Sie, dass ich meine anderen Websites dort auf derselben EC2-Instanz hoste, z '/var/www/html/website_xyz'
.
Um zu betonen, dass ich mit mehreren Websites an einer einzelnen EC2-Instanz arbeite, sieht die Struktur der Websites wie folgt aus:
/ var / www / html /
/ var / www / html / website_abc
...
/ var / www / html / website_xyz
Meine Ziele sind wie folgt:
- Der Benutzer 'adeveloper' hat Zugriff auf '/ var / www / html / website_abc' und nur auf '/ var / www / html / website_abc'
- Ich nehme an, der Benutzer 'adeveloper' verwendet 'adeveloper @ [meine elastische IP]' als Benutzernamen, um sich bei SFTP (oder FTP) anzumelden. Stimmt das?
- Der Benutzer 'adeveloper' hat keinen Zugriff auf '/ var / www / html /' oder andere Verzeichnisse in meiner EC2-Instanz
- Wie wäre es mit der privaten Schlüsseldatei?
- Übergebe ich meine private Schlüsseldatei an die Entwickler von Drittanbietern - ist es ratsam, dies zu tun?
- Gibt es eine Möglichkeit, eine andere private Schlüsseldatei für sie zu generieren oder ihnen zu erlauben, sich stattdessen mit Benutzername und Passwort anzumelden?
Ich habe gesucht, aber die meisten Leute haben darüber gesprochen, wie man über SFTP auf EC2 zugreifen kann, was ich bereits mit WinSCP kann.
Klarstellungen:
- Ich würde 'adeveloper' brauchen, um Sachen hochladen zu können, für
/var/www/html/website_abc
die die Berechtigung 'Schreiben' besteht - Ich würde 'adeveloper' brauchen, um keine 'Schreib'-Erlaubnis für irgendwelche Dateien / Verzeichnisse zu haben
/var/www/html/
, und idealerweise nicht einmal' Lese'-Erlaubnis - Hier scheint es jedoch ein großes Problem zu geben:
/var/www/html/
hat bereits die Berechtigung 777, da dies mein DocumentRoot-Ordner ist. Wie kann ich verhindern, dass "Adeveloper" auf meine andere Website zugreift?
Teilweise gelöst Ich habe es geschafft, meine Ziele mit OpenSSH zu erreichen (ich erstelle einen .ssh-Ordner in / var / www / html / website_abc / und erstelle einen privaten Schlüssel und gebe ihn an die Entwickler von Drittanbietern weiter). Ich habe auch erfahren, dass ich niemals die private Schlüsseldatei geben sollte, die AWS mir gegeben hat. Ich lerne immer noch etwas über Chroot.
Antworten:
Standardmäßig ermöglichen Dienste, die eine Remote-Shell wie ssh oder telnet oder eine interaktive Remote-Sitzung für Befehle wie sftp bereitstellen, einem lokalen Benutzer, in ein Verzeichnis zu wechseln, für das er Berechtigungen hat, und eine Kopie aller Dateien abzurufen, auf die er Zugriff hat.
Als allgemeine Sicherheitskonfiguration ist dies unglücklich, da es viele Dateien und Verzeichnisse gibt, die notwendigerweise weltweit lesbar sind. Zum Beispiel bin ich hier ein Nicht-Root-Benutzer auf einer entfernten CentOS-Box.
Ich kann zB auf viele Dinge zugreifen, die Sie idealerweise von einem unbekannten Benutzer einschränken möchten, auf den Sie lokalen Zugriff gewähren möchten.
Hier sehe ich mir alle in der
/etc/passwd
Datei konfigurierten lokalen Benutzer an .Unix-Systeme bieten den
chroot
Befehl, mit dem Sie/
den Benutzer auf ein Verzeichnis in der Dateisystemhierarchie zurücksetzen können, in dem er nicht auf "übergeordnete" Dateien und Verzeichnisse zugreifen kann.In Ihrem Fall ist es jedoch angebracht, eine virtuelle Chroot bereitzustellen, die vom Remote-Shell-Service implementiert wird. sftp kann einfach so konfiguriert werden, dass ein lokaler Benutzer auf eine bestimmte Teilmenge des Dateisystems beschränkt wird
Daher möchten Sie in Ihrem Fall
chroot
denadeveloper
Benutzer in das/var/www/html/website_abc
Verzeichnis.Sie können ein Chroot-Verzeichnis für Ihren Benutzer festlegen, um diese
/var/www/html/website_abc
wie folgt auf das Unterverzeichnis zu beschränken/etc/ssh/sshd_config
.Dieses Zeug benötigt einen OpenSh-Server nach 4.8 ?, daher wird wahrscheinlich CentOS 6.2 benötigt
(nicht getestet, siehe
man sshd_config
zur Bestätigung der Syntax)und dann diese Benutzer zur sftp-Gruppe hinzufügen;
In Bezug auf gemeinsam genutzte Schlüssel
Sie sollten ein zusätzliches Schlüsselpaar für die Benutzer des Entwicklers erstellen und dieses an Ihren Berater senden. (oder lassen Sie sie alternativ ihren öffentlichen Schlüssel senden und ihn der authorized_keys-Datei für hinzufügen.
adeveloper
)gib niemals deinen privaten Schlüssel auf, deswegen heißt er privat ;-)
traditionelle FTP-Alternativen
vsftp / proftp usw. unterstützen auch chroot-Konfigurationen, aber heutzutage sind ssh-basierte Konfigurationen der normale Weg und die Unterstützung von ftp ist nur historisch.
Hier gibt es ein paar Links zu Tutorials.
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-the-home-directories/229
http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny
quelle