Gestion des autorisations d'annuaire Linux et SFTP

Bonjour; J'ai un serveur Web RHEL 5.7, Personnalisé pour la permission SSH / SFTP Seulement pour certains groupes. J'aimerais que les gestionnaires de contenu téléchargent du contenu sur leurs répertoires respectifs et que ce contenu hérite de la propriété de l'utilisateur. / Groupes sur le répertoire, quelle que soit la méthode de démarrage ou d'application. Par exemple:

John dans le groupe

"la toile"

Pour la droite SSH / SFTP et

"la finance"

Pour les autorisations de répertoire et les téléchargements dans le catalogue

"Matériel"

de l'autre côté SFTP.

Catalogue

"Matériel"

A des droits d'accès "2760" (rwxrws ---) et propriété de

"apache: la finance"

.

Si John télécharge une mise à jour dans un fichier existant dans

"Matériel"

, La propriété du fichier reste

"apache: la finance"

. Si John téléchargera un nouveau fichier dans

"Matériel"

, Propriété du fichier

"John: Finance"

.

Je veux que tout fichier de John soit chargé dans

"Matériel"

Changer le propriétaire du catalogue. J'ai essayé S. setuid et setgid, Mais la propriété n'a pas été acceptée. J'ai vu une mention dans ServerFault À propos de nous ACL ou chrooted jail pour SFTP, Mais je dois toujours les configurer et tester, et je ne sais pas s'ils sont une solution viable (ils pourraient être, je ne sais tout simplement pas parce que je n'ai jamais fait). Nous serons reconnaissants pour toutes les pensées et l'aide.
Invité:

Hannah

Confirmation de:

Le problème est que sftp Lance comme ID utilisateur - Premier client SSH sftp se connecte à l'hôte cible pour le compte de cet utilisateur, puis commence sftp-server. Étant donné que le serveur SFTP s'exécute sur le nom d'un utilisateur régulier, il n'a pas la possibilité de "donner" le fichier. (Changer le propriétaire du fichier).

Cependant, si vous pouvez utiliser scp Et attribuer une paire de clés à chaque utilisateur, vous pouvez le contourner. Cela inclut l'ajout d'une clé personnalisée à un fichier. ~ / .ssh / authorized_keys root avec paramètre command =, Pour le forcer à démarrer le script qui nettoie et modifie les arguments du programme serveur scp. J'ai utilisé cette technique plus tôt pour mettre en place Anonymous scp dropbox, Qui a permis à quiconque d'envoyer un fichier et d'assurer que personne ne peut obtenir des fichiers envoyés et éviter toute écrasement.

Si vous êtes ouvert à cette technique, faites le moi savoir et j'ajouterai ce post à une recette rapide.

Changement: basé sur des commentaires Voici ma recette que j'ai été utilisée à l'origine pour configurer Anonyme Dropbox. Mais il doit travailler à cette fin.

Si vous voulez que John écrit des fichiers à

/var/www/webstuff

, Et tous les fichiers enregistrés en elle appartiennent à l'ID utilisateur

apache

, alors:

1) Créer une paire de clés ssh:

ssh-keygen -t rsa -f john-scp-key  

2) Modifier le fichier d'ouverture de la clé "john-scp-key.pub" Et insérer l'opérateur "command =" de la manière suivante:

command="/usr/local/bin/strictscp ^/var/www/webstuff" ssh-rsa AAAA..... (reset
of key follows)

3) Ajouter du contenu

john-scp-key.pub

à

~apache/.ssh/authorized_keys

file (Créer un fichier si cela n'existe pas, en vous assurant que le catalogue .ssh, et authorized_keys appartenant à

apache

, et non disponible pour l'entrée ni un groupe ni le monde)

4) Créer un script

/usr/local/bin/strictscp

de la manière suivante:

#!/bin/sh
read cmd arg1 arg2 <<eot "$1"="" "$arg1"="-t" "$arg2"="" "$cmd"="scp" $ssh_original_command="" &&="" -a="" [="" ]="" echo="" eot="" if="" |grep="">/dev/null 2&gt;&amp;1
then
eval $cmd $arg1 $arg2
fi

5) Donnez maintenant un fichier de clé fermé

john-scp-key

John et lui demandez de copier des fichiers sur votre serveur Web comme suit:

scp -i john-scp-key some_file.html apache@yourserver:/var/www/webstuff/

Cela fonctionne comme ceci: quand vous utilisez scp Pour copier le fichier sur le serveur, le client scp Les usages ssh pour l'exécution «scp -t / path / name» sur le serveur. Lorsque vous utilisez une paire de clés, vous pouvez remplacer la commande exécutée et démarrer de force une commande spécifique lors de l'utilisation de cette clé. La commande initiale demandée avec ses arguments est dans la variable d'environnement «$ SSH_ORIGINAL_COMMAND». Nous spécifions donc

COMMAND=

Dans le script qui vérifie les arguments admissibles (Dans ce cas, il vérifie que le troisième argument - Ceci est un répertoire spécifique dans lequel nous souhaitons enregistrer des données), Cette clé ne convient donc que pour son objectif destiné et ne peut pas être utilisée pour exécuter des commandes arbitraires sur le serveur.

Vous pouvez bloquer

strictscp

Le script est un peu plus loin en vérifiant s'il existe un fichier cible ou non, et vous pouvez également ajouter

chgrp

à la fin pour définir le fichier appartenant au groupe (à condition que

apache

est membre de ce groupe).

J'espère que cela aidera - Si vous avez des problèmes, faites-le moi savoir et je verrai si je peux améliorer cette réponse.
</eot>

Pour répondre aux questions, connectez-vous ou registre