Quero criar um usuário do SFTP na minha instância do Amazon Lightsail.
Resolução
Observação: as etapas a seguir criam um usuário do SFTP com acesso a um ambiente chroot (chroot jail) sem acesso SSH. O usuário do SFTP não pode acessar os diretórios fora do ambiente ou diretório chroot. Para esse usuário, o diretório chroot é o diretório raiz.
Configurar seu grupo e usuário do SFTP
-
Crie um grupo para os usuários do SFTP com o seguinte comando:
sudo groupadd sftp_group
Observação: substitua sftp_group pelo nome do seu grupo.
-
Crie um usuário na instância com um diretório inicial sem acesso ao shell de login do SSH. Para fazer isso, execute o comando a seguir:
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
Observação: substitua sftp_user pelo seu nome de usuário.
Configure a autenticação do usuário com autenticação por senha ou autenticação baseada em chave SSH
Autenticação de senha
Use o seguinte comando para criar uma senha:
sudo passwd sftp_user
Autenticação baseada em chave SSH
-
Para exigir autenticação baseada em chave SSH, crie uma pasta .ssh no diretório inicial do usuário. Em seguida, crie um arquivo authorized_keys:
sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys
-
Adicione a chave pública SSH que você deseja usar ao arquivo /home/sftp_user/.ssh/authorized_keys. Para obter mais informações, consulte Set up SSH keys for Lightsail.
-
Para alterar a propriedade e as permissões do diretório inicial do usuário, execute os seguintes comandos:
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -Rsudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys
Observação: o exemplo anterior usa a permissão 755 no diretório /home/sftp_user e, em seguida, altera a propriedade para o usuário-raiz. Esse diretório de usuário é usado como um diretório chroot.
Edite o arquivo /etc/ssh/sshd_config
-
Na linha Subsystem sftp, comente a linha Subsystem sftp /usr/libexec/openssh/sftp-server:
# Subsystem sftp /usr/libexec/openssh/sftp-server
-
Substitua a linha anterior pelo texto a seguir:
Subsystem sftp internal-sftp
-
Para limitar o acesso do usuário do SFTP, adicione o seguinte texto no final do arquivo:
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
No exemplo anterior, o ChrootDirectory especifica o diretório raiz para os usuários do SFTP. MatchGroup identifica os usuários no sftp_group que usam o caminho /home/%u como diretório raiz. Os caracteres %u representam o usuário. ForceCommand internal-sftp força o uso de um servidor SFTP em processo.
-
Se você usar a autenticação por senha, defina PasswordAuthentication no arquivo /etc/ssh/sshd_config como yes.
Criar os diretórios chroot para o usuário
- Para criar um diretório chroot, execute o seguinte:
sudo mkdir /home/sftp_user/uploads
Observação: substitua o nome do diretório, sftp_user e uploads pelo nome do seu diretório.
- Modificar a propriedade dos arquivos:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
Observação: substitua o nome do diretório, sftp_user e uploads pelo nome do seu diretório.
Verifique suas alterações e reinicie o serviço SSHD
-
Verifique se as permissões do diretório são semelhantes ao exemplo a seguir:
ls -ld /homedrwxr-xr-x 3 root root 23 Oct 6 15:17 /home
ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct 6 15:17 /home/sftp_user
ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct 6 15:17 /home/sftp_user/uploads/
-
Reinicie o serviço SSHD:
sudo systemctl restart sshd
Conectar-se à instância com o SFTP
Autenticação de senha
Execute o seguinte:
# sftp sftp_user@example.com's password:
Autenticação baseada em chave SSH
Execute o seguinte:
# sftp -i key.pem sftp_user@example.com