From e4fe3c3edd3ea20328d39fbfcffa2253be84cbd5 Mon Sep 17 00:00:00 2001 From: devttys0 Date: Tue, 22 Oct 2024 11:18:25 -0400 Subject: [PATCH] Fixed docker issues --- Dockerfile | 29 +++++++++++++++++++---------- src/main.rs | 14 ++++++++++++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index a83e671fd..60416e485 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,32 +1,41 @@ FROM ubuntu:24.04 +ARG BINWALK_INSTALL_DIR="/tmp/binwalk" +ARG DEFAULT_WORKING_DIR="/analysis" + WORKDIR /tmp -# Update apt and install git -RUN apt-get update && apt-get upgrade -y && apt-get install -y git +# Update apt +RUN apt-get update && apt-get upgrade -y -# Pull down latest Binwalk code -RUN git clone https://github.com/ReFirmLabs/binwalk.git +# Copy over the Binwalk build directory +RUN mkdir -p ${BINWALK_INSTALL_DIR} +COPY . ${BINWALK_INSTALL_DIR} # Allow pip to install packages system-wide RUN mkdir -p $HOME/.config/pip && echo "[global]" > $HOME/.config/pip/pip.conf && echo "break-system-packages = true" >> $HOME/.config/pip/pip.conf # Install all system dependencies -RUN /tmp/binwalk/dependencies/ubuntu.sh +RUN ${BINWALK_INSTALL_DIR}/dependencies/ubuntu.sh # Install Rust RUN curl https://sh.rustup.rs -sSf | sh -s -- -y # Build and install Binwalk -RUN cd /tmp/binwalk && /root/.cargo/bin/cargo build --release && cp ./target/release/binwalk /usr/local/bin/binwalk +RUN cd ${BINWALK_INSTALL_DIR} && /root/.cargo/bin/cargo build --release && cp ./target/release/binwalk /usr/local/bin/binwalk # Clean up binwalk build directory -RUN rm -rf /tmp/binwalk +RUN rm -rf ${BINWALK_INSTALL_DIR} -RUN useradd -m -u 1337 -s /sbin/nologin appuser +# Create the working directory +RUN mkdir -p ${DEFAULT_WORKING_DIR} && chmod 777 ${DEFAULT_WORKING_DIR} +WORKDIR ${DEFAULT_WORKING_DIR} -WORKDIR /home/appuser +# Run as the default ubuntu user +USER ubuntu -USER appuser +# Enable this environment variable to remove extractor top-level symlink, +# as the symlink target path in the docker environment will not match that of the host. +ENV BINWALK_RM_EXTRACTION_SYMLINK=1 ENTRYPOINT [ "binwalk" ] diff --git a/src/main.rs b/src/main.rs index d6cc06fa4..65db04e52 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,6 +26,10 @@ fn main() { // Number of seconds to wait before printing debug progress info const PROGRESS_INTERVAL: u64 = 30; + // If this env var is set during extraction, the Binwalk.base_target_file symlink will + // be deleted at the end of extraction. + const BINWALK_RM_SYMLINK: &str = "BINWALK_RM_EXTRACTION_SYMLINK"; + // Output directory for extracted files let mut output_directory: Option = None; @@ -213,6 +217,16 @@ fn main() { } } + // If BINWALK_RM_SYMLINK env var was set, delete the base_target_file symlink + if cliargs.extract && std::env::var(BINWALK_RM_SYMLINK).is_ok() { + if let Err(e) = std::fs::remove_file(&binwalker.base_target_file) { + error!( + "Request to remove extraction symlink file {} failed: {}", + binwalker.base_target_file, e + ); + } + } + // All done, show some basic statistics display::print_stats( cliargs.quiet,