GNU/Linux >> Tutoriels Linux >  >> Linux

Plonger plus profondément dans les prisons de chroot Linux

Dans la première partie, Comment configurer les jails chroot Linux, j'ai couvert le chroot commande et vous avez appris à utiliser le chroot wrapper dans sshd pour isoler les sftpusers grouper. Lorsque vous modifiez sshd_config pour invoquer le wrapper chroot et lui donner des caractéristiques correspondantes, sshd exécute certaines commandes dans la prison chroot ou le wrapper. Vous avez vu à quel point cette technique pouvait être utile pour mettre en œuvre un accès confiné plutôt que sécurisé pour les utilisateurs distants.

Exemple développé

Je commencerai par développer ce que j'ai fait auparavant, en partie sous forme de révision. Commencez par configurer un répertoire personnalisé pour les utilisateurs distants. J'utiliserai les sftpusers groupe à nouveau.

Commencez par créer le répertoire personnalisé que vous souhaitez utiliser et définissez la propriété :

# mkdir -p /sftpusers/chroot
# chown root:root /sftpusers/chroot

Cette fois, faites en sorte que root soit le propriétaire, plutôt que les sftpusers grouper. De cette façon, lorsque vous ajoutez des utilisateurs, ils ne sont pas autorisés à voir l'intégralité de l'annuaire.

Ensuite, créez l'utilisateur que vous souhaitez restreindre (vous devez le faire pour chaque utilisateur dans ce cas), ajoutez le nouvel utilisateur aux sftpusers groupe et refuser un shell de connexion car il s'agit de sftp utilisateurs :

# useradd sanjay -g sftpusers -s /sbin/nologin
# passwd sanjay

Ensuite, créez le répertoire pour sanjay et définissez la propriété et les autorisations :

# mkdir /sftpusers/chroot/sanjay
# chown sanjay:sftpusers /sftpusers/chroot/sanjay
# chmod 700 /sftpusers/chroot/sanjay

Ensuite, modifiez le sshd_config dossier. Tout d'abord, commentez l'appel de sous-système existant et ajoutez l'invocation interne :

#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

Ajoutez ensuite notre entrée de cas de correspondance :

Match Group sftpusers
ChrootDirectory /sftpusers/chroot/
ForceCommand internal-sftp
X11Forwarding no
AllowTCPForwarding no

Notez que vous êtes de retour à la spécification d'un répertoire, mais cette fois, vous avez déjà défini la propriété pour empêcher sanjay de voir les trucs de quelqu'un d'autre. Ce / de fin est également important.

Ensuite, redémarrez sshd et tester :

[skipworthy@milo ~]$ sftp sanjay@showme
sanjay@showme's password:
Connected to sanjay@showme.
sftp> ls
sanjay
sftp> pwd
Remote working directory: /
sftp> cd ..
sftp> ls
sanjay
sftp> touch test
Invalid command.

Alors. Sanjay ne peut voir que son propre dossier et doit cd dedans pour faire quoi que ce soit d'utile.

Isoler un service ou un utilisateur spécifique

Maintenant, que se passe-t-il si vous souhaitez fournir un environnement shell utilisable pour un utilisateur distant ou créer un environnement chroot jail pour un service spécifique ? Pour ce faire, créez le répertoire emprisonné et le système de fichiers racine, puis créez des liens vers les outils et les bibliothèques dont vous avez besoin. Faire tout cela est un peu compliqué, mais Red Hat fournit un script et des instructions de base qui facilitent le processus.

Remarque : J'ai testé les éléments suivants dans Red Hat Enterprise Linux 7 et 8, bien que je sache que cette fonctionnalité était disponible dans Red Hat Enterprise Linux 6. Je n'ai aucune raison de penser que ce script ne fonctionnerait pas dans Fedora, CentOS ou tout autre Distribution Red Hat, mais votre kilométrage (comme toujours) peut varier.

Tout d'abord, créez votre répertoire chroot :

# mkdir /chroot

Exécutez ensuite le script à partir de yum qui installe les bits nécessaires :

# yum --releasever=/ --installroot=/chroot install iputils vim python

Le --releasever=/ flag transmet les informations de la version locale actuelle pour initialiser un référentiel dans le nouveau --installroot , définit l'emplacement du nouvel emplacement d'installation. En théorie, vous pourriez créer une prison chroot basée sur n'importe quelle version des dépôts yum ou dnf (le script commencera cependant toujours avec les dépôts système actuels).

