s243a

ruf-puppy4-flask.sh (attackpup on GrovyPup32)

Mar 5th, 2021 (edited)
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 14.88 KB | None | 0 0
  1. #!/bin/sh
  2. #ROUTER_IP=192.168.100.1
  3. # Rufwoof Jan 2021 (updated May 2019 version). Comments at end
  4. set -x
  5. [[ "$-" = *"x"* ]] && TRACE=yes
  6. WM=jwm
  7. cd "$(realpath "${0%/*}")" #added by s243a (4 lines)
  8. CWD="$(realpath .)" #"$PWD"
  9. SFS_NAME="$(ls -1 ../puppy_*.sfs | head -n 1 | sed -r 's#^[.][.]/##g' | sed -r 's#[.]sfs##g')"
  10. Parent_WD="$(realpath "$CWD/..")"
  11. SFS_PATH="$Parent_WD/$SFS_NAME".sfs #End Adds by s243a
  12.  
  13.  
  14.  
  15. xterm & # added so have at least one window I can alt-tab to out of the container
  16. disown
  17.  
  18. #[ ! -d /mnt/sda4/shared ] && mkdir /mnt/sda4/shared # as a shared folder
  19. SHARED_LOC="$CWD"/shared #For a more portable container script add shared folder relative to script path.
  20.  
  21.  
  22. #Uncomment the following to use a shared folder:
  23. #SHARED="$SHARED_LOC"
  24.  
  25. #CHANGES_LOC=/mnt/sda4/changes        # Non pre-existing ext fs work folder
  26. CHANGES_LOC="$CWD"/container #For a more portable container script add changes folder relative to script path.
  27.  
  28. #MAIN_SFS=/mnt/sda1/FATDOG811-FINAL/fd64.sfs # Where the main sfs is located
  29. MAIN_SFS="$SFS_PATH" #s243a: Replaces above line
  30.  
  31. # Xephyr parameters
  32.    XP="-fullscreen -title container -name Xephyr2 -dpi 144 -nolisten tcp"
  33. #XEPHYR="-fullscreen -name Xephyr2 -dpi 144 -nolisten tcp"  
  34. XEPHYR="$XP"
  35.  
  36. #MOUNTS="--mount=bind:/dev/snd:/dev/snd \
  37. #        --mount=bind:/dev/mixer:/dev/mixer"
  38.        
  39. MOUNTS="--mount=bind:/dev/snd:/dev/snd"        
  40.        
  41. [ ! -z "${SHARED}" ] && MOUNTS="$MOUNTS -mount=bind:${SHARED}:/home/shared"        
  42.  
  43. CAPS="--caps=all,-sys_admin,-sys_boot,-sys_chroot,-sys_ptrace,-sys_time,\
  44. -sys_tty_config,-chown,-kill,-dac_override,-dac_read_search,\
  45. -fowner,-setfcap,-setpcap,-net_admin,-mknod,-sys_module,\
  46. -sys_nice,-sys_resource"
  47. #PF="${PF} --chroot=${CHANGES_LOC}/top"  
  48. PFLASK="--keepenv --no-ipcns --no-netns ${MOUNTS} ${CAPS} \
  49.        --chroot=${CHANGES_LOC}/top"
  50. unset PsfsSD
  51. unset ZDRV_PATH        
  52. declare -a options="$(getopt -o b:: --long browser-cmd::,browser-command,pup_sfs-subdir:,zdrv:: -- "$@")"
  53. eval set --"$options"
  54. while [ $# -gt 0 ]; do
  55.   case "$1" in
  56.   -b|--browser-cmd|--browser-command)
  57.     if [ $# -gt 1 ] && [[ ! $2 = 1* ]]; then
  58.       BROWSER_CMD="$2"
  59.     else
  60.       BROWSER_CMD=""
  61.     fi
  62.     ;;
  63.   --zdrv)
  64.     if [ $# -gt 1 ] && [[ ! "$2" = --* ]] && [ ! -z "$2" ]; then
  65.       ZDRV_PATH="$2"
  66.       shift 2
  67.     else
  68.       ZDRV_PATH=""
  69.       shift 1
  70.     fi; ;;
  71.   --pup_sfs-subdir)
  72.     PsfsSD="$2"
  73.     shift 2
  74.     ;;
  75.   --)
  76.     shift
  77.     break
  78.     ;;
  79.   *)
  80.     shift
  81.     ;;
  82.   esac
  83. done
  84.  
  85. if [ ! ${ZDRV_NAME+x} ]; then
  86.   ZDRV_NAME="$(ls -1 ../zdrv_*.sfs 2>/dev/null | head -n 1 | sed -r 's#^[.][.]/##g' | sed -r 's#[.]sfs##g')"
  87.   [ ! -z "$ZDRV_NAME" ] && ZDRV_PATH="$Parent_WD/$ZDRV_NAME".sfs
  88. fi
  89. if [ -z ${BROWSER_CMD+x} ]; then
  90.  case "${PsfsSD}" in
  91.  /cont)
  92.     BROWSER_CMD=/opt/Ungoogled_Chromium-portable/chromium/chromium-pup-nosb
  93.     ;;
  94.  *)
  95.     BROWSER_CMD=/opt/Seamonkey-portable64/LAUNCH
  96.     ;;
  97.  esac
  98. fi
  99. function umountall(){
  100.   set -x
  101.   read -p "Entering umount all. Press enter to continue"
  102.   set +x
  103.   if [ ! -z "$PID" ]; then
  104.     kill "$PID"
  105.   else
  106.     killall Xephyr
  107.   fi
  108.   cd ${CHANGES_LOC}
  109.   #umount top sfs
  110.   umount -l top/dev/shm
  111.   umount -l top/dev/pts
  112.   umount -l top/dev
  113.   umount -l top
  114.   [ ! -z "${sfs_MP_o}" ] && umount -l "${sfs_MP_o}"  
  115.   umount -l sfs
  116.   umount -l zdrv
  117.   rm -rf changes
  118.   rmdir top sfs zdrv container.log
  119.   [ ! -z "${sfs_MP_o}" ] && rmdir "${sfs_MP_o}"
  120.   [ -d "$SHARED/flags" ] && [ ! -z "$HOSTGRAB" ] && kill $HOSTGRAB
  121.   rm /tmp/container.run
  122.   pkill -P $$ #Warning this will kill xterm.
  123. }
  124.  
  125. # Avoid double click 2 instances
  126. N=`date +%s` # Seconds since January 1970
  127. if [ -f /tmp/container.run ];then
  128.         L=`cat /tmp/container.run`
  129.         D=`expr $N - $L`
  130.         if [ $D -lt 2 ];then
  131.             exit # quick 2 launches (doubled clicked ignore second click)
  132.         fi
  133. fi
  134.  
  135. trap 'umountall' 1
  136.  
  137.  
  138.  
  139. echo $N >/tmp/container.run
  140.  
  141. # Create a separate X instance so isolated from the main real root X
  142. T=`ps -ef | grep Xephyr2 | wc -l`
  143. if [ $T -ne 2 ];then
  144.         Xephyr :2 ${XP} &
  145. else
  146.         exit # Xephyr2 already running
  147. fi
  148.  
  149. if [ ! -z "${ROUTER_IP}" ]; then
  150.   iptables -A INPUT -s ${ROUTER_IP} -j DROP     # Drop access to router admin
  151. fi
  152.  
  153. # Prepare and launch 'container' and shared folder
  154.  
  155. if [ ! -z "$SHARED" ]; then
  156.   [ ! -d $SHARED ] && mkdir $SHARED
  157.   [ ! -d ${SHARED}/flags ] && mkdir ${SHARED}/flags
  158. fi
  159.  
  160. # Create a changes folder, sfs mount point for main.sfs and top layer
  161. # folders and aufs mount to combine changes and sfs folders -> top
  162. mkdir -p "${CHANGES_LOC}"
  163. cd "${CHANGES_LOC}"
  164. # Check for possible hangover - such as if restarted X and clean out if so
  165. if [ -d top ] || [ -d sfs ] || [ -d changes ]; then
  166.         umount top sfs sfs.*
  167.         rm -rf changes
  168.         rmdir top sfs sfs.*
  169. fi
  170. mkdir top sfs changes
  171.  
  172. #s243a: added append_mnt_id_awk (bellow). See: https://forum.puppylinux.com/viewtopic.php?f=136&t=1932
  173. append_mnt_id_awk='
  174. function get_mnt_id(mnt_pt,loop){
  175.  if (length(mnt_pt) > 0 && length(loop)>0){
  176.    cmd="cat /proc/self/mountinfo | sort | grep '" loop "' | grep " mnt_pt " | head -n 1"
  177.  } else if (length(mnt_pt) > 0){
  178.    cmd="cat /proc/self/mountinfo | sort | grep '" mnt_pt "' | head -n 1"
  179.  } else if (length(loop)>0){
  180.    cmd="cat /proc/self/mountinfo | sort | grep '" loop "' | head -n 1"
  181.  }
  182.  while ((cmd | getline )){
  183.    mnt_id=$1
  184.    break  
  185.  }
  186.  close(cmd)
  187.  return mnt_id
  188. }
  189. {
  190.  mnt_pt=$1
  191.  loop=$2
  192.  mnt_id=get_mnt_id(mnt_pt,loop)
  193.  print mnt_id "|" mnt_pt "|" loop
  194. }'
  195. loop=$(losetup -a | grep  "${MAIN_SFS}"  | sed "s/:.*$//" )
  196. if [ ! -z "$loop" ]; then #
  197.   sfs_MP="$(findmnt -o TARGET,SOURCE -D -n | grep $loop\$ | awk "$append_mnt_id_awk" | sort -t '|' -k1 | cut -d'|' -f2 | head -n 1)"
  198. else
  199.   sfs_MP="${CHANGES_LOC}"/sfs
  200.   mount -r -t squashfs ${MAIN_SFS} "$sfs_MP"
  201. fi
  202. if [ ! -z "${PsfsSD}" ]; then
  203.   sfs_MP_o="$sfs_MP"
  204.   PsfsSD=/${PsfsSD#/}
  205.   sfs_MP=$(mktemp -d -p "${CHANGES_LOC}" sfs.XXXXXXX)
  206.   mount --bind ${sfs_MP_o}${PsfsSD} "$sfs_MP"
  207. fi
  208. BRANCHES=changes:"$sfs_MP"
  209.  
  210. if [ ! -z "$ZDRV_PATH" ]; then
  211.   loop=$(losetup -a | grep  "${ZDRV_PATH}"  | sed "s/:.*$//" )
  212.   if [ ! -z "$loop" ]; then #
  213.     zdrv_MP="$(findmnt -o TARGET,SOURCE -D -n | grep $loop\$ | awk "$append_mnt_id_awk" | sort -t '|' -k1 | cut -d'|' -f2 | head -n 1)"
  214.   else
  215.     zdrv_MP="${CHANGES_LOC}"/zdrv
  216.     mkdir -p "${CHANGES_LOC}"/zdrv
  217.     mount -r -t squashfs "${ZDRV_PATH}" "$zdrv_MP"
  218.   fi
  219.   BRANCHES="$BRANCHES":"$zdrv_MP"
  220. fi
  221.  
  222. cd ${CHANGES_LOC}
  223. mount -t aufs -o br="$BRANCHES" aufs top
  224. cp /var/lib/dbus/machine-id top/var/lib/dbus/machine-id
  225. cp /etc/resolv.conf top/etc/resolv.conf
  226. ln -s top/var/lib/dbus/machine-id top/etc/machine-id
  227.  
  228. #http://www.linuxfromscratch.org/lfs/view/6.1/chapter06/devices.html
  229. #mount -n -t tmpfs none top/dev
  230. #mknod -m 622 top/dev/console c 5 1
  231. #mknod -m 666 top/dev/null c 1 3
  232. #mknod -m 666 top/dev/zero c 1 5
  233. #mknod -m 666 top/dev/ptmx c 5 2
  234. #mknod -m 666 top/dev/tty c 5 0
  235. #mknod -m 444 top/dev/random c 1 8
  236. #mknod -m 444 top/dev/urandom c 1 9
  237. #chown root:tty top/dev/{console,ptmx,tty}
  238. #ln -s top/proc/self/fd /dev/fd
  239. #ln -s top/proc/self/fd/0 /dev/stdin
  240. #ln -s top/proc/self/fd/1 /dev/stdout
  241. #ln -s top/proc/self/fd/2 /dev/stderr
  242. #ln -s top/proc/kcore /dev/core
  243. #mkdir top/dev/pts
  244. #mkdir top/dev/shm
  245. #mount -n -t devpts -o gid=4,mode=620 none /dev/pts
  246. #mount -n -t tmpfs none /dev/shm
  247.  
  248.  
  249.  
  250. #echo >$SHARED/flags/host-grab
  251.  
  252. [ -d "$SHARED/flags" ] && echo >$SHARED/flags/host-grab
  253. if [ -d "$SHARED/flags" ]; then #TODO add more conditions to execute this code.  
  254.   cat <<EOF >top/tmp/hostgrab
  255.   #!/bin/bash
  256.   xsetroot -bg \#ff0000 -mod 5 5
  257.   while inotifywait -e modify /home/shared/flags; do
  258.     C=\$(tail -1 /home/shared/flags/host-grab | grep release)
  259.     if [ ! -z "\${C}" ]; then
  260.         xsetroot -bg \#0000ff -mod 5 5
  261.     else
  262.         xsetroot -bg \#ff0000 -mod 5 5
  263.     fi
  264.   done
  265. EOF
  266. chmod +x top/tmp/hostgrab
  267. fi
  268.  
  269. # # create a script to run inside the chroot (i.e. must be a script, not a bin)
  270.  
  271. CMD_FP=top"$BROWSER_CMD"
  272.  
  273. if [ ! -f "$CHROOT_FOLDER/opt/Ungoogled_Chromium-portable/chromium/chromium-pup-nosb" ] && \
  274.    [ -f "$CHROOT_FOLDER/opt/Ungoogled_Chromium-portable/chromium/chromium-pup" ] ; then
  275.   (cd "$CHROOT_FOLDER/opt/Ungoogled_Chromium-portable/chromium/"; cp -a  chromium-pup chromium-pup-nosb;
  276.    cat chromium-pup | sed -rn \
  277. '/run-as-spot "$HERE\/chrome"/ {s#^(.*)$#"$HERE/chrome" --no-sandbox --user-data-dir=$HERE/PROFILE --disable-infobars "$@"#g;p}
  278. /run-as-spot "$HERE\/chrome"/! {p}' > chromium-pup-nosb )
  279. fi
  280.  
  281. # s243a: puppy doesn't have lxqt-panel
  282. # echo "lxqt-panel &" >>top/init
  283. # echo "openbox" >>top/init
  284. case "$WM" in
  285. jwm)
  286. echo '
  287. #!/bin/sh
  288. export DISPLAY=:2
  289. . /etc/DISTRO_SPECS
  290. if [ "$DISTRO_ARCHDIR" ] ; then
  291.     ARCHDIR="/$DISTRO_ARCHDIR"
  292. fi
  293. ldconfig
  294. iconvconfig
  295. #update-pango-querymodules
  296. #Failed to create file /usr/lib/i86/-linux-gnu/pango/1.8.0/modules.cache.8P0KX0 No such file or directory
  297. gdk-pixbuf-query-loaders --update-cache
  298. update-mime-database -V /usr/share/mime/
  299. #status_func $?
  300. UPDATE_MIME_DATABASE_DONE=1
  301.  
  302. source /etc/profile
  303. fixmenus #probably not necessary
  304. keymap-set --update
  305. userresources=$HOME/.Xresources
  306. usermodmap=$HOME/.Xmodmap
  307. sysresources=/usr/lib/X11/xinit/Xresources
  308. sysmodmap=/usr/lib/X11/xinit/.Xmodmap
  309.  
  310. # merge in defaults and keymaps
  311.  
  312. if [ -f $sysresources ]; then
  313.    xrdb -merge -nocpp $sysresources
  314. fi
  315.  
  316. if [ -f $sysmodmap ]; then
  317.    xmodmap $sysmodmap
  318. fi
  319.  
  320. if [ -f $userresources ]; then
  321.    xrdb -merge -nocpp $userresources
  322. fi
  323.  
  324. if [ -f $usermodmap ]; then
  325.    xmodmap $usermodmap
  326. fi
  327. setxkbmap -option keypad:pointerkeys
  328. #DISPLAY=:2 xterm
  329. /strip_jwm.sh
  330. DISPLAY=:2 jwm &
  331. DISPLAY=:2 roxfiler &
  332. '"$(if [ ! -z "$BROWSER_CMD" ]; then
  333.  echo "DISPLAY=:2 xterm -e $BROWSER_CMD"
  334.   fi )"'
  335. ' >top/init
  336. echo '
  337. #!/bin/sh
  338. source /etc/profile
  339. export PATH="$PATH:/usr/local/bin/"
  340. ldconfig
  341. #gdk-pixbuf-query-loaders --update-cache
  342. /usr/bin/gtk-update-icon-cache -f /usr/share/icons/hicolor/
  343. DEFAULT_DESK_ICONS="JQ8flat"
  344. #[ $NEWPVERSION -ge 500 ] && DEFAULT_DESK_ICONS="JQ8flat"
  345. [ ! -d /usr/local/lib/X11/themes/JQ8flat ] && DEFAULT_DESK_ICONS="Stardust"
  346. [ -f /etc/desktop_icon_theme ] && DEFAULT_DESK_ICONS="`cat /etc/desktop_icon_theme`" #w477
  347. /usr/sbin/icon_switcher_cli $DEFAULT_DESK_ICONS
  348. fixmenus #probably not necessary
  349. DISPLAY=:2 rox -n &
  350. /strip_jwm.sh
  351. DISPLAY=:2 jwm &
  352. PID=$!
  353. '"#$(if [ ! -z "$BROWSER_CMD" ]; then
  354.  echo "DISPLAY=:2 xterm -e $BROWSER_CMD"
  355.   fi )"'
  356. wait "$PID"
  357. ' >top/init_basic
  358. ;;
  359. cwm)
  360. cat <<EOF >top/init
  361. #!/bin/sh
  362. $(if [ -d "$SHARED/flags" ]; then
  363. echo '/tmp/hostgrab &
  364. /usr/bin/help &'
  365. fi )
  366. cwm -c /root/.cwmrc
  367. EOF
  368. cat <<EOF >top/usr/bin/help
  369. #!/bin/sh
  370. message() {
  371.     Xdialog --title Information --msgbox "\$1" 0 0
  372. }
  373. M="This is a Xephyr X session window where cwm is the window manager.\n"
  374. M="\${M}cwm is great for laptops (nearly all OpenBSD developer use cwm) and is relatively easy to learn.\n"
  375. M="\${M}Whilst you run as 'root' within Xephyr, root is actually a highly restricted userid that is running\n"
  376. M="\${M}in a contained environment, as such some programs may not run as expected.\n"
  377. M="\${M}\nLeft mouse press on desktop shows windows menu, right mouse press for applications menu\n"
  378. M="\${M}(a gap is left around the screen edges so the desktop is still accessible even if a window is maximised)\n\n"
  379. M="\${M}Ctrl Alt Enter : terminal. Alt m : toggles maximise. Ctrl Alt x : close window. Alt ? : Open exec launcher\n"
  380. M="\${M}\nCtrl Shift : toggles mouse/keyboard focus (desktop changes between red and blue)\n"
  381. M="\${M}Alt Tab : if desktop is red - steps between main session windows\n"
  382. M="\${M}OR if desktop is blue - steps between windows within the Xephyr container\n"
  383. M="\${M}\nWHEN THE DESKTOP IS BLUE (mouse/keyboard locked into Xephyr) ...\n"
  384. M="\${M}Alt middle mouse drag: resizes window. Alt left mouse drag : moves window\n"
  385. M="\${M}\nWHEN THE DESKTOP IS RED (mouse/keyboard unlocked from Xephyr) ...\n"
  386. M="\${M}you can use usual main system controls such as Alt-F1 for menu, Alt-F4 to close the Xephyr ...etc.\n"
  387. M="\${M}\nRevisit this list again at any time by running 'help', or search online for the cwm manual"
  388. message "\${M}"
  389. EOF
  390. chmod +x top/usr/bin/help
  391. ;;
  392. esac
  393.  
  394. #for a_autostart in dunst.desktop firewallstatus.desktop flsynclient.desktop freememapplet.desktop netmon_wce.desktop powerapplet.desktop retrovol.desktop; do
  395. #  mv top/root/.config/autostart/"$a_autostart" top/root/.config/autostart/"$a_autostart"-disable
  396. #done
  397. cat << "EOF" >top/strip_jwm.sh
  398. #!bin/sh
  399. cat /root/.jwmrc | sed -nr '$! {H};$ {H;x;s#(<StartupCommand>)(.*)(</StartupCommand>)##g;p}' > /root/.jwmrc-new
  400. mv /root/.jwmrc-new /root/.jwmrc
  401.  
  402. cat /root/.jwmrc-tray | sed -nr '/.*xload*./! {p}' > /root/.jwmrc-tray-new
  403. mv /root/.jwmrc-tray-new /root/.jwmrc-tray
  404. EOF
  405. chmod +x top/strip_jwm.sh
  406.  
  407. chmod +x top/init
  408. chmod +x top/init_basic
  409. # The big Xephyr capabilities dropped chroot switch
  410. #DISPLAY=:2 empty  -L container.log -f unshare -m pflask ${PFLASK} -- /init
  411. #DISPLAY=:2 empty -L file.log -f unshare -m pflask ${PFLASK} -- /init_basic
  412.  
  413. DISPLAY=:2 empty -L file.log -f unshare -m pflask ${PFLASK} -- /init_basic
  414. PID=$!
  415.  
  416. [ "$TRACE" = yes ] && set -x
  417. if [ -d "$SHARED/flags" ]; then
  418.   function _hostgrabstate() {
  419.  
  420.     local WID=""
  421.  
  422.     while [ -z "${WID}" ]; do
  423.         WID=$(wmctrl -lp | grep Xephyr | cut -d ' ' -f 1)
  424.         sleep 1
  425.     done
  426.     sleep 2
  427.     xprop -id ${WID} -spy WM_NAME >>$SHARED/flags/host-grab
  428.   }
  429.   _hostgrabstate &
  430.   HOSTGRAB=$!
  431. fi
  432.  
  433. #DISPLAY=:2 pflask ${PF} -- /init
  434. wait $PID # above backgrounds, so we wait until that ends
  435.  
  436. # Clean up
  437. set -x
  438.  
  439. umountall
  440. #rmdir top sfs
  441.  
  442.  
  443. ############################################################################
  444. # FOR FATDOG 811 ... (Draft Modifications by s243a for other platforms)
  445. #
  446. # Aufs mounts changes (initial empty rw folder), main sfs, that combined
  447. # is visible/accessed via folder 'top', that we chroot into
  448. #
  449. # chroot with chroot capability dropped (to prevent chroot out of the chroot)
  450. # using another X session (Xephyr) to isolate it from the main X session.
  451. # We chroot using pflask as that makes things easier into the top folder
  452. # applying further restrictions. We use the main sfs as our base for the
  453. # chroot, so very low overheads.
  454. #
  455. # alt-F4    closes the Xephyr container (if not then ctrl-shift to unfocus
  456. #           mouse/keyboard.
  457. # alt Tab   to step to another window in main system, but if use
  458. #           xdotool keydown alt key Tab;xdotool keyup alt .... it doesn't
  459. #           work (as intended i.e. it's locked into the "container").
  460. # seamonkey from menu doesn't work, run seamonkey from within urxvt
  461. # We use DISPLAY :2 for the Xephyr server
  462. #
  463. # Requires empty, pflask and a ext filesystem to create/work within
  464. #
  465. # I use fatdog multi-session save type frugal boot, and periodically I've
  466. # re-merged the save files into fd64.sfs so my fd64.sfs isn't the standard
  467. # version (merging changes and not copying fd64.sfs to ram helps keep ram
  468. # usage low).
  469. ############################################################################
  470.  
Add Comment
Please, Sign In to add comment