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

19

Possíveis permissões de diretório duplicado:
Linux

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

Apenas 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' use 'adeveloper @ [meu IP elástico]' 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 /' ou a outros diretórios na minha instância do EC2
  • E o arquivo de chave privada?
    • Eu passo meu arquivo de chave privada para desenvolvedores de terceiros - é aconselhável fazer isso?
    • Existe uma maneira de gerar um arquivo de chave privada diferente para eles ou permitir que eles façam login com nome de usuário e senha?

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

Esclarecimentos:

  • Eu precisaria de 'adeveloper' para poder fazer upload de itens para os /var/www/html/website_abcquais a permissão 'write'
  • Eu precisaria do 'adeveloper' para não ter permissão de 'gravação' para todos os arquivos / diretórios abaixo /var/www/html/e, idealmente, nem mesmo a permissão de 'leitura'
  • No entanto, parece haver um grande problema aqui:
    • /var/www/html/já tem permissão 777, pois esta é minha pasta DocumentRoot. Então, como faço para parar o 'adeveloper' de acessar meu outro site?

Em parte resolvido , consegui alcançar meus objetivos usando o OpenSSH (eu crio a pasta .ssh em / var / www / html / website_abc / e giro a chave privada e a dou a desenvolvedores de terceiros). Também aprendi que nunca deveria fornecer o arquivo de chave privada que a AWS me deu. Ainda aprendendo sobre chroot.

ericn
fonte
1
Sinto muito @lain, mas você deve ter me entendido mal. Eu acho que você poderia gastar tempo fazendo algo mais significativo do que dar um julgamento falso como esse. Talvez se você ler minha pergunta com atenção, você realmente tem mais a ver com SSH / SFTP do que com as permissões de arquivo / pasta do Linux ou, pelo contrário, foi uma confusão entre elas (por que eu estava confuso? Não sei, é por isso Eu precisava de ajuda). Esta não é uma duplicata exata do outro segmento, como você considerou. Enfim, consegui alcançar meus objetivos usando o OpenSSH. Ainda estou aprendendo sobre chroot, como sugerido por Tom H e alguns resultados de pesquisa. Graças
ericn
"Eu também aprendi que eu nunca deve dar as AWS arquivo de chave privada deu-me" Por .....
Michael Bailey

Respostas:

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 ao qual tenha permissão e recupere uma cópia de qualquer arquivo ao qual tenha acesso.

Como uma configuração geral de segurança, isso é lamentável, pois existem muitos arquivos e diretórios que são legíveis mundialmente por 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ê deseja restringir de algum usuário desconhecido ao qual deseja fornecer acesso local.

Aqui está eu, olhando todos os usuários locais configurados no /etc/passwdarquivo;

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

Os sistemas Unix fornecem o chrootcomando que permite redefinir o /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

portanto, no seu caso, você deseja que chrooto adeveloperusuário entre no /var/www/html/website_abcdiretório

Você pode definir um diretório chroot para o seu usuário confiná-lo ao subdiretório da seguinte /var/www/html/website_abcmaneira /etc/ssh/sshd_config;

Esse material requer o openssh-server posterior a 4,8?; Portanto, provavelmente requer o CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(não testado, consulte man sshd_configpara 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 desenvolvedor e enviá-lo ao seu consultor. (ou, alternativamente, peça que eles enviem sua chave pública e a adicionem ao arquivo allowed_keys para adeveloper)

nunca desista da sua chave privada, é por isso que é chamada de privada ;-)

alternativas tradicionais de ftp

O vsftp / proftp etc também suporta configurações chroot, mas atualmente as configurações baseadas em ssh são a maneira normal, e o suporte para ftp é apenas histórico.

existem alguns links para tutoriais aqui;
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny

Tom H
fonte
Ainda não consegui descobrir o chroot, mas ainda estou aprendendo e ainda não desisti. Eu consegui alcançar meus objetivos declarados acima usando o OpenSSH. Obrigado novamente
ericn