Puis-je créer un utilisateur SSH qui ne peut accéder qu'à certains répertoires?

45

J'ai un serveur privé virtuel auquel je peux me connecter en utilisant SSH avec mon compte root, pouvant exécuter n'importe quelle commande linux et accéder à toute la zone du disque, bien évidemment.

J'aimerais créer un autre compte d'utilisateur, qui pourrait également accéder à ce serveur à l'aide de SSH, mais uniquement dans un certain répertoire, par exemple /var/www/example.com/

Par exemple, imaginons que cet utilisateur possède un fichier ÉNORME error.log (500 Mo) situé dans /var/www/example.com/logs/error.log Lors de l'accès à ce fichier par FTP, cet utilisateur doit télécharger 500 Mo pour afficher les dernières lignes du journal, mais j'aimerais qu'il soit capable d'exécuter quelque chose comme ça:

tail error.log

Par conséquent, j'ai besoin de lui pour pouvoir accéder au serveur via SSH, mais je ne souhaite pas lui accorder l'accès à toutes les zones du serveur.

Comment puis-je faire ceci?

Richard Rodriguez
la source

Réponses:

29

chroot l'utilisateur.


Mise à jour:

L' article de Vincent Danen publié dans TechRepublic écrit:

Avec la sortie d'OpenSSH 4.9p1, vous n'avez plus besoin de recourir à des hacks tiers ni à des configurations de chroot compliquées pour confiner les utilisateurs dans leurs répertoires personnels ou leur donner accès aux services SFTP.

éditez / etc / ssh / sshd_config (/ etc / sshd_config sur certaines distributions) et définissez les options suivantes:

Subsystem     sftp   internal-sftp
Match Group sftp
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Assurez-vous que la directive «Match» se trouve à la fin du fichier. Cela indique à OpenSSH que tous les utilisateurs du groupe sftp doivent être chrootés vers leur répertoire de base (que% h représente dans la commande ChrootDirectory

Pour tous les utilisateurs que vous souhaitez chrooter, ajoutez-les au groupe sftp en utilisant:

# usermod -G sftp joe
# usermod -s /bin/false joe
# chown root:root /home/joe
# chmod 0755 /home/joe

La commande usermod ci-dessus ajoutera l'utilisateur joe au groupe sftp et définira leur shell sur / bin / false afin qu'ils ne puissent absolument jamais obtenir un accès à un shell. Les commandes chown et chmod définiront les autorisations requises pour le répertoire. Avec ces autorisations définies, l'utilisateur sera autorisé à télécharger et à télécharger des fichiers, mais ne pourra pas créer de répertoires ni de fichiers dans le répertoire racine.

Chrooter des comptes shell est un peu plus compliqué, car certains fichiers de périphérique et un shell doivent être disponibles dans le répertoire de base de l'utilisateur. Les commandes suivantes vont configurer un système chroot très basique sur Mandriva Linux:

# mkdir /chroot
# cd /chroot
# mkdir {bin,dev,lib}
# cp -p /bin/bash bin/
# cp -p /lib/{ld-linux.so.2,libc.so.6,libdl.so.2,libtermcap.so.2} lib/
# mknod dev/null c 1 3
# mknod dev/zero c 1 5
# chmod 0666 dev/{null,zero}
# mkdir -p /chroot/home/joe

Avec ce qui précède, l’utilisateur joe peut ssh et sera limité au chroot. Malheureusement, cela ne fait pas grand chose, mais cela vous donne une idée de la manière dont cela peut être mis en place. Selon ce que vous souhaitez fournir, vous devrez installer des bibliothèques et des fichiers binaires supplémentaires.


Le site Web de la communauté Ubuntu dit

Créer un chroot

  1. Installez les packages dchroot et debootstrap.

  2. En tant qu'administrateur (c.-à-d. En utilisant sudo), créez un nouveau répertoire pour le chroot. Dans cette procédure, le répertoire /var/chrootsera utilisé. Pour ce faire, tapez sudo mkdir /var/chroot dans une ligne de commande.

  3. En tant qu'administrateur, ouvrez-le /etc/schroot/schroot.confdans un éditeur de texte. Tapez cd /etc/schroot, suivi de gksu gedit schroot.conf. Cela vous permettra d'éditer le fichier.

  4. Ajoutez les lignes suivantes dans schroot.conf, puis enregistrez et fermez le fichier. Remplacez your_usernamepar votre nom d'utilisateur.

    [lucid] description = Ubuntu Lucid location = / var / chroot priority = 3 utilisateurs = votre_nom_utilisateur groupes = sbuild root-groups = root

Ouvrez un terminal et tapez:

sudo debootstrap --variant=buildd --arch i386 lucid /var/chroot/ \ 
http://mirror.url.com/ubuntu/

Cela créera une 'installation' de base d'Ubuntu 10.04 (Lucid Lynx) dans le chroot. Le téléchargement des packages peut prendre un certain temps. Remarque: vous pouvez remplacer lucid par la version Ubuntu de votre choix. Remarque: vous devez modifier ce qui précède mirror.url.comavec l'URL d'une archive miroir valide locale pour vous. Un chroot de base devrait maintenant avoir été créé. Tapez sudo chroot /var/chroot pour passer à un shell racine à l'intérieur du chroot.

Mise en place du chroot

Vous pouvez suivre certaines étapes élémentaires pour configurer le chroot, en fournissant des fonctionnalités telles que la résolution DNS et l'accès à /proc.

Remarque: Tapez ces commandes dans un shell extérieur au chroot.

Tapez ce qui suit pour monter le /proc système de fichiers dans le chroot (requis pour la gestion des processus):

sudo mount -o bind /proc /var/chroot/proc  

Tapez ce qui suit pour autoriser la résolution DNS depuis le chroot (requis pour l'accès Internet):

sudo cp /etc/resolv.conf /var/chroot/etc/resolv.conf 

Très peu de paquets sont installés par défaut dans un chroot (même sudo n'est pas installé). Utilisez apt-get install package_namepour installer des paquets.

RedGrittyBrick
la source
16

Votre meilleur pari, à mon humble avis, est de mettre en place une prison ssh chroot, c’est-à-dire un environnement minimaliste sur le /var/www/example.com/répertoire. Pour ce faire, vous pouvez suivre:

célébrité
la source