# SME Server Password Change Application - Deployment Guide ## Overview This Python Flask application provides a web interface for changing user passwords on SME Server systems. It interfaces with the smeserver configuration database and uses `signal-event password-update` to properly apply password changes. ## Features - ✅ Web interface matching the original SME Server design - ✅ Integration with SME Server configuration database - ✅ Password strength validation - ✅ Current password verification - ✅ Uses `signal-event password-update` for proper password updates - ✅ Responsive design for mobile and desktop - ✅ Error handling and security measures - ✅ Demo mode for testing ## System Requirements - SME Server 10 or 11 - Python 3.6 or higher - Flask and Flask-CORS Python packages - Root access for installation ## Installation Methods ### Method 1: Automated Installation (Recommended) 1. Copy the entire application directory to your SME Server 2. Run the installation script as root: ```bash sudo ./install.sh ``` 3. The script will: - Install Python dependencies - Create a systemd service - Start the application automatically - Configure it to start on boot ### Method 2: Manual Installation 1. Install Python dependencies: ```bash pip3 install Flask==2.3.3 Flask-CORS==4.0.0 ``` 2. Copy application files to `/opt/smeserver-password-app/` 3. Create systemd service file at `/etc/systemd/system/smeserver-password-web.service`: ```ini [Unit] Description=SME Server Password Change Web Application After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/smeserver-password-app Environment=FLASK_ENV=production ExecStart=/usr/bin/python3 /opt/smeserver-password-app/app.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` 4. Enable and start the service: ```bash systemctl daemon-reload systemctl enable smeserver-password-web systemctl start smeserver-password-web ``` ## Configuration ### Port Configuration By default, the application runs on port 5000. To change the port: 1. Edit `app.py` and modify the port in the last line 2. Restart the service: `systemctl restart smeserver-password-web` ### Security Configuration - The application runs as root to access SME Server system commands - Change the secret key in production by setting the `SECRET_KEY` environment variable - Consider using a reverse proxy (nginx/apache) for SSL termination ### Firewall Configuration Open the application port in the SME Server firewall: ```bash # For port 5000 db configuration setprop httpd-admin TCPPort 5000 signal-event remoteaccess-update ``` ## Usage ### Accessing the Application - Open a web browser and navigate to: `http://your-server-ip:5000` - Fill in the form with: - Your account username - Current password - New password (twice for verification) - Click "Change Password" ### Password Requirements - Minimum 7 characters - Maximum 127 characters - Must contain at least one letter and one number - Cannot contain certain special characters (: ; | & ! \ " ') ## Testing ### Demo Mode For testing without SME Server tools, use the demo mode: ```bash python3 demo_mode.py ``` Demo users available: - Username: `testuser`, Password: `oldpassword123` - Username: `admin`, Password: `adminpass456` - Username: `john`, Password: `johnpass789` ### Production Testing 1. Verify the service is running: `systemctl status smeserver-password-web` 2. Check logs: `journalctl -u smeserver-password-web -f` 3. Test with a non-critical user account first ## Troubleshooting ### Service Won't Start - Check logs: `journalctl -u smeserver-password-web` - Verify Python dependencies are installed - Ensure port is not in use by another service ### Password Changes Fail - Verify the user account exists in the SME Server accounts database - Check that `signal-event` command is available - Ensure the application has root privileges ### Permission Errors - The application must run as root to access system commands - Verify file permissions in the application directory ## Security Considerations - This application requires root privileges to function properly - Use HTTPS in production environments - Consider implementing rate limiting for password change attempts - Monitor logs for suspicious activity - Keep the application updated ## File Structure ``` smeserver-password-app/ ├── app.py # Main Flask application ├── smeserver_utils.py # SME Server integration utilities ├── demo_mode.py # Demo version for testing ├── requirements.txt # Python dependencies ├── install.sh # Automated installation script ├── templates/ │ └── password_change.html # Web interface template ├── static/ │ └── css/ │ └── style.css # Styling to match SME Server design ├── README.md # Project documentation └── DEPLOYMENT.md # This deployment guide ``` ## Support For issues or questions: 1. Check the application logs 2. Verify SME Server system status 3. Test with demo mode to isolate issues 4. Review the source code for customization needs