$ shellfirm
Protection Coverage

Filesystem

Protection patterns for filesystem operations including rm, chmod, mkfs, and dd

shellfirm provides two groups of filesystem checks: fs (standard) for clearly dangerous operations and fs-strict for broader coverage.

Standard filesystem checks (fs)

Recursive delete

IDfs:recursively_delete
SeverityCritical
Patternrm with flags like -rf, -Rf, -fr, --force targeting *, ., or /
FilterPathExists -- only fires if the target path exists on disk
Alternativetrash <path> -- moves to trash instead of permanent deletion
Blast radiusFile count + total size at target path
# Triggers
rm -rf /
rm -rf .
rm -Rf *

# Does not trigger (path doesn't exist)
rm -rf /nonexistent/path

Move to /dev/null

IDfs:move_to_dev_null
SeverityCritical
FilterPathExists
# Triggers
mv important-file.txt /dev/null
mv --force data.db /dev/null

Flush file content

IDfs:flush_file_content
SeverityHigh
FilterPathExists

Detects the > file redirect pattern that empties a file.

Recursive chmod

IDfs:recursively_chmod
SeverityCritical
Blast radiusCounts files affected by recursive permission change
# Triggers
chmod -R 777 /
chmod --recursive 755 *

Rsync with delete

IDfs:rsync_delete
SeverityHigh
FiltersNotContains --dry-run, NotContains -n
Alternativersync --dry-run --delete ... -- preview what would be deleted first
# Triggers
rsync -avz --delete /src/ /dest/

# Does NOT trigger
rsync --dry-run --delete /src/ /dest/
rsync -n --delete /src/ /dest/

Recursive chown

IDfs:recursively_chown
SeverityCritical
# Triggers
chown -R root:root /
chown --recursive user:group *

Shred (irrecoverable delete)

IDfs:shred
SeverityHigh
Alternativerm <file> -- regular rm only unlinks the file, data may be recoverable
# Triggers
shred secret.txt
shred -vfz credentials.key

Truncate to zero

IDfs:truncate_zero
SeverityHigh
# Triggers
truncate -s 0 file.txt
truncate -s0 important.log

Find with -delete

IDfs:delete_find_files
SeverityCritical
Alternativefind <path> -name '<pattern>' -print -- preview what would be deleted first
Blast radiusCounts files under the search path
# Triggers
find . -delete
find /var/log -name "*.log" -delete

Block device writes (dd)

IDfs:dd_block_device
SeverityCritical
# Triggers
dd if=/dev/zero of=/dev/sda
dd if=image.iso of=/dev/mmcblk0

Filesystem formatting (mkfs)

IDfs:mkfs_format
SeverityCritical
# Triggers
mkfs.ext4 /dev/sda1
mkfs -t xfs /dev/sdb
mkfs.btrfs /dev/mmcblk0p1

Disk partition tools

IDToolSeverity
fs:parted_disk_modifypartedCritical
fs:fdisk_disk_modifyfdiskCritical
fs:sfdisk_disk_modifysfdiskCritical
fs:gdisk_disk_modifygdisk (GPT)Critical
fs:dd_advanced_disk_writedd with conv=notrunc/seek/skipCritical

Other disk and volume operations

IDDescriptionSeverity
fs:partprobe_disk_updatepartprobe -- inform OS of partition changesHigh
fs:blockdev_disk_modifyblockdev -- modify block device parametersHigh
fs:mount_operationsmount a block deviceHigh
fs:lvm_operationslvremove, pvremove, vgremove -- delete logical volumesCritical
fs:filesystem_backupdump/restore operations on block devicesHigh
fs:encryption_operationscryptsetup -- encrypt/decrypt devicesCritical

Strict filesystem checks (fs-strict)

These patterns provide broader coverage for teams that want more visibility into file operations. They are enabled by default but can be disabled if they create too much noise.

Any file permission change

IDfs-strict:change_permissions
SeverityMedium
# Triggers
chmod 644 file.txt
chmod +x script.sh

Any deletion

IDfs-strict:any_deletion
SeverityMedium
FilterPathExists
Blast radiusFile count + size for directories, file size for single files
# Triggers
rm file.txt
rm -r directory/
sudo rm -rf old-backups/

Directory deletion

IDfs-strict:folder_deletion
SeverityMedium
FilterPathExists
Blast radiusFile count + size
# Triggers
rmdir empty-directory/
rmdir old-build/