Avec cet outil, vous installez des utilitaires réseau de base tels que l'éditeur VIM et Python. Vous pouvez ajouter d'autres éléments au départ si vous le souhaitez, y compris le service que vous souhaitez exécuter dans cette prison. C'est aussi l'une des choses intéressantes à propos de yum et dépendances. Dans le cadre de la résolution des dépendances, yum fait les ajouts nécessaires à l'arborescence du système de fichiers avec les bibliothèques. Cependant, il laisse de côté quelques éléments que vous devez ajouter ensuite. J'y reviendrai dans un instant.

À présent, les packages et les dépendances ont été installés, et une nouvelle clé GPG a été créée pour ce nouveau référentiel en relation avec ce nouveau système de fichiers racine. Ensuite, montez vos systèmes de fichiers éphémères :

# mount -t proc proc /chroot/proc/
# mount -t sysfs sys /chroot/sys/

Et configurez vos liaisons de développement :

# mount -o bind /dev/pts /chroot/dev/pts
# mount -o bind /dev/pts /chroot/dev/pts

Notez que ces montures ne seront pas survivre à un redémarrage de cette façon, mais cette configuration vous permettra de tester et de jouer avec un environnement de prison chroot.

Maintenant, testez pour vérifier que tout fonctionne comme prévu :

# chroot /chroot
bash-4.2# ls
bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr

Vous pouvez voir que le système de fichiers et les bibliothèques ont été ajoutés avec succès :

bash-4.2# pwd
/
bash-4.2# cd ..

À partir de là, vous voyez la racine correcte et vous ne pouvez pas remonter :

bash-4.2# exit
exit
#

Vous avez maintenant quitté le wrapper chroot, ce qui est attendu car vous l'avez saisi à partir d'un shell de connexion local en tant que root. Normalement, un utilisateur distant ne devrait pas être en mesure de le faire, comme vous l'avez vu dans le sftp exemple :

[skipworthy@milo ~]$ ssh root@showme
root@showme's password:
[root@showme1 ~]# chroot /chroot
bash-4.2#

Notez que ces répertoires ont tous été créés par root, c'est donc à qui ils appartiennent. Maintenant, ajoutez ce chroot au sshd_config , car cette fois-ci, vous ne correspondez qu'à cet utilisateur :

Match User leo
ChrootDirectory /chroot

Ensuite, redémarrez sshd .

Vous devez également copier le /etc/passwd et /etc/group fichiers du système hôte vers /chroot répertoire :

[root@showme1 ~]# cp -vf /etc/{passwd,group} /chroot/etc/

Remarque : Si vous ignorez l'étape ci-dessus, vous pouvez vous connecter, mais le résultat ne sera pas fiable et vous serez sujet à des erreurs liées à des connexions conflictuelles

Passons maintenant au test :

[skipworthy@milo ~]$ ssh leo@showme
leo@showme's password:
Last login: Thu Jan 30 19:35:36 2020 from 192.168.0.20
-bash-4.2$ ls
-bash-4.2$ pwd
/home/leo

Ça à l'air bon. Maintenant, pouvez-vous trouver quelque chose d'utile à faire ? Amusons-nous :

[root@showme1 ~]# yum --releasever=/ --installroot=/chroot install httpd

Vous pourriez déposez le releasever=/ , mais j'aime laisser cela de côté, car cela laisse moins de chances de résultats inattendus.

[root@showme1 ~]# chroot /chroot
bash-4.2# ls /etc/httpd
conf conf.d conf.modules.d logs modules run
bash-4.2# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)

Donc, httpd est là si vous le voulez, mais juste pour démontrer vous pouvez utiliser un rapide one-liner de Python, que vous avez également installé :

bash-4.2# python -m SimpleHTTPServer 8000
Serving HTTP on 0.0.0.0 port 8000 ...

Et maintenant, vous avez un simple serveur Web fonctionnant dans une prison chroot. En théorie, vous pouvez exécuter n'importe quel nombre de services depuis l'intérieur de la prison chroot et les maintenir " confinés" et à l'écart des autres services, ce qui vous permet d'exposer uniquement une partie d'un environnement de ressources plus vaste sans compromettre l'expérience de l'utilisateur.

Vous êtes nouveau dans les conteneurs Linux ? Téléchargez l'introduction aux conteneurs et apprenez les bases.


Linux
  1. Termux transforme Android en environnement de développement Linux

  2. Comment configurer des jails chroot Linux

  3. Comment déplacer Request Tracker dans un conteneur Linux

  4. Comment effectuer un chroot avec des espaces de noms Linux ?

  5. Linux :transformer en service

Comment SSH dans un répertoire particulier sous Linux

Comment configurer SFTP chrooté sous Linux

Mon parcours dans l'administration système Linux

Guide de configuration du serveur SFTP sous Linux

Un guide pratique pour la commande chroot sous Linux

Comment activer sFTP dans un VPS Linux ?