web-dev-qa-db-fra.com

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

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.

Je souhaite créer un autre compte d'utilisateur, qui pourrait également accéder à ce serveur à l'aide de SSH, mais uniquement dans un répertoire donné, 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 Lorsqu'il accède à ce fichier via FTP, cet utilisateur doit télécharger 500 Mo pour afficher les dernières lignes du journal, mais j'aimerais qu'il le fasse. être capable d'exécuter quelque chose comme ceci:

tail error.log

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

Comment puis-je faire ceci?

45
Richard Rodriguez

chroot l'utilisateur.


Mettre à jour:

L'article de TechRepublic de Vincent Danen dit:

Depuis la sortie d'OpenSSH 4.9p1, vous n'avez plus besoin de piratage tiers ni de 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 au 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 façon dont il peut être configuré. 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 indique

Création d'un chroot

  1. Installez les packages dchroot et debootstrap.

  2. En tant qu’administrateur (c’est-à-dire avec Sudo), créez un nouveau répertoire pour le chroot. Dans cette procédure, le répertoire /var/chroot sera utilisé. Pour ce faire, tapez Sudo mkdir /var/chroot dans une ligne de commande.

  3. En tant qu'administrateur, ouvrez /etc/schroot/schroot.conf dans 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_username par 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 le mirror.url.com ci-dessus avec l'URL d'un miroir d'archivage valide local 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.

Configuration 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 système de fichiers /proc 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_name pour installer des packages.

29
RedGrittyBrick

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

16
celebdor