Wie füge ich einen Benutzer mit SFTP / FTP-Zugriff zum Ordner '/ var / www / html / website_abc' in Amazon EC2 Centos hinzu?

19

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_abcdie 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.

Ericn
quelle
1
Es tut mir leid @lain, aber Sie müssen mich falsch verstanden haben. Ich denke, Sie könnten Zeit damit verbringen, etwas anderes zu tun, was bedeutungsvoller ist, als ein falsches Urteil wie dieses abzugeben. Wenn Sie meine Frage sorgfältig lesen, haben Sie vielleicht wirklich mehr mit SSH / SFTP zu tun als mit Linux-Datei- / Ordnerberechtigungen Ich brauchte Hilfe. Dies ist kein genaues Duplikat des anderen Threads, wie Sie es für möglich hielten. Wie auch immer, ich habe es geschafft, meine Ziele mit OpenSSH zu erreichen. Ich lerne immer noch etwas über Chroot, wie von Tom H und einigen Suchergebnissen vorgeschlagen. Danke
ericn
"Ich habe auch erfahren, dass ich niemals die private Schlüsseldatei geben sollte, die AWS mir gegeben hat" Warum .....
Michael Bailey

Antworten:

11

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.

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...

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/passwdDatei konfigurierten lokalen Benutzer an .

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

Unix-Systeme bieten den chrootBefehl, 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 chrootden adeveloperBenutzer in das /var/www/html/website_abcVerzeichnis.

Sie können ein Chroot-Verzeichnis für Ihren Benutzer festlegen, um diese /var/www/html/website_abcwie 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

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(nicht getestet, siehe man sshd_configzur Bestätigung der Syntax)

und dann diese Benutzer zur sftp-Gruppe hinzufügen;

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper

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

Tom H
quelle
Chroot konnte ich bisher noch nicht herausfinden, aber ich lerne immer noch und habe noch nicht aufgegeben. Ich habe es jedoch geschafft, meine oben genannten Ziele mit OpenSSH zu erreichen.
Nochmals vielen