Auf einer AWS EC2 Linux-Box erstelle ich einen SFTP-Server mit Ordnerstruktur mithilfe des folgenden Skripts -
/data (owner - root:root)
└── /sftp (owner - root:root)
├── /user1 (owner - user1:sftp_users)
└── /user2 (owner - user2:sftp_users)
Meine Anforderungen sind -
- Benutzer sollten in der Lage sein, per SSH auf ihre eigenen Verzeichnisse zuzugreifen und Dateien zu verwalten
- Benutzer sollten NICHT auf Dateien zugreifen können, die ihnen nicht gehören. Beispielsweise kann Benutzer1 nicht auf die Dateien von Benutzer2 zugreifen.
- Der Administratorbenutzer sollte sich per SSH auf den Computer anmelden und die Dateien für alle Benutzer verwalten können.
Mithilfe des folgenden Skripts (das eine sftp_users-Gruppe erstellt und die Berechtigungen der Benutzerordner auf 701 ändert) kann ich den SFTP-Server so einrichten, dass die Anforderungen 1 und 2 erfüllt sind. Ich bin kein Unix-Experte und versuche, die 3. Anforderung zu erfüllen. Alle Beispiele oder Anweisungen wären hilfreich.
Dank im Voraus.
echo "`date` Creating SFTP directory...."
mkdir -p /data/sftp
echo "`date` updating sshd_config"
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
echo 'Match Group sftp_users' >> /etc/ssh/sshd_config
echo 'ChrootDirectory /data/sftp' >> /etc/ssh/sshd_config
echo 'ForceCommand internal-sftp' >> /etc/ssh/sshd_config
echo "`date` Set permissions to 701 for all folders on the efs mount"
chmod -R 701 /data
echo "`date` Set owner to root:root for all folders on the efs mount"
chown -R root:root /data
echo "`date` adding sft_users group"
groupadd sftp_users
echo "`date` restarting sshd"
systemctl restart sshd
###### Below is my user creation script that I eventually use to create individual SFTP users ######
echo "`date` creating /usr/local/bin/create_sftp_user.sh"
echo -e '#!/bin/bash\n\nUSER_NAME=$1\nuseradd -g sftp_users -d /$USER_NAME -s /sbin/nologin $USER_NAME\n' > /usr/local/sbin/create_sftp_user.sh
echo -e 'passwd $USER_NAME\nmkdir -p /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
echo -e 'chown $USER_NAME:sftp_users /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
echo -e 'chmod 700 /data/sftp/$USER_NAME\n' >> /usr/local/sbin/create_sftp_user.sh
chmod +x /usr/local/sbin/create_sftp_user.sh
Antwort1
Bei meinem Setup wird mein Administratorbenutzer als Mitglied in jeder meiner SFTP-Mitgliedergruppen festgelegt. Erstellen Sie für jeden SFTP-Benutzer eine eindeutige user:group
Kombination für diesen Benutzer und geben Sie den Verzeichnisbesitz jedes Benutzers dem entsprechenden SFTP-Benutzer/der entsprechenden SFTP-Gruppe. Ihr Administratorbenutzer sollte auf alles zugreifen/alles anzeigen können, da er in jeder der SFTP-Benutzergruppen enthalten ist und jeder Benutzer nur sein eigenes Home-Verzeichnis anzeigen kann. Stellen Sie abschließend sicher, dass jeder SFTP-Benutzer so eingestellt ist, --shell
dass /bin/false
SHELL-Zugriff verhindert wird.
Ich habe meine Authentifizierung über SSH-Schlüssel eingerichtet. Fügen Sie den öffentlichen Schlüssel jedes Benutzers zumauthorized_keys
/var/sftp (admin:admin 0700)
|
|-/.ssh (admin:admin 0700)
| -/authroized_keys
|
|-/user1 (admin:admin 0755)
| |
| |-/uploads (user1:user1 0770)
| |-/.ssh
| -/authorized_keys
|
|-/user2 (admin:admin 0755)
|
|-/uploads (user2:user2 0770)
|-/.ssh
-/authorized_keys
In meinem /etc/ssh/sshd_config
habe ich das folgende Setup:
Match User ADMIN_USERNAME
ChrootDirectory /var/sftp
AuthenticationMethods publickey
AuthroizedKeysFile /var/sftp/.ssh/authorized_keys
ForceCommand internal-sftp
OPTIONS...
Match Group SFTP_USER
ChrootDirectory /var/sftp/%u
AuthenticationMethods publickey
AuthorizedKeysFile /var/sftp/%u/.ssh/authorized_keys
ForceCommand internal-sftp
OPTIONS...
Jeder SFTP-Benutzer sollte sein jeweiliges Home-Verzeichnis haben /var/sftp/HOME
. Der einzige Nachteil dieser Konfiguration besteht darin, dass ein Benutzer nur 32 Gruppen zugeordnet werden kann. Wenn Sie mehr als 32 SFTP-Benutzer haben, müssen Sie möglicherweise eine andere Methode für Ihren Administrator finden.
Da es sich um Benutzerdaten handelt, empfehle ich die Verwendung eines verschlüsselten EBS-Volumes, das an gemountet ist /var/sftp
. Wenn die Instanz ausfällt, haben Sie immer noch Ihre Daten, aber denken Sie auch daran, dass EBS-Volumes verfügbarkeitszonenspezifisch sind.