Unlisted mirror of private melamine repo for CSC842 students
Find a file
2023-07-16 17:39:32 -07:00
melamine mvp 2023-07-16 17:34:02 -07:00
.flake8 MVP for testing 2023-07-16 09:30:36 -07:00
.gitignore Initial 2023-07-15 13:08:04 -07:00
.pre-commit-config.yaml Initial 2023-07-15 13:08:04 -07:00
LICENSE Initial 2023-07-15 13:08:04 -07:00
melamine.png Add logo, fix orphaned await 2023-07-16 15:19:57 -07:00
pyproject.toml Trying out aiopath 2023-07-16 12:59:30 -07:00
README.md Update README 2023-07-16 17:39:32 -07:00

melamine logo

melamine

melamine is a better file shredder

it runs on linux (Ubuntu tested) for now

InstallationExampleContributingLicense

Installation

Install using the below command lines to ensure dependencies are met for Ubuntu. sudo is currently required.

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:

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.

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;
melamine --recursive /tmp/melamine

You can then confirm that the two hardlink inodes match using ls -li.

ls -li /tmp/melamine/test_*;
ls -li /tmp/melamine_hardlinks/hardlink_*;

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.