Imaginez une configuration de serveur d'une société d'hébergement Web partagée où plusieurs (~ 100) clients ont un accès shell à un seul serveur.
Beaucoup de "logiciels" web recommandent de chmod les fichiers 0777 . Je suis nerveux à l'idée que nos clients suivent ces tutoriels de manière imprudente, ouvrant leurs fichiers à nos autres clients. (Je n'utilise certainement pas cmod 0777
moi-même inutilement!) Existe-t-il une méthode pour s'assurer que les clients ne peuvent accéder qu'à leurs propres fichiers et les empêcher d'accéder aux fichiers lisibles par le monde à partir d'autres utilisateurs?
J'ai examiné AppArmor , mais cela est très étroitement lié à un processus qui semble échouer dans cet environnement.
linux
security
file-permissions
shared-hosting
Phillipp
la source
la source
chmod files 0777
sont strictement nécessaires, c'est-à-dire qu'elles s'attaquent à la cause première du problème, plutôt qu'au symptôme selon lequel, ce faisant, n'importe qui peut lire les fichiers de n'importe qui d'autre. Plusieurs fois, la recommandation d' autoriser l'accès est simplement un moyen peu coûteux d'éviter les appels d'assistance ou le manque de prouesse technique pour pouvoir configurer correctement les autorisations. Dans presque aucun cas, je n'ai dû définir des fichiers0777
ou accorder aux applications un accès root complet sur demande. L'éducation des utilisateurs et / ou des fournisseurs aide massivement ici.suexec
oumpm_itk
ou similaire.chmod 0777
leurs fichiers. Je pense qu'il est nerveux à l'idée qu'ils se rendentloltoturialz.com/php_problems
et se mettentchmod 0777
à leur compte tout en suivant aveuglément un article mal écrit. Il n'y a vraiment aucun moyen de les empêcher de le faire ou de les empêcher de se fâcher quand quelqu'un vole leurs affaires.Réponses:
Mettez un répertoire restreint et immuable entre le monde extérieur et les fichiers protégés, par exemple
ou
/home/joe/restricted/public_html
.Restreint signifie que seul l'utilisateur et peut-être le serveur Web peuvent le lire (par exemple, les modes
0700
/0750
ou certaines ACL ).L'immuabilité peut se faire avec
chattr +i
ou en changeant la propriété en quelque chose commeroot:joe
.Un moyen facile de créer cette hiérarchie sur Ubuntu serait de modifier
/etc/adduser.conf
et de définirGROUPHOMES
suryes
.la source
Il y a une option que vous voudrez peut-être envisager (selon la quantité de travail que vous voulez faire pour cela).
Comme d'autres l'ont déjà signalé, «normalement», vous ne pouvez pas empêcher une personne disposant d'un accès shell de lire des fichiers lisibles par tous.
Cependant, vous pouvez les chrooter dans leur propre maison, limitant fondamentalement l'accès shell à, premièrement, uniquement le répertoire racine que vous voulez (AKA le répertoire personnel) et, deuxièmement, empêcher les utilisateurs d'exécuter tout ce que vous ne voulez pas qu'ils exécutent.
J'ai fait une approche similaire lorsque j'avais un utilisateur pour avoir accès aux fichiers Web, mais je ne voulais pas qu'il voit d'autres fichiers en dehors du dossier Web.
Cela avait beaucoup de frais généraux, était un gâchis à configurer, et chaque fois que je mettais à jour quelque chose, il se cassait.
Mais pour aujourd'hui, je pense que vous pourriez y arriver assez facilement avec l' option chroot OpenSSH :
WikiBooks OpenSSH
la source
arch-chroot
commande ne semble pas couvrir cela. Et puis il y a aussi le problème de l'espace disque gaspillé avec tous les doublons. Je ne dis pas qu'il est impossible de le faire, juste que cela pourrait être un peu plus compliqué actuellement.J'ai trouvé que les listes de contrôle d'accès POSIX permettaient à vous, en tant qu'administrateur système, de protéger vos utilisateurs du pire de leur propre ignorance, en remplaçant l'autorisation régulière du système de fichiers d'un autre groupe d'utilisateurs, sans beaucoup de chance de casser quelque chose de crucial .
Ils peuvent être particulièrement utiles si, par exemple (fi), vous avez besoin que les répertoires personnels soient accessibles à tous, car le contenu Web doit être accessible pour apache dans
~/public_html/
. (Bien qu'avec les ACL, vous pouvez maintenant faire l'inverse, supprimer l'accès pour tous et utiliser une ACL efficace spécifique pour l'utilisateur apache.)Oui, un utilisateur averti peut à nouveau les supprimer / remplacer, est assez rare pour que ce soit improbable, et les utilisateurs qui ne le sont généralement pas de
chmod -R 777 ~/
toute façon, n'est-ce pas?Vous devez monter le système de fichiers avec l'
acl
option de montage:Dans de nombreuses distributions, la valeur par défaut est de créer des groupes d'utilisateurs, chaque utilisateur a son groupe principal et j'ai défini tous les utilisateurs dans un groupe secondaire avec le nom sans imagination de
users
.À l'aide des ACL, il est désormais trivial d'empêcher d'autres utilisateurs d'accéder aux répertoires personnels:
Avant:
Définissez maintenant les autorisations de répertoire effectives pour les membres du
users
groupe sur0
aucune lecture, écriture ou accès:Le
+
signe indique la présence de paramètres ACL à cet endroit. Et legetfacl
peut confirmer que:Le
group:users:---
spectacle que le groupe n'a effectivement aucun droit d'accès, malgré les autorisations régulières pour les autresother::rwx
Et tester en tant qu'utilisateur1:
Une deuxième solution courante sur les systèmes partagés consiste à avoir les répertoires de base de montage automatique à la demande et un serveur dédié à l'accès shell. C'est loin d'être infaillible, mais en général, seule une poignée d'utilisateurs seront connectés simultanément, ce qui signifie que seuls les répertoires personnels de ces utilisateurs sont visibles et accessibles.
la source
Les conteneurs Linux (LXC) pourraient être la meilleure combinaison de chroot et de système séparé.
Ils ressemblent plus à un chroot avancé, pas à la virtualisation, mais vous pouvez combiner différents systèmes d'exploitation sur un serveur.
Vous pouvez donner à un utilisateur un système d'exploitation complet et le chrooter, donc lorsque l'utilisateur se connecte, il va dans son conteneur. Et vous pouvez également y limiter l'utilisation du processeur et de la mémoire.
Stéphane Graber, l'auteur de LXC, a un joli tutoriel pour vous aider à démarrer.
la source
Par exemple, si vous souhaitez que l'utilisateur n'ait accès qu'à son propre
home
répertoire, vous devez:Désormais
/home/username
visible uniquement par son propriétaire. Pour en faire la valeur par défaut pour tous les nouveaux utilisateurs, modifiez/etc/adduser.conf
et définissez surDIR_MODE
au0700
lieu de la0755
valeur par défaut.Bien sûr, si vous souhaitez modifier le DIR_MODE par défaut, cela dépend de votre distribution, celle sur laquelle je posté fonctionne
Ubuntu
.modifier
Comme @Dani_l l'a correctement mentionné, cette réponse est correcte en les rendant NON lisibles par tout le monde.
la source
Juste pour être pédant - Non, il n'y en a pas.
@Marek a donné une réponse correcte , mais votre question est incorrecte - vous ne pouvez empêcher personne d'accéder à des fichiers "lisibles par le monde".
Soit ils sont lisibles par le monde, soit ils ne le sont pas. @ La réponse de Marek est correcte en les rendant NON lisibles par le monde.
la source
Je ne vois aucune mention de la «coquille restreinte» dans les réponses données jusqu'à présent.
ln / bin / bash / bin / rbash
Définissez-le comme shell de connexion.
la source
Si le serveur Web fonctionne avec le même utilisateur et groupe pour chaque domaine hébergé, il est difficile (voire impossible) de sécuriser la configuration.
Vous souhaitez que certains fichiers soient accessibles à l'utilisateur ainsi qu'au serveur Web, mais pas aux autres utilisateurs. Mais dès que le serveur Web peut y accéder, un autre utilisateur peut les lire en plaçant un lien symbolique vers le fichier dans son propre site Web.
Si vous pouvez faire fonctionner chaque site Web en tant qu'utilisateur distinct, cela devient assez simple. Chaque client aura désormais deux utilisateurs sur le système, un pour le serveur Web et un pour l'accès au shell.
Créez un groupe contenant ces deux utilisateurs. Créez maintenant un répertoire avec ce groupe et cette racine utilisateur. Ce répertoire doit avoir des autorisations
750
, ce qui signifie que root a un accès complet et que le groupe a un accès en lecture et en exécution. À l'intérieur de ce répertoire, vous pouvez créer des répertoires personnels pour chacun des deux utilisateurs. Cela signifie que le répertoire personnel de l'utilisateur n'aura plus la forme/home/username
, mais plutôt quelque chose avec au moins un composant de répertoire supplémentaire. Ce n'est pas un problème, rien ne nécessite que les répertoires personnels soient nommés selon cette convention spécifique.Il peut être difficile de faire fonctionner des sites Web avec différents utilisateurs et groupes si vous utilisez des vhosts basés sur le nom. S'il s'avère que vous ne pouvez effectuer la séparation qu'avec des vhosts basés sur IP et que vous n'avez pas suffisamment d'adresses IP pour chaque site, vous pouvez héberger chaque site Web sur une adresse IPv6 et mettre un proxy inverse pour chacun d'eux sur un Adresse IPv4.
la source