SFTP-Server-Setup – Administratorbenutzer

SFTP-Server-Setup – Administratorbenutzer

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 -

  1. Benutzer sollten in der Lage sein, per SSH auf ihre eigenen Verzeichnisse zuzugreifen und Dateien zu verwalten
  2. Benutzer sollten NICHT auf Dateien zugreifen können, die ihnen nicht gehören. Beispielsweise kann Benutzer1 nicht auf die Dateien von Benutzer2 zugreifen.
  3. 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:groupKombination 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, --shelldass /bin/falseSHELL-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_confighabe 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.

verwandte Informationen