#!/bin/sh mount -t proc proc /proc mount -t sysfs sysfs /sys rm /dev/null; mknod -m 0666 /dev/null c 1 3 rm /dev/zero; mknod -m 0666 /dev/zero c 1 5 ln -sf ssmtp /usr/sbin/sendmail mdev -s # /proc/cmdline parser (from Gentoo Wiki) cmdline() { local value value=" $(cat /proc/cmdline) " value="${value##* $1=}" value="${value%% *}" [ "$value" != "" ] && echo "$value" } # Get some command line options USER_LOGIN=$(cmdline adlin.login) USER_PKEY=$(cmdline adlin.key) USER_IP=$(cmdline adlin.ip) ROOT_PASSWORD=$(cmdline adlin.rootpasswd) [ -f /etc/shadow_ ] && mv /etc/shadow_ /etc/shadow [ -n "${USER_IP}" ] && echo "${USER_IP}" > /root/my_ip [ -n "${ROOT_PASSWORD}" ] && sed -i "/^root:/s@!@${ROOT_PASSWORD}@" /etc/shadow # Handle extra user from /etc/shadow sed -r 's/^([^:]+):.*$/\1/' /etc/shadow | while read u; do grep -q "^$u" /etc/passwd || { i=$(($(wc -l /etc/passwd | cut -d ' ' -f 1) + 988)) echo "$u:x:$i:$u" >> /etc/group echo "$u:x:$i:$i:new user:/home:/bin/ash" >> /etc/passwd } done # Define hostname hostname adlin-${USER_LOGIN} update-ca-certificates > /dev/null 2> /dev/null # Launch some TTYs for i in `seq 2 6` do while true do /usr/bin/setsid /sbin/agetty -l /sbin/fakelogin 38400 "tty${i}" linux done & done # Hide us! /bin/rm -f /init /linuxrc # Randomize time at boot /bin/date 0$((1 + $RANDOM % 9))0$((1 + $RANDOM % 9))0$((1 + $RANDOM % 9))$((0 + $RANDOM % 6))$((1 + $RANDOM % 9))$((70 + $RANDOM % 30)).$(($RANDOM % 6))$((1 + $RANDOM % 9)) > /dev/null /sbin/sysctl -w kernel.panic_on_warn=1 > /dev/null /sbin/sysctl -w net.ipv4.ip_default_ttl=4 > /dev/null # Launch some daemons #/usr/bin/setsid /usr/sbin/crond > /dev/null & /usr/bin/setsid /bin/shadow-up > /dev/null 2> /var/log/sup.log & # Prepare bonus 2 mkdir -p /mnt /bin/dd if=/dev/zero of=/dev/blk count=1 bs=10240000 > /dev/null 2> /dev/null cat < /dev/null 2> /dev/null n p 1 +5M w EOF LOOPDEV=$(losetup -f) losetup -P "${LOOPDEV}" /dev/blk > /dev/null 2> /dev/null mdev -s /sbin/mkfs.ext4 "${LOOPDEV}p1" > /dev/null 2> /dev/null mount "${LOOPDEV}p1" /mnt > /dev/null 2> /dev/null N1=$((29 - $RANDOM % 25)) N2=$((3 + $RANDOM % 25)) { printf %02d $N1 printf %02d $N2 echo -n ${USER_PKEY:$N1:$N2} | sha512sum | cut -d " " -f 1 } > /mnt/bonus2 sync rm /mnt/bonus2 sync umount /mnt # Launch requested init if grep init= /proc/cmdline > /dev/null 2> /dev/null then INIT=$(cmdline init) [ -z "${INIT}" ] while true do sleep $((10 + $RANDOM % 49)) beep -f 1000 -r 2 -n -r 5 -l 10 -n done & grep console=ttyS0 /proc/cmdline > /dev/null 2> /dev/null && /usr/bin/setsid sh -c "exec '${INIT}' /dev/ttyS0 2>&1" exec /usr/bin/setsid sh -c "reset; exec '${INIT}' /dev/tty1 2>&1" else grep console=ttyS0 /proc/cmdline > /dev/null 2> /dev/null && /usr/bin/setsid /sbin/agetty -l /sbin/fakelogin 38400 "ttyS0" linux while true do /usr/bin/setsid /sbin/agetty -l /sbin/fakelogin 38400 tty1 linux done fi