Skip to content

A timed confirmation system for L i Linux configuration changes with automatic revert capabilities. Designed for remote system administrators to prevent loss of access due to configuration errors.

License

Notifications You must be signed in to change notification settings

ChrisNelsonOK/RevertIT

Repository files navigation

πŸ”„ Revert-IT

πŸ›‘οΈ A timed confirmation system for (Li)nux configuration changes with automatic revert capabilities. Designed for remote system administrators to prevent loss of access due to configuration errors.

πŸ“‹ Overview

Revert-IT monitors critical system configuration files and enforces timed confirmations for any changes. If changes are not confirmed within the specified timeout period, or if connectivity is lost, the system automatically reverts to the previous configuration using snapshots.

✨ Key Features

Feature Description
πŸ” Automatic Configuration Monitoring Watches critical system files (network, SSH, firewall, services)
⏰ Timed Confirmation System Requires explicit confirmation of changes within configurable timeouts
πŸ”„ Automatic Revert Reverts changes if not confirmed or if connectivity is lost
πŸ“Έ TimeShift Integration Uses TimeShift for system-level snapshots when available
🐧 Multi-Distribution Support Works with Ubuntu, Debian, CentOS, RHEL, Fedora, and more
🌐 Connectivity Checking Tests network connectivity before performing reverts
βš™οΈ Flexible Configuration Customizable timeouts, paths, and behaviors per change type

πŸ—οΈ Architecture

                     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                     β”‚ Configuration   β”‚
                     β”‚    Change       β”‚
                     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
                   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                   β”‚ ConfigurationMonitor β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  SnapshotManager    β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               β–Ό
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚  TimeoutManager     β”‚
                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               β–Ό
                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                          β”‚Confirmedβ”‚
                          β”‚    ?    β”‚
                          β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
                         Yes β”Œβ”€β”΄β”€β” No
                          β”Œβ”€β”€β”˜   └──┐
                          β–Ό         β–Ό
                  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                  β”‚  Accept  β”‚  β”‚  Revert  β”‚
                  β”‚  Change  β”‚  β”‚  Engine  β”‚
                  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
                                      β”‚
                                      β–Ό
                              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                              β”‚   Restore    β”‚
                              β”‚   Snapshot   β”‚
                              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🧩 Core Components

Component Purpose
πŸ”§ RevertIT Daemon Main service that monitors system changes
πŸ‘οΈ ConfigurationMonitor Watches critical system files using filesystem events
πŸ“Έ SnapshotManager Manages system snapshots (TimeShift integration + manual snapshots)
⏱️ TimeoutManager Handles timed confirmations and automatic reverts
πŸ”„ RevertEngine Performs automatic reversion of configuration changes
🐧 DistroDetector Detects Linux distribution and provides compatibility information
πŸ’» CLI Interface Command-line tools for management

πŸ”„ How It Works

1. User makes config change
   └─> Monitor detects change
       └─> Create snapshot
           └─> Start timeout timer
               └─> Show confirmation prompt
                   β”‚
                   β”œβ”€> [User confirms in time]
                   β”‚   └─> Accept change
                   β”‚
                   └─> [Timeout expires/Connection lost]
                       └─> Trigger revert
                           └─> Restore previous state

πŸš€ Installation

πŸ“‹ Prerequisites

  • 🐧 Linux system with systemd (Ubuntu 18.04+, Debian 10+, CentOS 7+, RHEL 7+, Fedora 28+)
  • 🐍 Python 3.8 or higher
  • πŸ‘‘ Root privileges for installation and operation
  • πŸ“Έ TimeShift (optional & recommended, for enhanced snapshot capabilities)

⚑ Quick Install

# πŸ“₯ Clone the repository
git clone https://github.com/chrisnelsonok/revertit.git
cd RevertIT

# πŸš€ Run installation script
sudo ./scripts/install.sh

πŸ”§ Manual Installation

# πŸ“¦ Install system dependencies
sudo apt update && sudo apt install python3-pip python3-dev build-essential rsync inotify-tools

# 🐍 Install Python package
sudo pip3 install -e .

# πŸ“ Create directories
sudo mkdir -p /etc/RevertIT /var/lib/RevertIT

# βš™οΈ Copy configuration
sudo cp config/revertit.yaml /etc/revertit/config.yaml

# πŸ”§ Install systemd service
sudo cp systemd/revertit.service /etc/systemd/system/
sudo systemctl daemon-reload

βš™οΈ Configuration

πŸ“ The main configuration file is located at /etc/revertit/config.yaml.

πŸ”‘ Key Configuration Options

# 🌐 Global settings
global:
  default_timeout: 300        # ⏰ Default timeout (5 minutes)
  max_timeout: 1800          # ⏰ Maximum timeout (30 minutes)
  log_level: INFO
  log_file: /var/log/revertit.log

