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