Configuración del servidor SFTP: usuarios administradores

Configuración del servidor SFTP: usuarios administradores

En una caja AWS EC2 Linux, estoy creando un servidor SFTP con estructura de carpetas usando el siguiente script:

/data                 (owner - root:root)
    └── /sftp         (owner - root:root)
        ├── /user1    (owner - user1:sftp_users)
        └── /user2    (owner - user2:sftp_users)

Mis requisitos son -

  1. Los usuarios deberían poder acceder a sus propios directorios y administrar archivos.
  2. Los usuarios NO deberían poder acceder a archivos que no les pertenecen. Por ejemplo, el usuario1 no puede acceder a los archivos del usuario2.
  3. El usuario administrador debería poder ingresar a la máquina mediante ssh y administrar archivos para todos los usuarios.

Usando el siguiente script (que crea un grupo sftp_users y modifica los permisos de las carpetas de usuario a 701), puedo configurar el servidor sftp de manera que se cumplan los requisitos 1 y 2. No soy un experto en Unix y trato de satisfacer el tercer requisito. Cualquier ejemplo o dirección ayudaría.

Gracias de antemano.

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

Respuesta1

La configuración que tengo es configurar a mi usuario administrador como miembro de cada uno de mis grupos de miembros SFTP. Para cada usuario SFTP, cree un user:groupcombo único para ese usuario y otorgue la propiedad del directorio de cada usuario al usuario/grupo SFTP correspondiente. Su usuario administrador debería poder acceder/ver todo, ya que está incluido en cada uno de los grupos de usuarios SFTP, y cada usuario solo podrá ver su propio directorio de inicio. Por último, asegúrese de configurar cada usuario SFTP --shellpara /bin/falseevitar el acceso a SHELL.

Tengo mi autenticación configurada mediante claves SSH. Agregue la clave pública de cada usuario alauthorized_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

En mi /etc/ssh/sshd_config, tengo la siguiente configuración:


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

Cada usuario de SFTP debe tener su directorio de inicio configurado en su respectivo archivo /var/sftp/HOME. La única desventaja de esta configuración es que un usuario sólo puede estar asociado a 32 grupos. Si tiene más de 32 usuarios SFTP, es posible que necesite buscar otro método para su administrador.

Dado que se trata de datos de usuario, recomiendo utilizar un volumen EBS cifrado montado en /var/sftp. Si la instancia falla, aún tendrá sus datos, pero recuerde también que los volúmenes de EBS son específicos de la zona de disponibilidad.

información relacionada