it-swarm.com.de

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

Mögliches Duplikat:
Linux-Verzeichnisberechtigungen

Ich arbeite mit einigen Entwicklern von Drittanbietern zusammen und möchte SFTP (oder FTP) Zugriff auf den Stammordner für eine Website gewähren, an der sie arbeiten, d. H. '/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 einzigen EC2-Instanz arbeite, sind die Websites wie folgt strukturiert:

/ 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 Entwickler von Drittanbietern - ist dies ratsam?
    • 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 zugreift, was ich bereits mit WinSCP tun kann.

Erläuterungen:

  • Ich würde 'adeveloper' brauchen, um Sachen auf /var/www/html/website_abc Hochladen zu können, was eine 'Schreib'-Erlaubnis ist
  • Ich würde 'adeveloper' benötigen, um keine 'Schreib'-Berechtigung für Dateien/Verzeichnisse unter /var/www/html/ Und im Idealfall nicht einmal' Leseberechtigung 'zu haben
  • 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 generiere einen privaten Schlüssel und gebe ihn an die Drittentwickler). Ich habe auch gelernt, dass ich niemals die private Schlüsseldatei geben sollte, die AWS mir gegeben hat. Ich lerne immer noch über Chroot.

19
ericn

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 Remote-CentOS-Box.

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

z.B. Ich kann auf viele Dinge zugreifen, die Sie idealerweise von einem unbekannten Benutzer einschränken möchten, dem Sie lokalen Zugriff gewähren möchten.

Hier sehe ich alle lokalen Benutzer, die in der Datei /etc/passwd Konfiguriert sind.

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

Unix-Systeme bieten den Befehl chroot, mit dem Sie den / Des Benutzers auf ein Verzeichnis in der Dateisystemhierarchie zurücksetzen können, in dem sie nicht auf "übergeordnete" Dateien und Verzeichnisse zugreifen können.

In Ihrem Fall ist es jedoch angebracht, eine virtuelle Chroot bereitzustellen, die vom Remote-Shell-Dienst implementiert wird. sftp kann einfach konfiguriert werden, um einen lokalen Benutzer mithilfe einer Konfiguration in der Datei auf eine bestimmte Teilmenge des Dateisystems zu beschränken

daher möchten Sie in Ihrem Fall den Benutzer chrootadeveloper in das Verzeichnis /var/www/html/website_abc verschieben.

Sie können ein Chroot-Verzeichnis für Ihren Benutzer festlegen, um sie wie in /var/www/html/website_abc Auf das Unterverzeichnis /etc/ssh/sshd_config Zu beschränken.

Für dieses Zeug ist openssh-server später als 4.8? Erforderlich, daher ist wahrscheinlich CentOS 6.2 erforderlich

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

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

und fügen Sie diese Benutzer dann der SFTP-Gruppe hinzu.

 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 Entwicklerbenutzer erstellen und dieses an Ihren Berater senden. (oder lassen Sie sie alternativ Ihren öffentlichen Schlüssel senden und ihn zur Datei "authorized_keys" für adeveloper hinzufügen.)

gib niemals deinen privaten Schlüssel auf, deshalb 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 für FTP ist nur historisch.

hier finden Sie einige Links zu Tutorials.
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny

11
Tom H