# πŸ“Έ Snapshot settings
snapshot:
  enable_timeshift: true
  snapshot_location: /var/lib/revertit/snapshots
  max_snapshots: 10

# πŸ‘οΈ Monitoring paths
monitoring:
  network_configs:
    - /etc/network/interfaces
    - /etc/netplan/*.yaml
    - /etc/NetworkManager/system-connections/*
  
  ssh_configs:
    - /etc/ssh/sshd_config
    - /etc/ssh/ssh_config.d/*
  
  firewall_configs:
    - /etc/iptables/rules.v4
    - /etc/ufw/*

# ⏱️ Timeout behavior
timeout:
  timeout_action: revert
  connectivity_check: true
  connectivity_endpoints:
    - 8.8.8.8
    - 1.1.1.1
  revert_grace_period: 30

πŸ’» Usage

πŸš€ Starting the Service

# βœ… Enable and start the service
sudo systemctl enable revertit
sudo systemctl start revertit

# πŸ“Š Check status
sudo systemctl status revertit

πŸ–₯️ Command Line Interface

# πŸ“Š Show system status
revertit status

# ⏰ List active timeouts
revertit timeouts

# βœ… Confirm a configuration change
revertit confirm <change-id>

# πŸ“Έ Manage snapshots
revertit snapshots list
revertit snapshots create --description "Manual backup before major changes"

# πŸ§ͺ Test system compatibility
revertit test

πŸ“ Example Workflow

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ πŸ”§ Make Config β”‚ ──> β”‚ πŸ” System Detects β”‚ ──> β”‚ πŸ“Έ Create      β”‚
β”‚    Change      β”‚     β”‚    Change         β”‚     β”‚    Snapshot     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                           β”‚
                                                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ βœ… Accept      β”‚ <── β”‚   User Action?    β”‚ <── β”‚ ⏰ Start        β”‚
β”‚    Change      β”‚     β”‚                   β”‚     β”‚    Timeout      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                 β”‚                         β”‚
                                 β”‚ Timeout/Lost           β–Ό
                                 β”‚ Connection      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                 β”‚                 β”‚ ⚠️ Show Warning β”‚
                                 β–Ό                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚ πŸ”„ Auto-Revert β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  1. πŸ”§ Make a configuration change (e.g., edit /etc/ssh/sshd_config)
  2. πŸ” System detects change and creates a snapshot
  3. ⏰ Timeout starts (default 5 minutes for SSH changes)
  4. ⚠️ System shows warning about pending timeout
  5. βœ… Confirm the change: revertit confirm ssh_1234567890
  6. πŸ”„ Or let it auto-revert if you lose connectivity or forget to confirm

⏰ Change Categories and Timeouts

Category Files Timeout
🌐 Network /etc/network/*, /etc/netplan/* 10 minutes
πŸ” SSH /etc/ssh/* 15 minutes
πŸ›‘οΈ Firewall /etc/iptables/*, /etc/ufw/* 5 minutes
πŸ”§ Services /etc/systemd/system/* 5 minutes
πŸ“ Other Various system files 5 minutes

πŸ›‘οΈ Safety Features

🌐 Connectivity Checking

Before reverting network changes, the system tests connectivity to configured endpoints (8.8.8.8, 1.1.1.1, google.com by default).

⏳ Grace Period

A configurable grace period (default 30 seconds) is provided before performing reverts, allowing for last-minute confirmations.

πŸ“Έ Snapshot Management

  • 🧹 Automatic cleanup of old snapshots
  • πŸ”— Integration with TimeShift for system-level snapshots
  • 🎯 Manual snapshot creation and restoration
  • πŸ—œοΈ Compressed snapshots to save disk space

πŸ”§ Default Configurations

When snapshots are unavailable, the system can restore sensible default configurations for critical services.


🐧 Distribution Support

βœ… Full Support

Distribution Versions
🟠 Ubuntu 18.04, 20.04, 22.04, 24.04
πŸ”΄ Debian 10, 11, 12
🟑 CentOS 7, 8, 9
πŸ”΄ RHEL 7, 8, 9
πŸ”΅ Fedora 32+

πŸ§ͺ Experimental Support

  • πŸ”΅ Arch Linux
  • 🟒 openSUSE
  • πŸ”οΈ Alpine Linux
  • πŸͺŸ Windows WSL
  • 🍎 MacOS (Coming Soon!)
  • πŸͺŸ Windows OS (Planned)

πŸ”§ Distribution-Specific Features

  • πŸ“¦ Automatic detection of package managers (apt, yum, dnf, pacman)
  • πŸ”§ Service management system detection (systemd, SysV)
  • 🌐 Network configuration system detection (netplan, NetworkManager, interfaces)
  • πŸ›‘οΈ Firewall system detection (ufw, firewalld, iptables)

πŸ“Š Logging and Monitoring

πŸ“ Log Files

  • πŸ“„ Main log: /var/log/revertit.log
  • πŸ”„ Automatic log rotation configured
  • πŸ“‹ Structured logging with timestamps and severity levels

πŸ“Š Log Levels

Level Description
πŸ” DEBUG Detailed operation information
ℹ️ INFO General operation status
⚠️ WARNING Timeout warnings and non-critical issues
❌ ERROR Errors during operation
🚨 CRITICAL Critical failures requiring attention

πŸ“’ Notifications

  • πŸ“‹ Syslog integration for system logs
  • πŸ–₯️ Desktop notifications (when GUI available)
  • πŸ“§ Email notifications (configurable)

πŸ”’ Security Considerations

πŸ‘‘ Permissions

  • πŸ” Runs as root (required for system configuration management)
  • πŸ“ Configuration files are root-owned and protected
  • πŸ›‘οΈ Snapshot directories have restricted permissions

🌐 Network Security

  • πŸ”’ Minimal network exposure (only outbound connectivity checks)
  • 🚫 No remote management interfaces by default
  • 🏠 All operations are local to the system

πŸ“Έ Snapshot Security

  • ⚠️ Snapshots may contain sensitive configuration data
  • 🧹 Automatic cleanup prevents accumulation of old snapshots
  • πŸ” Snapshots are stored in protected directories

πŸ”§ Troubleshooting

❓ Common Issues

🚫 Service won't start

# πŸ“Š Check service status and logs
sudo systemctl status revertit
sudo journalctl -u revertit -f

# πŸ§ͺ Test configuration
revertit test

πŸ“Έ TimeShift not working

# πŸ“¦ Install TimeShift
sudo apt install timeshift  # Ubuntu/Debian

# βš™οΈ Configure TimeShift
sudo timeshift --list

πŸ” Permissions errors

# πŸ”§ Ensure proper permissions
sudo chown -R root:root /etc/revertit
sudo chmod 644 /etc/revertit/config.yaml

πŸ› Debug Mode

# πŸ” Run in foreground with debug logging
sudo revertit-daemon --config /etc/revertit/config.yaml --foreground

πŸ‘¨β€πŸ’» Development

πŸ“‹ Requirements

  • 🐍 Python 3.8+
  • πŸ“¦ pip packages: psutil, watchdog, pyyaml, croniter

πŸ› οΈ Development Setup

# πŸ“₯ Clone repository
git clone https://github.com/ChrisNelsonOK/RevertIT.git
cd RevertIT

# πŸ”§ Install in development mode
pip3 install -e .

# πŸ§ͺ Run tests
python -m pytest tests/

# πŸ” Run linting
flake8 src/
black src/
mypy src/

πŸ“ Project Structure

RevertIT/
β”œβ”€β”€ πŸ“¦ src/revertit/               # Main package code
β”‚   β”œβ”€β”€ πŸ”§ daemon/                 # Daemon implementation
β”‚   β”œβ”€β”€ πŸ“Έ snapshot/               # Snapshot management
β”‚   β”œβ”€β”€ πŸ‘οΈ monitor/                # Configuration monitoring
β”‚   β”œβ”€β”€ ⏰ timeout/                # Timeout management
β”‚   β”œβ”€β”€ πŸ”„ revert/                 # Revert engine
β”‚   β”œβ”€β”€ 🐧 distro/                 # Distribution detection
β”‚   └── πŸ’» cli/                    # Command-line interface
β”œβ”€β”€ βš™οΈ config/                     # Default configuration
β”œβ”€β”€ πŸ”§ systemd/                    # systemd service files
β”œβ”€β”€ πŸ“œ scripts/                    # Installation scripts
β”œβ”€β”€ πŸ§ͺ tests/                      # Test suite
└── πŸ“š docs/                       # Documentation

🀝 Contributing            

  1. 🍴 Fork the repository
  2. 🌿 Create a feature branch
  3. ✏️ Make your changes
  4. πŸ§ͺ Add tests for new functionality
  5. βœ… Ensure all tests pass
  6. πŸ“€ Submit a pull request

πŸ“„ License

πŸ“œ MIT License - see LICENSE file for details.


πŸ†˜ Support

Type Contact
πŸ› Issues GitHub Issues
πŸ“š Documentation See docs/ directory
πŸ”’ Security Issues Please report privately to [email protected]

πŸ™ AcknowledgmentsΒ Β Β Β Β Β Β Β Β Β Β Β 

  • πŸ“Έ TimeShift project for inspiration and integration
  • 🐧 The Linux community for excellent monitoring tools
  • πŸ‘₯ All contributors and users providing feedback

⭐ Star this project if you find it useful!

GitHub stars GitHub forks GitHub issues

About

A timed confirmation system for L i Linux configuration changes with automatic revert capabilities. Designed for remote system administrators to prevent loss of access due to configuration errors.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •