EC2 Login do FileZilla OK, mas sem acesso de gravação ou exclusão

4

Eu sou um noob total do Apache, e depois de muito puxar o cabelo e ranger de dentes, finalmente consegui acesso SFTP à nova instância do EC2 no modo passivo. Pode fazer login apenas como "ec2-user", ou "root" sem senha, mas não com myusername e / ou password ... Eu criei um arquivo .htaccess em / home / admin, / home / ec2-user, e diretórios / home / myusername ... Eu modifiquei /etc/httpd/conf/httpd.conf, /etc/vsftpd/vsftpd.conf, bem como alterei as configurações do grupo de segurança da AWS e as portas / protocolos de acordo com esses ajustes, e criou o arquivo .ssh / authorized_keys para cada um dos diretórios de usuários acima. Eu não posso arrastar / soltar da máquina local para a instância EC2 via cliente FTP (Filezilla), então, aparentemente, enquanto eu posso fazer o login como usuário ec2, eu não tenho permissões de gravação. Suspeito que preciso chown ... alguma coisa?

Estou usando a configuração vsftpd recomendada aqui

Alguma idéia sobre o que eu preciso mudar a fim de 1) login via Filezilla como "myusername" em vez de "ec2-user" ou "root"?

PS: Eu tenho a maioria das ferramentas de linha de comando da AWS pertinentes instaladas e funcionais ...

    
por Sean 25.12.2011 / 20:24

1 resposta

7

Você mencionou (e possivelmente confundiu) algumas coisas diferentes - então seu objetivo não está claro, infelizmente.

  1. 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
  2. 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).
  3. Você está tentando usar o FTP para SFTP?
  4. 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
    
por 25.12.2011 / 23:07