Comment est-ce que je peux chrooter les utilisateurs SSH de sftp-only chez eux?

111

Je souhaite donner à un client l’accès à mon serveur, mais je souhaite limiter ces utilisateurs à leurs répertoires personnels. Je vais monter dans tous les fichiers que je veux qu'ils puissent voir.

J'ai créé un utilisateur appelé bob et l'ai ajouté à un nouveau groupe appelé sftponly . Ils ont un répertoire personnel à /home/bob . J'ai changé leur shell à /bin/false pour arrêter les connexions SSH. Voici leur ligne /etc/passwd :

bob:x:1001:1002::/home/bob:/bin/false

J'ai également changé le /etc/ssh/sshd_config pour inclure les éléments suivants:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Quand j'essaye de me connecter en tant que eux, voici ce que je vois

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Si je commente la ligne ChrootDirectory , je peux l’inclure dans SFTP, mais ils ont alors toute latitude sur le serveur. J'ai trouvé que ChrootDirectory /home fonctionne, mais il leur donne toujours accès à n'importe quel répertoire personnel. J'ai explicitement essayé ChrootDirectory /home/bob mais cela ne fonctionne pas non plus.

Qu'est-ce que je fais mal? Comment puis-je limiter bob à /home/bob/ ?

---- EDIT -----

Bon alors j'ai juste regardé /var/log/auth.log et j'ai vu ceci:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

Je ne suis pas tout à fait sûr de ce qui se passe là-bas, mais cela suggère que quelque chose ne va pas dans le répertoire des utilisateurs. Voici la sortie ls -h /home :

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob
    
posée Oli 09.05.2012 - 15:43
la source

3 réponses

110

Toutes ces difficultés sont dues à plusieurs problèmes de sécurité tels que décrits ici . Fondamentalement, le répertoire chroot doit appartenir à root et ne peut pas être un accès en écriture de groupe. Charmant. Donc, vous devez essentiellement transformer votre chroot en une cellule d'attente et dans que vous pouvez avoir votre contenu modifiable.

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

Et bam, vous pouvez vous connecter et écrire /writable .

    
réponse donnée Oli 09.05.2012 - 16:21
la source
51

Pour chrooter un répertoire SFTP, vous devez

  1. Créer un utilisateur et forcer root à en être propriétaire

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. Modifier l'emplacement du sous-système sur / etc / ssh / sshd_config:

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

    et créer une section utilisateur à la fin du fichier (ssh peut réapparaître s'il est placé après la ligne du sous-système):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
réponse donnée josircg 25.10.2012 - 19:54
la source
4

J'ai passé toute la journée à essayer de partager un réseau sur mon framboise. Je voulais verrouiller l'utilisateur pour qu'il ne puisse pas naviguer dans tout le système de fichiers, aucun accès à la connexion ssh et que je veuille avoir un accès en écriture au partage réseau.

Et voici comment ça marche:

J'ai d'abord créé un utilisateur:

sudo useradd netdrive

Ensuite, édité /etc/passwd et vérifié que /bin/false est utilisé pour l'utilisateur, la ligne était donc:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

J'ai édité /etc/ssh/sshd_config pour inclure:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Modification du propriétaire du répertoire de départ et des autorisations:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

Ok, après tout cela, j'ai pu me connecter en utilisant sshfs mais en lecture seule. Ce que je devais faire pour obtenir un dossier accessible en écriture:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

C'était ça, ça marchait sans autres changements. Notez que je n'ai que des autorisations en écriture pour l'utilisateur , et non pour le groupe , comme beaucoup d'autres solutions en ligne. J'ai pu créer / supprimer / éditer / renommer des fichiers / dossiers sans problème.

En accédant à sshfs avec l'utilisateur netdrive à cause de la configuration de chroot, je ne verrais que des choses stockées dans le répertoire /home/netdrive/ du serveur, parfait. La structure répétée du répertoire /home/netdrive/home/netdrive/ est ce qui m'a aidé à avoir une solution propre chroot ssh writable .

Maintenant, je vais expliquer ci-dessous les problèmes que j'ai eu:

Vous ne devriez probablement pas exécuter les paragraphes suivants :

Après avoir examiné les solutions ci-dessus (et beaucoup d’autres sur le net qui utilisaient même acl (listes de contrôle d’accès)) je n’étais toujours pas capable de le faire fonctionner parce que je faisais ensuite:

PAS travailler pour moi:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Parce que l’utilisateur netdrive ne pouvait toujours pas écrire dans ce répertoire /home/netdrive/writable/ malgré le fait de posséder le dossier et d’avoir les permissions. Alors j'ai fait:     sudo chmod 775 / home / netdrive / inscriptible / Et maintenant, je pouvais créer un répertoire et le supprimer, mais je ne pouvais pas le modifier car il était créé sans les autorisations en écriture pour les groupes. Ici, de ce que j'ai vu sur le net, les gens utilisent acl pour le réparer. Mais je n'étais pas content car je devais installer acl , configurer les points de montage, etc. Je ne sais pas non plus pourquoi j'aurais besoin de la permission de group pour écrire dans un dossier appartenant à même utilisateur.

Il semble que pour une raison quelconque, créer /home/netdrive/home/netdrive et donner la propriété au dernier dossier netdrive , j'ai pu tout faire fonctionner sans interférer avec les autorisations group .

    
réponse donnée mihai.ile 18.07.2015 - 19:58
la source

Lire d'autres questions sur les étiquettes