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

19

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
  • Et le 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 peux déjà utiliser WinSCP.

Précisions:

  • J'aurais besoin d'un «développeur» pour pouvoir télécharger des trucs sur /var/www/html/website_abclesquels est la permission «d'écriture»
  • J'aurais besoin que «un développeur» n'ait pas la permission «d'écriture» pour tous les fichiers / répertoires sous /var/www/html/, et idéalement même pas la permission «lecture»
  • 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?

En partie 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.

Ericn
la source
1
Je suis désolé @lain mais tu dois m'avoir mal compris. Je suppose que vous pourriez passer du temps à faire autre chose de plus significatif que de donner un faux jugement comme celui-ci. Peut-être que si vous lisez attentivement ma question, vous auriez vraiment plus à voir avec SSH / SFTP qu'avec les autorisations de fichiers / dossiers Linux ou plutôt c'était une confusion entre les deux (pourquoi étais-je confus? Je ne sais pas, c'est pourquoi J'avais besoin d'aide). Ce n'est pas un doublon exact de l'autre fil comme vous l'avez jugé. Quoi qu'il en soit, j'ai réussi à atteindre mes objectifs en utilisant OpenSSH. J'apprends toujours sur chroot comme suggéré par Tom H et certains résultats de recherche. Merci
Eric
"J'ai aussi appris que je ne devrais jamais donner le fichier de clé privée qu'AWS m'a donné" Pourquoi .....
Michael Bailey

Réponses:

11

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 dans le monde entier. 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/passwdfichier;

$ 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 chrootcommande qui vous permet de réinitialiser l' /utilisateur dans 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

par conséquent, dans votre cas, vous souhaitez que chrootl' adeveloperutilisateur dans le /var/www/html/website_abcré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_abccomme dans /etc/ssh/sshd_config;

Ce truc nécessite un serveur openssh après 4.8?, Donc nécessite probablement CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(non testé, voir man sshd_configpour 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)

ne renoncez 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

Tom H
la source
Je n'ai pas été en mesure de comprendre chroot jusqu'à présent, mais je suis toujours dans l'apprentissage et je n'ai pas encore abandonné. J'ai réussi à atteindre mes objectifs énoncés ci-dessus en utilisant OpenSSH. Merci encore
Eric