Em uma caixa AWS EC2 Linux, estou criando um servidor SFTP com estrutura de pastas usando o script abaixo -
/data (owner - root:root)
└── /sftp (owner - root:root)
├── /user1 (owner - user1:sftp_users)
└── /user2 (owner - user2:sftp_users)
Meus requisitos são -
- Os usuários devem ser capazes de fazer ssh em seus próprios diretórios e gerenciar arquivos
- Os usuários NÃO devem poder acessar arquivos que não lhes pertencem. Por exemplo, o usuário1 não pode acessar os arquivos do usuário2
- O usuário administrador deve ser capaz de fazer ssh na máquina e gerenciar arquivos para todos os usuários.
Usando o script abaixo (que cria um grupo sftp_users e modifica as permissões das pastas do usuário para 701), consigo configurar o servidor sftp de forma que os requisitos 1 e 2 sejam atendidos. Não sou um especialista em Unix e estou tentando satisfazer o terceiro requisito. Qualquer exemplo ou orientação ajudaria.
Desde já, obrigado.
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
Responder1
A configuração que tenho é definir meu usuário administrador como membro de cada um dos grupos de membros do SFTP. Para cada usuário SFTP, crie uma user:group
combinação exclusiva para esse usuário e conceda a propriedade do diretório de cada usuário ao usuário/grupo SFTP correspondente. Seu usuário administrador deve ser capaz de acessar/visualizar tudo, já que estão incluídos cada um dos grupos de usuários do SFTP, e cada usuário só poderá visualizar seu próprio diretório inicial. Por último, certifique-se de definir cada usuário SFTP --shell
como /bin/false
para evitar o acesso SHELL.
Tenho minha autenticação configurada por meio de chaves SSH. Adicione a chave pública de cada usuário aoauthorized_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
No meu /etc/ssh/sshd_config
, tenho a seguinte configuração:
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 usuário SFTP deve ter seu diretório inicial definido como seu respectivo arquivo /var/sftp/HOME
. A única desvantagem desta configuração é que um usuário só pode estar associado a 32 grupos. Se você tiver mais de 32 usuários SFTP, talvez seja necessário encontrar outro método para seu administrador.
Como se trata de dados do usuário, recomendo usar um volume EBS criptografado montado em /var/sftp
. Se a instância falhar, você ainda terá seus dados, mas lembre-se também de que os volumes do EBS são específicos da zona de disponibilidade.