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.