web-dev-qa-db-fra.com

Comment puis-je intégrer des utilisateurs SSH sftp-only chez eux?

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

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

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

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

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

Quand j'essaie de me connecter comme 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 utiliser le protocole SFTP, mais ils ont alors toute liberté sur le serveur. J'ai constaté que ChrootDirectory /home fonctionnait, mais cela leur donnait 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/?

----MODIFIER-----

Bon, je viens juste de jeter un coup d'œil à /var/log/auth.log et de voir 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
122
Oli

Toute cette douleur est due à plusieurs problèmes de sécurité comme décrit ici . Fondamentalement, le répertoire chroot doit appartenir à root et ne peut pas être un accès en écriture de groupe. Charmant. Il vous faut donc essentiellement transformer votre chroot en une cellule de stockage et dans lequel 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.

117
Oli

Pour chrooter un répertoire SFTP, vous devez

  1. Créer un utilisateur et forcer la racine à 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. Modifiez l'emplacement du sous-système dans/etc/ssh/sshd_config:

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

    et créez une section utilisateur à la fin du fichier (ssh peut mourir si il est placé après la ligne Subsystem):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
54
josircg

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

Et voici comment je le fais fonctionner:

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

Sudo useradd netdrive

Ensuite, éditez /etc/passwd et assurez-vous qu'il a /bin/false pour l'utilisateur de sorte que la ligne était:

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

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

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

Changement du propriétaire du répertoire de base 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 sshfsmais 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 a fonctionné sans autre changement. Notez que je ne dispose que d'autorisations d'accès en écriture pour l'utilisateur , pas pour le groupe comme beaucoup d'autres solutions en ligne. J'ai pu créer/supprimer/éditer/renommer des fichiers/dossiers sans problèmes.

Lors de l'accès à l'aide de sshfsavec l'utilisateur netdrive en raison de la configuration chroot, je ne verrais que les éléments stockés dans le répertoire /home/netdrive/ du serveur, parfait. La structure de répertoires répétée /home/netdrive/home/netdrive/ est ce qui me permet de travailler avec une solution propre chroot ssh writeable .

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

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

Après avoir examiné les solutions ci-dessus (et de nombreux autres sur le réseau qui utilisaient même acl (listes de contrôle d'accès)) , je ne pouvais toujours pas le faire fonctionner, car ce que j'ai ensuite fait était:

Ce qui suit PAS a fonctionné pour moi:

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

Parce que l'utilisateur de netdrive n'était toujours pas en mesure d'écrire dans ce répertoire /home/netdrive/writable/ malgré le fait qu'il soit propriétaire du dossier et qu'il possède les autorisations nécessaires. Ensuite, j'ai fait ce qui suit: Sudo chmod 775/home/netdrive/Writable/Et maintenant, je pouvais créer un répertoire et le supprimer, mais je ne pouvais pas le modifier car il était créé sans autorisations de groupe en écriture. D'après ce que j'ai vu sur le net, les utilisateurs utilisent aclpour le réparer. Mais je n’étais pas satisfait de cela car j’ai dû installer aclname__, puis configurer les points de montage, etc. De plus, je ne sais pas pourquoi il me faudrait un groupe autorisation d'écrire dans un dossier appartenant au même utilisateur.

Il semble que pour une raison quelconque, créant /home/netdrive/home/netdrive et donnant la propriété du dernier dossier netdrivename__, j’ai pu tout faire fonctionner sans déranger les autorisations du groupe .

5
mihai.ile

J'ai suivi cet article mais cela n'a pas fonctionné. Il a commencé à fonctionner après avoir apporté ce changement (suggéré dans les réponses ci-dessus):

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

De plus fait le répertoire personnel racine exploitable sous lequel j’avais un sous-répertoire en écriture (comme décrit ci-dessus).

La chose nouvelle et utile que je veux ajouter à cette réponse est que vous pouvez simplifier la configuration simplement en spécifiant% h comme répertoire de base de l'utilisateur:

ChrootDirectory %h

Je l'ai découvert grâce à ce lien .

1
user109764