web-dev-qa-db-fra.com

Est-il possible d'empêcher SCP tout en permettant à SSH Access?

Utilisation des serveurs Solaris et Linux et OpenSSH, est-il possible d'empêcher les utilisateurs de copier des fichiers à l'aide de "SCP" tout en permettant l'accès au shell avec "ssh"?

Je réalise que "SSH $ $ Server" Fichier CAT "'' '' '' '' '' '' '' Type Les accès sont beaucoup plus difficiles à prévenir, mais je dois voir sur l'arrêt" SCP "pour commencer.

À défaut, existe-t-il un moyen de loger de manière fiable tout accès SCP sur le côté serveur via syslog?

13
Jason

Comme d'autres l'ont noté, vous ne pouvez pas bloquer SCP (Eh bien, vous pourriez: rm /usr/bin/scp, mais cela ne vous mène pas vraiment).

Le mieux que vous puissiez faire est de modifier la coquille des utilisateurs vers une coque restreinte (RBASH) et seulement pour exécuter certaines commandes.

N'oubliez pas que s'ils peuvent lire des fichiers, ils peuvent les copier/les coller de l'écran. Fichiers binaires? xxd/uuencode/mmenCode se déplace tous.

Je suggérerais également d'utiliser la comptabilité de processus pour vous aider à suivre l'activité.

8
MikeyB

Vous ne gagnerez rien en arrêtant "SCP" lorsque vous autorisez toujours des mécanismes supplémentaires d'additionnels de transfert de fichiers. Interdire le SCP mais permettant aux autres mécanismes de copie de fichiers est une méthode de mentir aux auditeurs. Les auditeurs demandent souvent à être menti. Habituellement, je vois des auditeurs travaillant avec des gestionnaires à faire de faux corrects, de sorte qu'ils puissent indiquer quelque chose comme "La commande de transfert de fichier SCP a été désactivée, de sorte que les fichiers ne puissent pas être copiés du serveur à l'aide du SCP".

Maintenant, un mécanisme de journalisation raisonnable serait bien. Peut-être que Auditd fonctionne enfin sur Linux. Peut-être que Solaris a finalement ajouté qu'un mécanisme ou une dtrace pourrait être utilisé en toute sécurité. Il est raisonnable de vouloir que le système d'exploitation se connecte à chaque fois qu'un fichier est accessible. Bien sûr, il n'y a pas de différence entre "lecture" et "copie". Mais cela peut satisfaire à un auditeur et donner une sécurité significative au système. Vos journaux pourraient être si bruyants que les données sont inutiles, ou même que vous êtes obligé de garder un sentier d'audit ridiculement court. (E.G. Vous ne pouvez pas vous connecter toutes les lectures () - et une application qui fait quelque chose de surprenant peut rendre la journalisation de chaque ouverture () une catastrophe).

6
carlito

Selon ce que SSH est nécessaire, vous pourrez peut-être atteindre cet objectif (pour les fichiers non triviaux) à l'aide d'IPTABLES pour terminer des sessions si la taille du paquet est plus grande, dites 1400 octets. Cela signifie que le SSH interactif fonctionnera principalement, mais aussi tôt que quelque chose tente d'envoyer un paquet de 1500 octets - comme SCP devrait pour un fichier plus grand que 1499 octets en supposant un MTU standard de 1500, il terminera la connexion.

Cela empêchera également l'attaque de "chat" que vous mentionnerez.

Malheureusement, cela signifie que vous pouvez avoir des problèmes d'édition de certains fichiers avec un éditeur de texte, si l'écran doit dessiner plus de 1400 caractères, ou si vous avez besoin de chat un fichier long ou de faire une liste de répertoires longue.

Dans le cas le plus simple, une commande de faire cela pourrait ressembler à quelque chose comme

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP

Nous pouvons rendre ce travail mieux en combinant les chèques de longueur de paquets avec IPT_Recent, de sorte que vous autorisiez un nombre limité de paquets plus gros que 1400 octets dans un délai défini (disons 8 paquets par 5 secondes) - cela permettrait aux paquets jusqu'à 12k à glisser A travers, mais peut vous donner l'interactivité dont vous aurez besoin pour éditer des fichiers, etc. Vous pouvez bien sûr modifier le nombre de paquets.

