Como adicionar usuário com acesso SFTP / FTP à pasta '/ var / www / html / website_abc' no Amazon EC2 Centos?

19

Estou trabalhando com alguns desenvolvedores de terceiros e gostaria de conceder acesso SFTP (ou FTP) à pasta raiz de um site no qual eles estão trabalhando, por exemplo, '/var/www/html/website_abc' , para que pudessem fazer o upload dos arquivos. Observe que estou hospedando meus outros sites na mesma instância do EC2, por exemplo, '/var/www/html/website_xyz' .

Para enfatizar que estou trabalhando com vários sites em uma única instância do EC2, a estrutura dos sites é a seguinte:

/var/www/html/
/var/www/html/website_abc
...
/var/www/html/website_xyz

Meus objetivos são os seguintes:

  • O usuário 'adeveloper' tem acesso a '/ var / www / html / website_abc' e apenas '/ var / www / html / website_abc'
    • Suponho que o usuário 'adeveloper' usará 'adeveloper @ [my elastic IP]' como nome de usuário para fazer login no SFTP (ou FTP), estou certo?
  • O usuário 'adeveloper' não tem acesso a '/ var / www / html /' nem a nenhum outro diretório na minha instância do EC2
  • Como sobre o arquivo de chave privada?
    • Eu passo meu arquivo de chave privada para os desenvolvedores de terceiros - é aconselhável fazê-lo?
    • Existe uma maneira de gerar um arquivo de chave privada diferente para eles ou permitir que eles efetuem login com nome de usuário & senha em vez disso?

Eu fiz pesquisas, mas a maioria das pessoas estava falando sobre como acessar o EC2 via SFTP, e eu já posso usar o WinSCP.

Esclarecimentos:

  • Eu precisaria de "adeveloper" para poder fazer upload de materiais para /var/www/html/website_abc , que é permissão de "gravação"
  • Eu precisaria de 'adeveloper' para não ter permissão de 'gravação' para nenhum arquivo / diretório em /var/www/html/ e, idealmente, nem mesmo 'ler' permissão
  • No entanto, parece haver um grande problema aqui:
    • /var/www/html/ já tem permissão 777, já que esta é minha pasta DocumentRoot. Então, como faço para impedir que 'adeveloper' acesse meu outro site?

Parcialmente resolvido Eu consegui alcançar meus objetivos usando o OpenSSH (eu crio a pasta .ssh dentro de / var / www / html / website_abc / e gero a chave privada e dou para os desenvolvedores de terceiros). Também aprendi que nunca deveria dar o arquivo de chave privada que a AWS me deu. Ainda aprendendo sobre o chroot.

    
por ericn 25.05.2012 / 13:10

1 resposta

11

Por padrão, os serviços que fornecem um shell remoto, como ssh ou telnet, ou uma sessão remota interativa para comandos como sftp, permitem que um usuário local mude para qualquer diretório para o qual tenham permissões e recuperem uma cópia de qualquer arquivo que possuam. acesso a.

Como uma configuração geral de segurança, isso é lamentável, pois há muitos arquivos e diretórios que podem ser lidos pela necessidade. Por exemplo, aqui sou eu um usuário não-root em alguma caixa remota do CentOS;

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...

por exemplo. Eu posso acessar muitas coisas, que idealmente você gostaria de restringir de algum usuário desconhecido que você deseja fornecer acesso local.

Aqui estou eu olhando todos os usuários locais configurados no arquivo /etc/passwd ;

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

Sistemas Unix fornecem o comando chroot , que permite redefinir o / do usuário para algum diretório na hierarquia do sistema de arquivos, onde eles não podem acessar arquivos e diretórios "superiores".

No entanto, no seu caso, seria apropriado fornecer um chroot virtual implementado pelo serviço de shell remoto. O sftp pode ser facilmente configurado para restringir um usuário local a um subconjunto específico do sistema de arquivos usando uma configuração no

no seu caso, você deseja chroot o adeveloper user no diretório /var/www/html/website_abc .

Você pode definir um diretório chroot para o usuário confiná-los ao subdiretório /var/www/html/website_abc , assim como em /etc/ssh/sshd_config ;

Este material requer o openssh-server posterior a 4.8 ?, então provavelmente requer o CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(não testado, veja man sshd_config para confirmar a sintaxe)

e adicione esses usuários ao grupo sftp;

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper

Em relação às chaves compartilhadas

você deve criar um par de chaves adicional para os usuários do adeveloper e enviá-lo ao seu consultor. (ou alternativamente, mande-os enviar sua chave pública e adicioná-la ao arquivo authorized_keys para adeveloper )

nunca desiste da sua chave privada, é por isso que ela é chamada privada; -)

alternativas tradicionais de FTP

vsftp / proftp etc também suportam configurações chroot, mas neste moderno dia ssh configurações são o caminho normal, e suporte para ftp é apenas histórico.

existem alguns links para tutoriais aqui; link

link

    
por 25.05.2012 / 13:24