Pour créer un utilisateur SSH uniquement autorisé à accéder à des dossiers spécifiques

48

J'ai installé SSH, mais j'ai constaté que si j'utilise mon compte d'origine pour me connecter à Ubuntu, celui-ci dispose de trop d'autorisations.

Je veux contraindre l'utilisateur à ne disposer que d'autorisations pour des dossiers spécifiques dans Ubuntu. Comment puis-je configurer un tel utilisateur?

Insensé
la source

Réponses:

50

C'est simple Créez simplement un nouvel utilisateur avec son répertoire de base défini sur celui auquel vous souhaitez qu'il ait accès (cette commande doit être exécutée sous sudoou dans le shell root):

adduser --home /restricted/directory restricted_user

Cela créera un utilisateur restricted_user, le répertoire /restricted/directory, puis les autorisations sur le répertoire seront définies afin que l'utilisateur puisse y écrire. Il ne sera pas capable d'écrire dans un autre répertoire par défaut.

Si vous avez déjà le répertoire, vous pouvez exécuter une addusercommande avec une --no-create-homeoption ajoutée et définir manuellement les autorisations (également avec les privilèges root), comme par exemple:

chown restricted_user:restricted_user /restricted/directory
chmod 755 /restricted/directory

Si vous devez rendre inaccessibles même les répertoires inscriptibles au monde pour cet utilisateur, il existe deux variantes.

1) Si vous souhaitez fournir une session de shell interactive à l'utilisateur, envisagez de suivre ce manuel pour créer une prison chroot (dans votre /restricted/directory).

Après cela, ajoutez ce qui suit à votre sshd_config:

Match user restricted_user
  ChrootDirectory /restricted/directory

2) Si vous avez seulement besoin de lui pour copier des fichiers entre son noeud final de connexion et votre hôte, tout est beaucoup plus simple. Ajoutez ces lignes à la fin de votre sshd_config:

Match user restricted_user
  ForceCommand internal-sftp
  ChrootDirectory /restricted/directory

Subsystem       sftp    internal-sftp

Puis commentez le Subsystem sftp /usr/lib/openssh/sftp-serveren plaçant un #signe hash ( ) au début.

Après avoir redémarré votre serveur SSH (il ne tue pas les sessions interactives au redémarrage, il est donc sécurisé même si vous avez mal configuré quelque chose; il ne ferme pas non plus votre session en cours avant d'avoir vérifié que vous êtes toujours en mesure de vous connecter), tout devrait fonctionner comme prévu.

Whitequark
la source
1
J'ai essayé, mais il semble que je puisse encore cd .. et parcourir le répertoire supérieur. et quand j'utilise vi a.txt dans le répertoire supérieur, cela indique: appuyez sur enter ou commande pour continuer, et je ne peux pas quitter vi
Foolish
1
Puis-je utiliser l'option 2 si l'utilisateur ne doit avoir qu'un accès sshfs?
papillotements
1
Tout fonctionne bien, sauf que je n'ai pas de permission en écriture. Comment puis-je définir une autorisation d'écriture pour ce répertoire restreint. Si j'utilise chmod 775, l'utilisateur ne peut plus se connecter.
Mon nom est
3
Vous devriez écrire la Subsystem sftp internal-sftpligne dans votre deuxième exemple au-dessus du Matchbloc. Sinon, ssh affichera une erreur et ne démarrera pas.
Tik0
1
Alerte spoiler: ne fonctionne pas avec scp
vélo
5

Le moyen le plus simple de créer un utilisateur restreint qui ne peut pas errer hors du répertoire donné (par exemple, vers le répertoire supérieur, etc.) et qui a un ensemble de commandes limité / choisi, consiste à utiliser un shell restreint. Ref:

http://man.he.net/man1/rbash

Tout d’abord, créez un lien symbolique appelé rbash(exécuté en tant qu’utilisateur root).

ln -s /bin/bash /bin/rbash

Ensuite, créez simplement un utilisateur normal avec ce shell restreint et configurez son répertoire home dans le dossier souhaité:

useradd -s /bin/rbash -d /home/restricted_folder username

Même sans Shell restreint, si vous n'ajoutez pas explicitement cet utilisateur à la liste de sudoer, ni à aucun groupe spécial, il sera limité par défaut.

Avec le shell restreint, les opérations suivantes sont interdites ou non exécutées:

  • changer de répertoire avec cd

  • définir ou annuler les valeurs de SHELL, PATH, ENV ou BASH_ENV

  • spécifier les noms de commande contenant /

  • spécifiant un nom de fichier contenant un / comme argument de la. commande intégrée

  • Spécification d'un nom de fichier contenant une barre oblique en tant qu'argument de l'option -p de la commande intégrée hash

  • Importation des définitions de fonction de l'environnement shell au démarrage

  • analyser la valeur de SHELLOPTS de l'environnement shell au démarrage

  • redirection de la sortie à l'aide des opérateurs>,> |, <>,> &, &> et >>

  • en utilisant la commande intégrée exec pour remplacer le shell par une autre commande

  • ajout ou suppression de commandes intégrées avec les options -f et -d à la commande active enable

  • Utilisation de la commande enable enable pour activer les fonctions intégrées du shell désactivé

  • spécifiant l'option -p à la commande intégrée à la commande

  • désactiver le mode restreint avec set + r ou set + o restreint.

Ces restrictions sont appliquées après tous les fichiers de démarrage.

De plus, vous pouvez créer un fichier .bash_profile en lecture seule pour cet utilisateur afin de restreindre l'utilisateur à un ensemble de commandes limité / sélectionné,

PATH=$HOME/bin

et faites un lien symbolique aux commandes que vous autorisez dans le dossier ~ / bin vers cet utilisateur:

ln -s /bin/ls /home/restricted_folder/bin/ls
ln -s /bin/mkdir /home/restricted_folder/bin/mkdir
ln -s /bin/rm /home/restricted_folder/bin/rm

etc.

HTH

xpt
la source
Je peux trouver n'importe quel fichier sur le système de fichiers, y compris le répertoire / racine et je peux lire ces fichiers. Vous ne savez pas comment restreindre davantage l'accès aux données en dehors du dossier utilisateur, à la capture de paquets sur le réseau ou à la lecture du contenu de / var / log
16851556,