Le terme prison chroot a été utilisé pour la première fois en 1992, dans un article d'un éminent chercheur en sécurité, Bill Cheswick, (ce qui est intéressant si vous aimez ce genre de choses, vous pouvez trouver l'article ici). Les prisons chroot ont commencé à apparaître en 2003, avec des applications comme IRC et FTP. En 2005, Sun a lancé sa technologie "Containers" appelée Zones, qui à son tour était un précurseur du concept d'espaces de noms. , qui est une technologie de base utilisée avec les conteneurs.
Bases du chroot
Chroot permet à un administrateur de contrôler l'accès à un service ou à un système de fichiers tout en contrôlant l'exposition à l'environnement de serveur sous-jacent. Les deux exemples courants que vous pourriez rencontrer sont pendant la séquence de démarrage et le "shell d'urgence" sur les systèmes Red Hat/CentOS/Fedora, et dans Secure FTP (SFTP).
La commande ressemble à ceci :
chroot <newroot> [[command][arguments]]
Similaire au sudo
commande, le chroot
La commande modifie l'environnement de la commande suivante. En d'autres termes, cela vous changera en newroot
répertoire et fait également de ce répertoire le répertoire "de travail". La command
s'exécute ensuite à cet emplacement, ce qui est utile pour des choses comme le sauvetage d'un système qui ne démarre pas.
Contrairement à sudo
, vous serez "dans" le répertoire. Cette pratique, encore une fois, est utile si vous démarrez à partir d'un support externe, mais que vous devez accéder à un système de fichiers ou à une commande "local" pour effectuer le travail.
L'autre utilisation courante de chroot
est de restreindre un service ou un utilisateur en utilisant un wrapper pour masquer le reste du système de fichiers, limitant ainsi la vue d'un utilisateur distant sur les données des autres utilisateurs. Une implémentation populaire utilisant cette approche SFTP.
Exemple
Avant de commencer à travailler sur cet exemple, vous devez vous assurer que vous disposez de sauvegardes. Dans ce cas, sauvegardez le fichier /etc/ssh/sshd_config
fichier car vous apporterez des modifications à celui-ci en particulier :
[root@showme1 ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Pour l'instant, vous limiterez uniquement les utilisateurs SFTP à leurs répertoires personnels sur le serveur. Cette exigence signifie que vous devrez ajouter des utilisateurs et les mettre dans un groupe :
[root@showme1 ~]# useradd -g sftpusers -s /sbin/nologin -p nick nick
Notez que cela affectera nick
un compte sans shell de connexion. Cette technique est à la fois pratique et une bonne pratique de sécurité :s'il utilise simplement SFTP, il ne devrait pas avoir de privilèges de connexion. Je parlerai de la fourniture d'un shell aux utilisateurs distants dans le prochain article.
Maintenant, vous devez dire au ssh
service que faire lorsque les utilisateurs SFTP se connectent. Ouvrez le /etc/ssh/sshd_config
fichier et ajoutez ce qui suit à la fin :
Subsystem sftp internal-sftp
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
Il est important que vous ajoutiez ces paramètres en tant qu'ensemble d'entrées distinct et que vous utilisiez l'élément Match
syntaxe pour indiquer que cette section uniquement s'applique aux utilisateurs de ce groupe. Si vous apportiez les modifications aux entrées existantes, elles s'appliqueraient à toutes utilisateurs SSH, ce qui pourrait interrompre l'accès à distance.
Les lignes de configuration se décomposent comme suit :
- La
ForceCommand
rendssh
choisissez sa fonction intégrée pour fournir un service SFTP (que vous pouvez contrôler indépendamment). ChrootDirectory
indiquesshd
où restreindre l'utilisateur.Subsystem sftp internal-sftp
indiquesshd
pour charger lesftp
interne service et le rendre disponible.
Vous devrez peut-être vous assurer que ce Subsystem
n'est pas déjà défini en commentant cette ligne plus tôt dans le fichier de configuration :
# override default of no subsystems
# Subsystem sftp /usr/libexec/openssh/sftp-server
Une fois que vous avez apporté les modifications et vérifié l'orthographe, continuez et enregistrez les modifications. Ensuite, redémarrez sshd
:
[root@showme1 ~]# systemctl restart sshd
Testez le nouvel utilisateur :
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> ls
accounting ansible fred jason kenny lisa
nick
sftp> pwd
Remote working directory: /
sftp> exit
Oups, attendez une minute :il semble que vous puissiez également voir tous les répertoires des autres utilisateurs. Cependant, vous ne pouvez pas accéder à ces répertoires :
sftp> cd fred
sftp> ls
remote readdir("/fred"): Permission denied
Vous pouvez diriger l'utilisateur chrooté vers son propre répertoire personnel en modifiant le ChrootDirectory
ligne dans le sshd_config
fichier comme celui-ci :
ChrootDirectory /
Ce changement rapide donne l'impression à Nick qu'il se trouve dans son propre répertoire personnel et qu'il ne pourra voir les fichiers d'aucun autre utilisateur :
sftp> pwd
Remote working directory: /home/nick
sftp>
sftp> exit
[skipworthy@milo ~]$ touch test.txt
[skipworthy@milo ~]$ sftp nick@showme
nick@showme's password:
Connected to nick@showme.
sftp> put test.txt
Uploading test.txt to /home/nick/test.txt
test.txt 100% 0 0.0KB/s 00:00
sftp> ls
test.txt
sftp>
Où est-il allé? Regardez ceci :
[root@showme1 ~]# ls /home/nick
test.txt
Notez qu'une chroot jail
n'est pas considérée comme une restriction de sécurité adéquate en elle-même. Bien qu'il empêche un utilisateur de sortir d'un répertoire restreint, il existe des moyens de contourner cela (l'idée générale est mentionnée dans le chroot(2)
page de manuel, que vous devriez consulter si vous envisagez d'utiliser cette astuce dans un contexte de production ou d'entreprise critique.)
Conclusion (pour l'instant)
Ainsi, vous pouvez voir que chroot
peut être un outil très utile. Dans la partie 2, j'examinerai davantage l'attribution de répertoires spécifiques aux utilisateurs et la fourniture d'un environnement shell à un utilisateur distant sans exposer le reste du serveur.
Nouveauté dans les conteneurs ? Téléchargez l'introduction aux conteneurs et découvrez les bases des conteneurs Linux.