Você mencionou (e possivelmente confundiu) algumas coisas diferentes - então seu objetivo não está claro, infelizmente.
- SFTP - não existe SFTP passivo - o protocolo SFTP é completamente diferente do FTP e é tratado por / usr / libexec / openssh / sftp-server (definido em / etc / ssh / sshd_config) não vsFTPd
- Os arquivos .htaccess do Apache não têm nada a ver com o FTP - eles definem regras sobre como o servidor da Web fornecerá conteúdo (por exemplo, para um visitante do seu site).
- Você está tentando usar o FTP para SFTP?
- Você está tentando veicular websites de / home / admin, / home / ec2-user, etc? No Linux da Amazon, a raiz da Web padrão do Apache é / var / www / html. Normalmente, você adicionará seu conteúdo lá ou precisará alterar o DocumentRoot no httpd.conf.
O vsFTPd pode ser configurado para usar usuários locais. Para fazer isso:
- defina local_enable = YES e chroot_local_user = YES (vsftpd.conf)
- crie seu usuário do sistema (useradd) (com / sbin / nologin como o shell) - o usuário ficará restrito ao seu diretório inicial (a diretiva chroot acima)
- define a senha (passwd)
- Reinicie o vsftpd para que as alterações de configuração entrem em vigor
- Login via FTP (não SFTP)
Para SFTP (não usando vsftpd!):
- Anexe / usr / libexec / openssh / sftp-server a / etc / shells
- Crie um novo usuário com o shell / usr / libexec / openssh / sftp-server
- Defina a senha do seu novo usuário
- Faça login via SFTP. Você não estará restrito ao seu diretório pessoal aqui, mas não poderá gravar em locais onde seu usuário não tenha permissões
Agora, para o problema de permissões que você está enfrentando:
- Em primeiro lugar, NÃO vá e altere as permissões ou a propriedade dos arquivos apenas porque você não pode gravar em um diretório. A maioria dos diretórios é de propriedade do root e somente gravável pelo proprietário.
- Para um servidor da Web, mantenha suas permissões restritivas - 644 (rw-r - r--) ou menos - (grupo e outro não devem precisar de permissões de gravação; e ninguém deve precisar de permissões de execução na maioria dos casos)
- Defina a propriedade do seu arquivo para o mesmo que o usuário do seu servidor da Web está executando, como se você estivesse usando arquivos dinâmicos (por exemplo, PHP).
Suas opções, portanto, são:
- Sirva arquivos do diretório pessoal do usuário (em vez de / var / www / html) - mantenha seu usuário chrooted e defina o DocumentRoot em httpd.conf para apontar para o caminho correto. Essa é uma boa abordagem (segura), mas a mudança típica feita é configurar o diretório pessoal do usuário para um caminho em / var / www / html (por exemplo, para várias pessoas com seus próprios sites, / var / www / html / USERNAME - com o DocumentRoot definido de acordo)
- Conceda ao seu usuário do Apache acesso FTP / SFTP - parece razoável, mas o uso especial de FTP é inseguro.
- Use o SCP e mude o usuário para root (sudo) - ele tem seus usos, mas não para salvar arquivos em um diretório do servidor da web - todos os arquivos criados são de propriedade do root
Minha recomendação seria SFTP com um certificado e seus diretórios pessoais em / var / www / html
Os comandos específicos para adicionar um usuário SFTP no Linux da Amazon:
Aviso de isenção de responsabilidade: é muito mais seguro usar certificados do que senhas - e você deve manter a PasswordAuthentication desabilitada.
#Add the shell
echo /usr/libexec/openssh/sftp-server >> /etc/shells
#Create a user with the shell, I have not setup a home folder
useradd -M -s /usr/libexec/openssh/sftp-server USERNAME
#Set the password
passwd USERNAME
Edit /etc/ssh/sshd_config:
Change: PasswordAuthentication no to PasswordAuthentication yes (line 69), save and quit
#Restart SSH
service sshd restart
Para restringir seu usuário a um diretório (isto é, chroot):
Como o sftp-server não estará em seu caminho chroot, precisamos alterá-lo: Alterar (em sshd_config):
Subsystem sftp /usr/libexec/openssh/sftp-server
Para:
Subsystem sftp internal-sftp
Adicione o seguinte ao final do seu sshd_config (substitua o caminho por, por exemplo, / var / www):
Match User USERNAME
ChrootDirectory /path/to/restrict/to
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
Match
Reinicie o SSH:
service sshd restart