Cela pourrait ressembler à quelque chose comme

iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --set 
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
         -m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \
         -j REJECT --reject-with tcp-reset

Les exemples de règles ci-dessus protègent uniquement contre les téléchargements SCP tels que scp myfile.data remote.Host:~. Protéger en outre contre les téléchargements SCP tels que scp remote.Host:~/myfile.data /local/path, répétez les règles ci-dessus mais remplacez --dport avec --sport.

Un pirate informnérable peut contourner ces limitations en définissant un MTU de moins de 1400 sur sa machine (ou force MTU ou similaire). De plus, bien que vous ne puissiez pas limiter cela à certains utilisateurs, vous pouvez le limiter par IP en modifiant les lignes IPTABLES, le cas échéant !!

Bravo, David Go

5
David Go

N ° scp et ssh fonctionne sur les mêmes ports et utilisez le même protocole. Si vous ouvrez une session ssh, vous pouvez même partager votre connexion avec des appels SCP ultérieurs à l'aide des options telles que ControlMaster.

Si vous ne voulez pas que les gens copient des fichiers particuliers désactivés d'une machine, vous ne devez pas leur donner une sorte d'accès au shell à la machine.

1
Todd Gamblin

Je crois que vous pouvez désinstaller OpenSSH-Clients (ou équivalent) sur le serveur.

Je pense que le client SCP appelle SCP sur le serveur lors de la copie de données afin que vous vous débarrassez de SCP sur le serveur, vous devriez être bien.

$ scp bla server:/tmp/
...
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.utf8
debug1: Sending env LANG = en_US.utf8
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANGUAGE = en_US.utf8
debug1: Sending command: scp -v -t /tmp/
bash: scp: command not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype [email protected] reply 0
lost connection
0
Tomas

Bloquant le transfert de fichier sans suppression de nombreux utilitaires du système pour laisser la machine complètement inutile est impossible. Vous devriez vous débarrasser de tout ce qui est capable d'afficher le contenu du fichier à STDOUT, et tout ce qui est capable d'écrire son stdin à STDOUT et que vous avez supprimé toutes ces personnes, il ne reste plus que peu d'informations pour permettre l'accès au shell du tout.

Je vais donc me concentrer sur votre alternative de journalisation à la place:

Il existe un programme appelé "script" qui est inclus dans pratiquement toutes les distributions et qui devrait être facile à installer sur ceux où ce n'est pas le cas. C'est un enregistreur de session qui enregistre toutes les entrées et la sortie d'une coquille, éventuellement avec des données de synchronisation afin de pouvoir être rejouées et semblez simplement que vous regardiez sur l'épaule de l'utilisateur quand ils l'ont fait. (95% de toute façon, il boit de temps en temps la production lorsque des ncurses sont impliqués, mais pas très souvent.)

Sa page d'homme contient des instructions pour la configurer comme coquille de connexion du système. Assurez-vous que les journaux vont quelque part que l'utilisateur ne peut pas simplement les supprimer (l'attribut System FileSystem APPEND-UNIQUEMENT (réglable via CHATTR) peut être utile pour cela. Comme cela peut être ACLS ou Inotify Scripts)

Cela n'empêche toujours pas que les utilisateurs de copier des fichiers hors du système, mais il vous permet de passer en revue ce qui a été fait par quels utilisateurs et quand. Il n'est probablement pas impossible de contourner, mais le contournement se retrouvera presque certainement dans les bûches afin que vous stipiez au moins que quelqu'un ne soit pas bon, même s'ils parviennent à cacher exactement ce que c'était.

0
Perkins

Il existe un moyen d'utiliser "scponly" comme la coquille pour désactiver Interactive SSH et permettre à SCP, mais je ne suis au courant de quoi que ce soit existant qui fonctionne de manière inverse.

Vous pourrez peut-être explorer le piratage de la coquille scponly pour accomplir l'inverse.

0
Jehiah

Ce n'est pas possible en fait après un peu de google.

Découvrez cette discussion: http://www.mydatabasePort.com/forums/unix-admin/387261-how-restrict-ssh-utilisateurs-Block-scp-sftp.html

0
samoz