Comment ajouter un utilisateur ssh qui ne dispose que d'autorisations pour accéder à un dossier spécifique?

17

Comment ajouter un utilisateur ssh qui ne dispose que des autorisations pour accéder à un dossier spécifique?

useradd -d /var/www/xyz.com.tr/musteri  -s /bin/bash -g sshd musteri

J'ai créé un utilisateur appelé musteri. J'ai défini son dossier de départ et son groupe. Je souhaite donc intégrer les musteriutilisateurs dans "/var/www/xyz.com.tr/musteri". Je ne veux pas qu'il accède à un autre dossier.

Violoncelle
la source
Voulez-vous que l'utilisateur ait un accès complet au shell, ou uniquement des protocoles de copie de fichiers comme sftp et rsync?
Gilles 'SO- arrête d'être méchant'
Dans ce dernier cas, vous voudrez peut-être regarder scponlycomme un shell, éventuellement en chrootmode pour restreindre son accès à ce répertoire et nulle part ailleurs.
Shadur
1
@Gilles - Je veux accéder via sftp. Mais, je ne veux pas qu'il accède à un autre dossier.
Cell-o
1
@ Cell-o: Si vous n'avez besoin que de quelques protocoles de transfert de fichiers et non de shells, utilisez chroot plus scponly ou rssh (Google scponly chrootou rssh chrootdevrait vous conduire à howtos).
Gilles 'SO- arrête d'être méchant'
Que diriez-vous d'utiliser des listes de contrôle d'accès?
fpmurphy

Réponses:

19

Il semble que vous souhaitiez que votre müşteriler ait accès au transfert de fichiers dans un dossier sans leur donner de coquilles. C'est une bonne chose car, comme l' a souligné binfalse , donner aux utilisateurs des shells avec un accès limité est délicat car les shells doivent accéder à toutes sortes de choses dispersées sur le système juste pour fonctionner.

Afin de donner l'accès SFTP à un dossier spécifique, vous pouvez faire quelque chose comme ça.

  1. Ajoutez un nouveau groupe au système, dites «sftponly».
  2. Ajoutez tous les utilisateurs de votre système qui devraient avoir des droits limités à ce groupe. Vous pouvez également leur donner des shells restreints comme / bin / true, mais ce n'est pas obligatoire.
  3. Changez votre fichier de configuration ssh (généralement /etc/ssh/sshd_config) avec ces lignes
    Sous-système sftp internal-sftp

    Match Match sftponly
        ChrootDirectory% h
        AllowTCPForwarding non
        X11Forwarding non
        ForceCommand internal-sftp

Cela activerait le sous-système sftp à l'intérieur de SSH et forcerait les membres de ce groupe de systèmes à utiliser uniquement ce système lors de la connexion. Il les chrooterait également dans leurs répertoires personnels. Vous pouvez également changer cela pour être un sous-dossier de leurs répertoires personnels avec quelque chose comme ChrootDirectory %h/musteri_sftppour qu'ils ne puissent pas voir le reste de leurs fichiers système mais se connecter directement à un sous-dossier spécial de leur dossier personnel.

Kolay gelsin.

Caleb
la source
Öncelikle teşekkürler. ;) Comme vous l'avez mentionné, j'ai configuré SFTP, mais j'ai un problème avec iptables, voici ma règle. -> Un état RH-Firewall-1-INPUT -m --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
Cell-o
1
Birşey değil. Alors que FTP utiliserait le port 21, SFTP est un protocole de type ftp qui s'exécute sur le canal SSH, donc il va utiliser le port SSH qui est par défaut de 22.
Caleb
Notez que vous devez également localiser et commenter toute commande de sous-système existante (par exemple, Subsftem sftp / usr / lib / openssh / sftp-server)
CnrL
Résolu mon problème ET appris quelques phrases turques pratiques! Prime!
eimajenthat
2

À mon avis, c'est très difficile, voire impossible. Lorsque l'utilisateur se connecte via SSH, il a au moins besoin d'un shell, dans votre cas, le bash. Pour exécuter, /bin/bashil a besoin d'autorisations d'accès /bin. bashlui-même a besoin de lire certaines choses /etc(par exemple /etc/bash.bashrc), donc l'utilisateur doit également y accéder /etc. En supposant que l'utilisateur ne souhaite pas seulement rester dans ce répertoire, il peut vouloir lire un fichier, mais pour exécuter, par exemple, vimil doit également y accéder /usr/bin.
Ceci est juste une légère démonstration, il y a d'autres dépendances, par exemple, je ne sais pas vraiment ce qui se passera si l'utilisateur n'a pas accès à /tmp..

Vous devez penser à votre intention. Voulez-vous simplement que quelqu'un ait un accès en lecture / écriture à une partie de votre service Web? Ensuite, vous pouvez configurer quelque chose comme FTP pour exporter un répertoire spécifique vers cet utilisateur. Il est donc capable de lire / écrire ces fichiers sans accès SSH.
Une autre bonne solution serait un référentiel. Par exemple, configurez un dépôt GIT et laissez l'utilisateur le cloner. Il peut effectuer ses modifications localement et vous envoyer un patch. Vous pouvez décider d'appliquer ou non ce patch, une restauration pour les patchs buggy est également très facile.

binfalse
la source
rbashest conçu pour faire exactement cela.
bahamat
Cette chose est appelée un shell restreint . Mais puisque Cell-o ne veut autoriser que les transferts de fichiers, ce n'est pas le bon outil.
Gilles 'SO- arrête d'être méchant'