web-dev-qa-db-fra.com

Comment ajouter un utilisateur avec un accès SFTP / FTP au dossier '/ var / www / html / website_abc' sur Amazon EC2 Centos?

Duplicata possible:
autorisations de répertoire Linux

Je travaille avec des développeurs tiers et je voudrais autoriser SFTP (ou FTP) à accéder au dossier racine d'un site Web sur lequel ils travaillent, c'est-à-dire '/var/www/html/website_abc' afin qu'ils puissent y télécharger les fichiers. Notez que j'héberge mes autres sites Web sur la même instance EC2, par exemple '/var/www/html/website_xyz'.

Pour souligner que je travaille avec plusieurs sites Web sur une seule instance EC2, la structure des sites Web est la suivante:

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

Mes objectifs sont les suivants:

  • L'utilisateur 'adeveloper' a accès à '/ var/www/html/website_abc' et uniquement à '/var/www/html/website_abc'
    • Je suppose que l'utilisateur "adeveloper" utilisera "adeveloper @ [mon élastique IP]" comme nom d'utilisateur pour se connecter à SFTP (ou FTP), ai-je raison?
  • L'utilisateur "adeveloper" n'a pas accès à "/ var/www/html /" ni à aucun autre répertoire de mon instance EC2
  • Qu'en est-il du fichier de clé privée?
    • Dois-je transmettre mon fichier de clé privée aux développeurs tiers - est-il conseillé de le faire?
    • Existe-t-il un moyen de générer un fichier de clé privée différent pour eux ou de leur permettre de se connecter avec un nom d'utilisateur et un mot de passe à la place?

J'ai fait des recherches mais la plupart des gens parlaient de la façon d'accéder à EC2 via SFTP que je suis déjà en mesure d'utiliser WinSCP.

Clarifications:

  • J'aurais besoin d'un "développeur" pour pouvoir télécharger des trucs sur /var/www/html/website_abc qui est l'autorisation d'écriture
  • J'aurais besoin que 'adeveloper' n'ait pas l'autorisation 'd'écriture' pour tous les fichiers/répertoires sous /var/www/html/, et idéalement même pas la permission de "lire"
  • Cependant, il semble y avoir un gros problème ici:
    • /var/www/html/ a déjà l'autorisation 777 car il s'agit de mon dossier DocumentRoot. Alors, comment puis-je empêcher "adeveloper" d'accéder à mon autre site Web?

Partiellement résolu J'ai réussi à atteindre mes objectifs en utilisant OpenSSH (je crée le dossier .ssh dans/var/www/html/website_abc/et génère une clé privée et la donne aux développeurs tiers). J'ai également appris que je ne devrais jamais donner le fichier de clé privée qu'AWS m'a donné. Toujours en train d'apprendre sur chroot.

19
ericn

Par défaut, les services qui fournissent un shell distant, comme ssh ou telnet, ou une session distante interactive pour des commandes comme sftp, permettent à un utilisateur local de se transformer en n'importe quel répertoire pour lequel il dispose d'autorisations et de récupérer une copie de tout fichier auquel il a accès.

En tant que configuration de sécurité générale, cela est regrettable car il existe de nombreux fichiers et répertoires qui sont nécessairement lisibles par tous. Par exemple, voici moi un utilisateur non root sur une boîte CentOS distante;

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

par exemple. Je peux accéder à beaucoup de choses, que vous voudriez idéalement restreindre à un utilisateur inconnu auquel vous souhaitez fournir un accès local.

Voici que je regarde tous les utilisateurs locaux configurés dans le /etc/passwd fichier;

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

Les systèmes Unix fournissent la commande chroot qui vous permet de réinitialiser le / de l'utilisateur vers un répertoire de la hiérarchie du système de fichiers, où il ne peut pas accéder aux fichiers et répertoires "supérieurs".

Cependant, dans votre cas, il serait approprié de fournir un chroot virtuel implémenté par le service Shell distant. sftp peut être facilement configuré pour restreindre un utilisateur local à un sous-ensemble spécifique du système de fichiers en utilisant une configuration dans le

donc dans votre cas, vous voulez chroot l'utilisateur adeveloper dans le /var/www/html/website_abc répertoire.

Vous pouvez définir un répertoire chroot pour votre utilisateur afin de les confiner dans le sous-répertoire /var/www/html/website_abc comme ça dans /etc/ssh/sshd_config;

Ce truc nécessite un serveur openssh plus tard que 4.8?, Donc nécessite probablement CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(non testé, voir man sshd_config pour confirmer la syntaxe)

puis ajoutez ces utilisateurs au groupe sftp;

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

Concernant les clés partagées

vous devez créer une paire de clés supplémentaire pour les utilisateurs du développeur et l'envoyer à votre consultant. (ou bien, demandez-leur d'envoyer votre clé publique et de l'ajouter au fichier authorized_keys pour adeveloper)

n'abandonnez jamais votre clé privée, c'est pourquoi elle est appelée privée; -)

alternatives ftp traditionnelles

vsftp/proftp, etc. prennent également en charge les configurations chroot, mais de nos jours, les configurations basées sur ssh sont la voie normale, et la prise en charge de ftp est historique uniquement.

il y a quelques liens vers des tutoriels ici;
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

11
Tom H