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 -
- Los usuarios deberían poder acceder a sus propios directorios y administrar archivos.
- 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.
- 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:group
combo ú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 --shell
para /bin/false
evitar 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.