Comportement étrange du script d'ouverture de session Bash

Oct 06 2020

Je crée actuellement un pot de miel qui enregistrera toutes les entrées des utilisateurs une fois qu'ils se sont connectés avec succès via SSH.

Voici comment cela fonctionne: le adminshell par défaut de mon utilisateur de pot de miel est défini sur un script bash:

admin:x:1001:1001::/home/admin:/home/admin/HoneyPot/spawner.sh

Le spawner.shscript ira de l'avant et lancera un exceptscript et enregistrera la sortie en utilisant script.

#!/bin/bash
cd /home/admin/HoneyPot/template/

pwd
script -c "./script.exp" -t 2> timing.log -a output.session #start recording session, execute except script
echo "we should not get here"

Voici les premières lignes de script.exp:

#!/usr/bin/expect -f
#
# This Expect script was generated by autoexpect on Mon Oct  5 13:55:35 
# boilerplate comments and code:

set force_conservative 0  ;# set to 1 to force conservative mode even if
              ;# script wasn't run conservatively originally
if {$force_conservative} { set send_slow {1 .1} proc send {ignore arg} { sleep .1 exp_send -s -- $arg
    }
}

# start of my code

set timeout -1
spawn emulator #emulator is a simh emulator executable. not a shell script.
...
interact

Lorsque j'exécute le script ./template.shen adminutilisant bash, le script fonctionne parfaitement. Cependant, lorsque je me connecte en utilisant su, cela se produit:

austin@ubuntu:~$ su admin
Password: 
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
Script started, file is output.session
/home/admin/HoneyPot/template
...

Pourquoi mon script bash ne fonctionne-t-il pas avec le shell de l'utilisateur défini sur lui? Il n'y a pas d'appels récursifs dans mon script, et la scriptcommande devrait être bloquante!

Et juste au cas où quelqu'un serait inquiet, cette machine n'a pas de connectivité réseau sortante. Il ne peut recevoir que des connexions SSH. Oui, je sais qu'un utilisateur peut s'en sortir. Ceci est exécuté dans une VM.

Réponses

1 laktak Oct 06 2020 at 01:35

Je pense que vous utilisez un script sans shebang quelque part.

Voir cette réponse :

Si la fonction execl () échoue en raison d'une erreur équivalente à l'erreur [ENOEXEC] définie dans le volume Interfaces système de POSIX.1-2008, le shell exécutera une commande équivalente à l'invocation d'un shell avec le chemin résultant de la recherche comme premier opérande, avec tous les arguments restants passés au nouveau shell, sauf que la valeur de "$ 0" dans le nouveau shell peut être définie sur le nom de la commande. Si le fichier exécutable n'est pas un fichier texte, le shell peut contourner l'exécution de cette commande. Dans ce cas, il doit écrire un message d'erreur et renvoyer un état de sortie de 126.

dans votre spawner.shajout echo "$@"pour obtenir plus d'indices.

OK, donc la réponse est plus compliquée mais cela devrait aider. En plus, spawner.shajoutez ceci en haut:

if [[ $1 == -c ]]; then exec bash "$@"
fi