Bash 로그인 스크립트 이상한 동작

Bash 로그인 스크립트 이상한 동작

나는 현재 사용자가 SSH를 통해 성공적으로 로그인하면 모든 사용자 입력을 기록하는 허니팟을 만들고 있습니다.

작동 방식은 다음과 같습니다. 허니팟 사용자 admin의 기본 셸을 bash 스크립트로 설정했습니다.

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

스크립트 spawner.sh는 계속해서 except스크립트를 시작하고 로깅 출력을 사용합니다 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"

처음 몇 줄은 다음과 같습니다 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

./template.shadminas using 을 사용하여 스크립트를 실행 하면 bash스크립트가 정상적으로 실행됩니다. 그러나 login 을 사용하면 su다음과 같은 일이 발생합니다.

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
...

내 bash 스크립트가 설정된 사용자 셸에서 작동하지 않는 이유는 무엇입니까? 내 스크립트에는 재귀 호출이 없으며 script명령이 차단되어야 합니다!

누군가 우려하는 경우를 대비해 이 컴퓨터에서 나가는 네트워크 연결이 없습니다. SSH 연결만 허용할 수 있습니다. 예, 사용자가 이 문제를 해결할 수 있다는 것을 알고 있습니다. 이는 가상 머신에서 실행됩니다.

답변1

나는 당신이 shebang없이 스크립트를 사용하고 있다고 생각합니다.

바라보다이 답변:

execl() 함수가 POSIX.1-2008 시스템 인터페이스 볼륨에 정의된 [ENOEXEC]와 동일한 오류로 인해 실패하는 경우, 쉘은 검색 결과의 경로 이름을 첫 번째 피연산자로 사용하여 쉘을 호출하는 것과 동일한 명령을 실행해야 합니다. 나머지 인수는 새 셸로 전달되지만 새 셸의 "$0" 값을 명령 이름으로 설정할 수 있습니다. 실행 파일이 텍스트 파일이 아닌 경우 쉘은 이 명령 실행을 우회할 수 있습니다. 이 경우 오류 메시지를 작성하고 종료 상태 126을 반환해야 합니다.

spawner.sh추가 사항 에 대한 echo "$@"추가 정보를 얻으십시오 .

좋아요, 대답은 더 복잡하지만 이것이 도움이 될 것입니다. spawner.sh상단 에 다음을 추가하세요.

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

관련 정보