Untuk mempermudah penyalinan file-file library yang akan digunakan pada lingkungan chroot, penulis menggunakan shell script berikut.
#!/bin/bash
#
################################################################################
# Shell Script untuk melakukan otomasi penyalinan file-file yang diperlukan #
# oleh sebuah binary/program. #
# #
# @author Rio Astamal <me@rioastamal.net> #
################################################################################
#
ACTION=$1
JAIL_FILE=$2
JAIL_ROOT=$3
LIST_FILES=
# cek apakah file ada
if [ ! -e $JAIL_FILE ]; then
echo "Error: file '${JAIL_FILE}' tidak ditemukan."
exit 2
fi
# cek apakah direktori target jail ada
if [ ! -d $JAIL_ROOT ]; then
echo "Error: direktori jail '${JAIL_ROOT}' tidak ditemukan."
fi
show_help() {
echo "Penggunaan: $0 [OPTIONS] [JAIL_FILE] [JAIL_ROOT]"
echo ""
echo "Dimana OPTIONS:"
echo " file - Mencetak daftar library."
echo " dir - Mencetak nama direktori dari daftar library."
echo " run - Melakukan penyalinan ke direktori JAIL_ROOT."
echo ""
echo "Contoh:"
echo "$0 dir /usr/bin/nginx /opt/jail"
echo ""
}
# Fungsi untuk mencetak daftar file library yang dibutuhkan oleh file binary
# yang ingin di-jail.
show_files() {
LIST_FILES=`ldd $JAIL_FILE | awk '{print $3}' | grep ^/`
LD_LINUX=`ldd $JAIL_FILE | grep ld-linux | awk '{print $1}'`
for f in $LIST_FILES
do
echo $f
done
echo $LD_LINUX
}
# Fungsi untuk mencetak nama direktori dari setiap file library
show_directories() {
LIST_FILES=`ldd $JAIL_FILE | awk '{print $3}' | grep ^/`
LD_LINUX=`ldd $JAIL_FILE | grep ld-linux | awk '{print $1}'`
for f in $LIST_FILES
do
dirname $f
done
dirname $LD_LINUX
}
if [ "$ACTION" == "file" ]; then
show_files
elif [ "$ACTION" == "dir" ]; then
show_directories
elif [ "$ACTION" == "run" ]; then
# buat direktori tujuan dulu sebelum melakukan copy file
for folder in `show_directories`
do
mkdir -p "${JAIL_ROOT}${folder}"
done
# copy setiap library
for f in `show_files`
do
TARGET="${JAIL_ROOT}${f}"
echo -n "Copying $f to ${TARGET}..."
cp $f "${JAIL_ROOT}${f}" 2>/dev/null
if [ $? -eq 0 ]; then
echo "done."
else
echo "failed."
fi
done
fi
Simpan dengan nama ldd-extractor.sh lalu beri atribut +x.
Contoh Penggunaan
Melihat daftar shared library dari program "ncat".
# ldd-extractor file /usr/bin/ncat /lib/i686/cmov/libssl.so.0.9.8 /lib/i686/cmov/libcrypto.so.0.9.8 /usr/lib/libpcap.so.0.8 /lib/tls/i686/cmov/libdl.so.2 /lib/tls/i686/cmov/libc.so.6 /lib/libz.so.1 /lib/ld-linux.so.2
Melakukan penyalinan ke jail direktori yang telah ditentukan.
# ldd-extractor run /usr/bin/ncat /opt/jail Copying /lib/i686/cmov/libssl.so.0.9.8 to /opt/jail/lib/i686/cmov/libssl.so.0.9.8...done. Copying /lib/i686/cmov/libcrypto.so.0.9.8 to /opt/jail/lib/i686/cmov/libcrypto.so.0.9.8...done. Copying /usr/lib/libpcap.so.0.8 to /opt/jail/usr/lib/libpcap.so.0.8...done. Copying /lib/tls/i686/cmov/libdl.so.2 to /opt/jail/lib/tls/i686/cmov/libdl.so.2...done. Copying /lib/tls/i686/cmov/libc.so.6 to /opt/jail/lib/tls/i686/cmov/libc.so.6...done. Copying /lib/libz.so.1 to /opt/jail/lib/libz.so.1...done. Copying /lib/ld-linux.so.2 to /opt/jail/lib/ld-linux.so.2...done.Referensi:
0 comments:
Post a Comment