#!/usr/bin/env python3 import os import subprocess import socket def run(cmd): print(f"[+] Running: {cmd}") subprocess.run(cmd, shell=True, check=True) def main(): SHARE = "/var/www/webdav" LOCKDIR = "/usr/local/apache/var/DavLock" HOSTNAME = socket.gethostname() IPADDR = socket.gethostbyname(HOSTNAME) # Update & install apache run("sudo apt update") run("sudo apt install -y apache2 apache2-utils") # Create shared directory run(f"sudo mkdir -p {SHARE}") run(f"sudo chown -R www-data:www-data {SHARE}") run(f"sudo chmod -R 755 {SHARE}") # Enable DAV modules run("sudo a2enmod dav dav_fs") run("sudo systemctl reload apache2") # Create DAV lock directory run(f"sudo mkdir -p {LOCKDIR}") run(f"sudo chown www-data:www-data {LOCKDIR}") # Create webdav.conf webdav_conf = f""" ServerAdmin admin@{HOSTNAME} DavLockDB {LOCKDIR}/DavLock Alias /webdav {SHARE} DocumentRoot /var/www/webdav Options FollowSymLinks AllowOverride None DAV On Require all granted Options Indexes FollowSymLinks MultiViews """ with open("/tmp/webdav.conf", "w") as f: f.write(webdav_conf) run("sudo mv /tmp/webdav.conf /etc/apache2/sites-available/webdav.conf") # Modify default conf default_conf = f"""DavLockDB {LOCKDIR}/DavLock ServerAdmin webmaster@localhost Alias /webdav {SHARE} DocumentRoot /var/www/html DAV On Require all granted Options Indexes FollowSymLinks ErrorLog \${APACHE_LOG_DIR}/error.log CustomLog \${APACHE_LOG_DIR}/access.log combined """ with open("/tmp/000-default.conf", "w") as f: f.write(default_conf) run("sudo mv /tmp/000-default.conf /etc/apache2/sites-available/000-default.conf") # Enable site and restart Apache run("sudo a2ensite webdav.conf") run("sudo systemctl reload apache2") run("sudo systemctl restart apache2") print("\nāœ… WebDAV setup complete!") print(f"šŸ“‚ Access via: http://{IPADDR}/webdav/") if __name__ == "__main__": main()