Know the instant someone touches your config files. Checksums + email alerts = peace of mind.
FileIntegra is a cross-platform command-line tool that monitors critical filesfor unauthorized changes and sends email alerts the moment a modification isdetected. Point it at configuration files, system binaries, web serverconfigs, SSL certificates, or any file that should not change without yourknowledge — and get notified within minutes.
Available for Linux, macOS, and Windows. Single binary, zero dependencies,installs in seconds.
When an attacker gains access to a server, one of the first things they do ismodify files — injecting backdoors, altering configurations, or replacingbinaries. Without file integrity monitoring, these changes can go unnoticedfor weeks or months. FileIntegra closes that gap by alerting you on the nextscheduled check.
--reset to accept legitimate changes and establish a newbaseline
config.example.yaml to config.yaml and addyour SMTP details
fileintegra --config config.yaml --test to verify emailworks
fileintegra --config config.yaml --reset --all to takeinitial snapshots
| File | Operating System |
|---|---|
fileintegra-linux-amd64 |
Linux (Intel/AMD 64-bit) |
fileintegra-linux-arm64 |
Linux (ARM 64-bit, e.g., AWS Graviton, Raspberry Pi) |
fileintegra-darwin-amd64 |
macOS (Intel) |
fileintegra-darwin-arm64 |
macOS (Apple Silicon — M1/M2/M3/M4) |
fileintegra-windows-amd64.exe |
Windows (64-bit) |
# Install the binary
chmod +x fileintegra-linux-amd64
sudo mv fileintegra-linux-amd64 /usr/local/bin/fileintegra
# Set up config directory
sudo mkdir -p /etc/fileintegra
sudo cp config.example.yaml /etc/fileintegra/config.yaml
sudo chmod 600 /etc/fileintegra/config.yaml
# Edit config with your SMTP credentials and monitored files
sudo nano /etc/fileintegra/config.yaml
Important: Create a dedicated email account specifically
for FileIntegra (e.g., fileintegra@yourdomain.com). Do not use
a shared or personal email account. If the SMTP password is changed on the
mail server and not updated in config.yaml, FileIntegra will
fail to send alerts silently. A dedicated account ensures no one
accidentally changes the password during routine credential rotations.
email:
smtp_host: "smtp.example.com"
smtp_port: 587 # 587 = STARTTLS, 465 = implicit TLS
username: "alerts@example.com"
password: "your-password"
from: "alerts@example.com"
to:
- "admin@example.com"
subject_prefix: "[File Integrity Alert]"
storage:
snapshot_file: "/var/lib/fileintegra/snapshots.json"
monitored_files:
- "/etc/passwd"
- "/etc/shadow"
- "/etc/ssh/sshd_config"
# Check specific files
fileintegra --config config.yaml /etc/passwd /etc/ssh/sshd_config
# Check all files from config
fileintegra --config config.yaml --all
# Dry run (no emails sent, no snapshots updated)
fileintegra --config config.yaml --dry-run --all
# Take fresh snapshots (no alerts sent)
fileintegra --config config.yaml --reset --all
# Test email configuration
fileintegra --config config.yaml --test
# Quiet mode + summary (ideal for cron)
fileintegra --config config.yaml --all --quiet --summary
# Notify when new files are added to monitoring
fileintegra --config config.yaml --all --notify-new
# Check version
fileintegra --version
| Flag | Description |
|---|---|
--config |
Path to YAML config file (default: config.yaml) |
--all |
Check all files listed in monitored_files |
--test |
Send a test email to verify SMTP config |
--dry-run |
Check files without sending emails or saving snapshots |
--reset |
Take fresh snapshots without sending alerts |
--quiet |
Suppress output (for cron jobs) |
--summary |
Send a summary email after the check |
--notify-new |
Send email when new files are first monitored |
--version |
Print version and exit |
| Code | Meaning |
|---|---|
| 0 | All files OK, no changes |
| 1 | Error (config, I/O, SMTP failure) |
| 2 | Integrity change detected |
By default, FileIntegra only sends an email when a file change is detected.
No change = no email. The --quiet flag prevents cron from
generating its own notification emails.
# Check every 5 minutes, email only on changes
*/5 * * * * /usr/local/bin/fileintegra --config /etc/fileintegra/config.yaml --all --quiet
# Hourly check with summary report (sends email every run regardless of changes)
0 * * * * /usr/local/bin/fileintegra --config /etc/fileintegra/config.yaml --all --quiet --summary
config.yaml with restricted permissions (chmod 600)
chmod 600)
Some monitored files (e.g., /etc/shadow) require root access to
read. If running FileIntegra from cron as a non-root user, add a sudoers
entry:
# /etc/sudoers.d/fileintegra
youruser ALL=(root) NOPASSWD: /usr/local/bin/fileintegra
Then run from cron with sudo:
*/5 * * * * sudo /usr/local/bin/fileintegra --config /etc/fileintegra/config.yaml --all --quiet
Alternatively, run the cron job directly as root via
sudo crontab -e.
Run fileintegra --config config.yaml --reset --all to take
fresh snapshots. The next check will use the new baseline.
Update the password field in your config.yaml to
match the new password, then run
fileintegra --config config.yaml --test to verify it works.
Check your cron logs (grep fileintegra /var/log/syslog) or run
it manually without --quiet to see output.
Yes. Either run FileIntegra as root, or add a sudoers entry:
youruser ALL=(root) NOPASSWD: /usr/local/bin/fileintegra. Then
use sudo /usr/local/bin/fileintegra in your cron job.
FileIntegra will report an error for that file. It won't send a change alert — it will show the file as missing in the summary.
Not directly. List each file individually in monitored_files in
your config. This is by design — monitoring specific critical files is more
secure than watching entire directories.
Every 5 minutes is a good default for critical servers. For less sensitive systems, hourly or daily may be sufficient.
No. It only reads files and computes a fingerprint. The overhead is negligible, even when checking dozens of files every few minutes.
Add a cron job. Open your crontab with crontab -e (or
sudo crontab -e for root) and add:*/5 * * * * /usr/local/bin/fileintegra --config
/etc/fileintegra/config.yaml --all --quiet
It checks all files and shows you what changed, but does not save the new snapshots and does not send any emails. Useful for testing your setup before going live.
Exit 0 = all files are unchanged. Exit 1 = an error occurred (bad config, can't read a file, email failed). Exit 2 = one or more files were modified (integrity change detected).
Set it to chmod 600 so only the owner can read it — it contains
your SMTP password. The snapshot file should also be chmod 600.
Edit your config.yaml and add file paths under
monitored_files. Then run
fileintegra --config config.yaml --reset --all to take initial
snapshots of the new files.
By default, when FileIntegra sees a file for the first time, it takes a
snapshot silently. With --notify-new, it sends an email
confirming which new files have been added to monitoring.
Yes. Add multiple email addresses under the to field in your
config.
--quiet suppresses all console output (ideal for cron so you
don't get cron emails). --summary sends a summary email after
each check regardless of whether changes were found. You can use both
together.
Free download · No credit card required
Ready to transform your business? Schedule a free consultation to discuss your project and discover how our 10-year warranty can protect your investment.