melamine logo # melamine **melamine** is a better file shredder it runs on linux (Ubuntu tested) for now
[Installation](#installation) • [Example](#example) • [Contributing](#contributing) • [License](#license)
## Installation Install using the below command lines to ensure dependencies are met for Ubuntu. `sudo` is currently required. ```bash sudo apt install --yes --no-install-recommends build-essential python3-dev libzfslinux-dev && \ sudo pip3 install Cython && \ git clone https://github.com/truenas/py-libzfs && pushd py-libzfs && \ ./configure --prefix=/usr && sudo make install && popd && \ git clone https://sillyhats.mips.uk/pdf/melamine && pushd melamine && \ sudo python3 -m pip install . ``` Verify the installation with `sudo melamine --help` or `sudo melamine -h` to see: ```bash usage: melamine [-h] [--recursive] [--yes] [--dryrun] [--exhaustive] [--ignoredir IGNOREDIR] [--logfile LOGFILE] [--quiet] [--verbose] paths [paths ...] Comprehensive DoD 5220.22-M-compliant file shredder for Linux. positional arguments: paths Specify any number of existing files or directories to be processed. options: -h, --help show this help message and exit --recursive, -r Process directories recursively. Default is false. --yes, -y Skip confirmation prompts. Default is false. --dryrun, -d Provide mock output without deleting anything. Default is false. --exhaustive, -e Exhaustively check local mounts for duplicate files by hash. Default is false. --ignoredir IGNOREDIR, -i IGNOREDIR Specify directories to be ignored during the process. This option can be used multiple times. --logfile LOGFILE, -o LOGFILE Specify a file to log all output (NOT IMPLEMENTED). --quiet, -q Silence all output (NOT IMPLEMENTED). --verbose, -v Provide extra output for debugging (NOT IMPLEMENTED). ``` ## Example melamine is not yet ready for production use. If you'd like to try it, generate dummy files below. Preferably, do this on a separate mount point than any essential files or in a virtual machine. Currently, only inode discovery and the beginnings of ext2/3 and zfs support exist. ```bash rm -rf /tmp/melamine && mkdir -p /tmp/melamine; rm -rf /tmp/melamine_hardlinks && mkdir -p /tmp/melamine_hardlinks; for i in $(seq 1 4); do dd if=/dev/urandom of=/tmp/melamine/test_$i bs=1 count=$(( RANDOM % 256 * 256 )); done; ln /tmp/melamine/test_1 /tmp/melamine_hardlinks/hardlink_1; ln /tmp/melamine/test_2 /tmp/melamine_hardlinks/hardlink_2; ``` You can then confirm that the two hardlink inodes match using `ls -li`. ```bash ls -li /tmp/melamine/test_*; ls -li /tmp/melamine_hardlinks/hardlink_*; ``` Then, run melamine with: ```bash melamine --recursive /tmp/melamine ``` ## Contributing If you would like to contribute to this project, feel free to submit a pull request or open an issue on GitHub. This tool was written as part of my coursework for CSC 842 - Security Tool Development at Dakota State University. Consequently, I may choose not to maintain this tool beyond the length of the course, but have selected a license that enables open contributions in any case. ## License This project is licensed under the MIT License. See the `LICENSE` file for details.