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
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
.
Pour chrooter un répertoire SFTP, vous devez
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
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
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.
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 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 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 sshfs
avec 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 .
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 acl
pour le réparer. Mais je n’étais pas satisfait de cela car j’ai dû installer acl
name__, 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 netdrive
name__, j’ai pu tout faire fonctionner sans déranger les autorisations du groupe .
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 .