From 5cd74a31b19bbe279a0dc5fb3c2e1dcde271759d Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sun, 25 Apr 2021 15:44:29 +0200 Subject: [PATCH] Collect libraries in array to prevent repeatedly copying the same files --- var/www/setup_chroot.sh | 60 ++++++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/var/www/setup_chroot.sh b/var/www/setup_chroot.sh index 1f56e8b..f59edf3 100755 --- a/var/www/setup_chroot.sh +++ b/var/www/setup_chroot.sh @@ -4,6 +4,9 @@ export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin" test "$1" != "" || (echo "Need path to chroot directory" && exit 1) +ALL_LIB_DIRECTORIES=() +ALL_LIB_FILES=() + ### functions function CHROOT_BINARY() { BINARY="$1" @@ -15,31 +18,39 @@ function CHROOT_BINARY() { if [ "$LIB_FILES" != "" ]; then for LIB_FILE in $LIB_FILES; do LIB_DIRECTORY="$(dirname $LIB_FILE)" - mkdir -pm 0555 $CHROOT_DIRECTORY$LIB_DIRECTORY - cp $LIB_FILE $CHROOT_DIRECTORY$LIB_FILE - chmod 0555 $CHROOT_DIRECTORY$LIB_FILE + if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LIB_DIRECTORY" ]]; then + ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LIB_DIRECTORY") + fi + if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LIB_FILE" ]]; then + ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LIB_FILE") + fi done fi if [ "$LDD_FILES" != "" ]; then for LDD_FILE in $LDD_FILES; do LDD_DIRECTORY="$(dirname $LDD_FILE)" - mkdir -pm 0555 $CHROOT_DIRECTORY${LDD_DIRECTORY} - cp $LDD_FILE $CHROOT_DIRECTORY$LDD_FILE - chmod 0555 $CHROOT_DIRECTORY$LDD_FILE + if [[ ! "${ALL_LIB_DIRECTORIES[@]}" =~ "$LDD_DIRECTORY" ]]; then + ALL_LIB_DIRECTORIES=(${ALL_LIB_DIRECTORIES[@]} "$LDD_DIRECTORY") + fi + if [[ ! "${ALL_LIB_FILES[@]}" =~ "$LDD_DIRECTORY" ]]; then + ALL_LIB_FILES=(${ALL_LIB_FILES[@]} "$LDD_FILE") + fi done fi - cp $BINARY $CHROOT_DIRECTORY/$BINARY - chmod 0555 $CHROOT_DIRECTORY/$BINARY + BINARY_DIRECTORY="$(dirname $BINARY)" + mkdir -pm 0555 $CHROOT_DIRECTORY$BINARY_DIRECTORY + cp $BINARY $CHROOT_DIRECTORY$BINARY + chmod 0555 $CHROOT_DIRECTORY$BINARY } -function CHROOT_FILE() { - cp $1 $CHROOT_DIRECTORY/$1 -} - -function CHROOT_DIRECTORY() { - mkdir -pm 0555 $CHROOT_DIRECTORY/$1 - rm -rf $CHROOT_DIRECTORY/$1/ > /dev/null 2>&1 - cp -Rp $1 $CHROOT_DIRECTORY/$1 +function CHROOT_LIBRARIES() { + for DIRECTORY in ${ALL_LIB_DIRECTORIES[@]}; do + mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY + done + for FILE in ${ALL_LIB_FILES[@]}; do + cp $FILE $CHROOT_DIRECTORY$FILE + chmod 0555 $CHROOT_DIRECTORY$FILE + done } ### variables @@ -63,6 +74,13 @@ CHROOT_DIRECTORY_STRUCTURE=( '/var/run' '/var/run/mysqld' ) +CHROOT_DIRECTORY_TO_CLEAN=( + '/bin' + '/lib' + '/usr/bin' + '/usr/lib' + '/usr/sbin' +) BINARIES_GENERAL=( '/bin/bash' '/bin/bzip2' @@ -250,6 +268,7 @@ test "$CHROOT_DIRECTORY" != "" if [ "$2" != "" ]; then CHROOT_BINARY $2 + CHROOT_LIBRARIES echo "copied extra binary $2"; exit 0; fi @@ -258,6 +277,9 @@ fi mkdir -p $CHROOT_DIRECTORY chown root:www-data $CHROOT_DIRECTORY chmod 550 $CHROOT_DIRECTORY +for DIRECTORY in ${CHROOT_DIRECTORY_TO_CLEAN[@]}; do + rm -rf $CHROOT_DIRECTORY$DIRECTORY +done for DIRECTORY in ${CHROOT_DIRECTORY_STRUCTURE[@]}; do mkdir -pm 0555 $CHROOT_DIRECTORY$DIRECTORY done @@ -276,14 +298,15 @@ test -e $CHROOT_DIRECTORY/dev/random || mknod -m 644 $CHROOT_DIRECTORY/dev/ra test -e $CHROOT_DIRECTORY/dev/urandom || mknod -m 644 $CHROOT_DIRECTORY/dev/urandom c 1 9 # copy general directories for DIRECTORY in ${DIRECTORIES_GENERAL[@]}; do - CHROOT_DIRECTORY $DIRECTORY + rm -rf $CHROOT_DIRECTORY$DIRECTORY + cp -Rp $DIRECTORY $CHROOT_DIRECTORY$DIRECTORY done echo "export HOME=/" > $CHROOT_DIRECTORY/etc/profile.d/hosting.sh echo "export HISTFILE=/.bash_history" >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh echo 'export PATH="$PATH:/.composer/vendor/bin"' >> $CHROOT_DIRECTORY/etc/profile.d/hosting.sh # copy general files for FILE in ${FILES_GENERAL[@]}; do - CHROOT_FILE $FILE + cp $FILE $CHROOT_DIRECTORY$FILE done ### copy shared libraries and binaries # general @@ -302,4 +325,5 @@ done for BINARY in /usr/lib/php/*/*.so; do CHROOT_BINARY $BINARY done +CHROOT_LIBRARIES ln -f $CHROOT_DIRECTORY/usr/bin/php8.0 $CHROOT_DIRECTORY/usr/bin/php