Source code for edeposit_clamd_init

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Interpreter version: python 2.7
#
"""
Initialization script used to set necessary settings in ClamAV configuration
file and correct permissions.
"""
# Imports =====================================================================
import os
import sh
import pwd
import sys
import shutil
import os.path
import logging
import argparse


try:
    import edeposit.amqp.antivirus as antivirus
    from edeposit.amqp.antivirus import settings
    from edeposit.amqp.antivirus import conf_writer
    from edeposit.amqp.antivirus.wrappers.freshclam import require_root
except (ImportError, AttributeError):
    sys.path.insert(0, os.path.abspath('../src/edeposit/amqp'))
    import antivirus
    from antivirus import settings
    from antivirus import conf_writer
    from antivirus.wrappers.freshclam import require_root


# Variables ===================================================================
logging.basicConfig()
logger = logging.getLogger(__name__)

#: All required settings is there, rest is not important.
REQUIRED_SETTINGS = {
    "User": "$username",
    "LocalSocketGroup": "$groupname",
    "LocalSocket": settings.LOCALSOCKET,
    "LogFile": settings.LOGFILE,
    "PidFile": settings.PIDFILE,
    "MaxThreads": "2",
    "MaxConnectionQueueLength": "3",
    "LogSyslog": "false",
    "LogRotate": "true",
    "ScanELF": "true",
    "ScanPE": "true",
    "ScanArchive": "true",
    "AllowSupplementaryGroups": "true",
    "LocalSocketMode": "666",
    "FixStaleSocket": "true",
    "LogTime": "true",
    "ReadTimeout": "180",
}

CLEAN_CONFIG = """
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
ojrs
"""

import zlib
import base64
# decode compressed clean (with comments and so on) configuration file
CLEAN_CONFIG = zlib.decompress(base64.b64decode(CLEAN_CONFIG))


# Functions & objects =========================================================
[docs]def get_username(): """ Return username depending on type of system (deb/suse). """ return "clamav" if settings.is_deb_system() else "vscan"
[docs]def update_configuration(configuration): """ Set all configuration specified in :attr:`REQUIRED_SETTINGS`. Args: configuration (str): Configuration file content. Returns: str: Updated configuration. """ for key, val in REQUIRED_SETTINGS.items(): if val in ["$username", "$groupname"]: val = get_username() configuration = conf_writer.add_or_update(configuration, key, val) return configuration
[docs]def create_config(cnf_file, uid, overwrite): """ Creates configuration file and the directory where it should be stored and set correct permissions. Args: cnf_file (str): Path to the configuration file. uid (int): User ID - will be used for chown. overwrite (bool): Overwrite the configuration with :attr:`CLEAN_CONFIG`. """ conf = None # needed also on suse, because pyClamd module if not os.path.exists(settings.DEB_CONF_PATH): os.makedirs(settings.DEB_CONF_PATH, 0755) os.chown(settings.DEB_CONF_PATH, uid, -1) if not os.path.exists(cnf_file): # create new conf file conf = CLEAN_CONFIG elif overwrite: # ovewrite old conf file backup_name = cnf_file + "_" if not os.path.exists(backup_name): shutil.copyfile(cnf_file, backup_name) os.chown(backup_name, uid, -1) conf = CLEAN_CONFIG else: # switch variables in existing file with open(cnf_file) as f: conf = f.read() # write the conf file with open(cnf_file, "w") as f: f.write(update_configuration(conf)) # permission check (uid) os.chown(cnf_file, uid, -1) os.chmod(cnf_file, 0644) symlink = settings.DEB_CONF_PATH + settings.CONF_FILE if not settings.is_deb_system() and not os.path.exists(symlink): os.symlink(cnf_file, symlink) os.chown(symlink, uid, -1) os.chmod(symlink, 0644)
[docs]def create_log(log_file, uid): """ Create log file and set necessary permissions. Args: log_file (str): Path to the log file. uid (int): User ID - will be used for chown. """ if not os.path.exists(log_file): # create new log file dir_name = os.path.dirname(log_file) if not os.path.exists(dir_name): os.makedirs(dir_name, 0755) os.chown(dir_name, uid, -1) with open(log_file, "w") as f: f.write("") os.chown(log_file, uid, -1) os.chmod(log_file, 0640)
[docs]def get_service_name(): """ Return name of the daemon depending on the system type. """ return "clamav-daemon" if settings.is_deb_system() else "clamd"
@require_root
[docs]def main(conf_file, overwrite, logger): """ Create configuration and log file. Restart the daemon when configuration is done. Args: conf_file (str): Path to the configuration file. overwrite (bool): Overwrite the configuration file with `clean` config? """ uid = pwd.getpwnam(get_username()).pw_uid # stop the daemon logger.info("Stopping the daemon.") sh.service(get_service_name(), "stop") # create files logger.info("Creating config file.") create_config( cnf_file=conf_file, uid=uid, overwrite=overwrite ) logger.info("Creating log file.") create_log( log_file=REQUIRED_SETTINGS["LogFile"], uid=uid ) # start the daemon logger.info("Starting the daemon..") sh.service(get_service_name(), "start")
# Main program ================================================================ if __name__ == '__main__': parser = argparse.ArgumentParser( description="edeposit.amqp.antivirus ClamAV initializer.", ) parser.add_argument( "-v", "--verbose", help="Print logging messages.", action="store_true" ) parser.add_argument( "-o", "--overwrite", help="""Overwrite default configuration file. Don't worry, your original file will be stored in backup_.""", action="store_true" ) parser.add_argument( "-c", "--config", default=settings.CONF_PATH, help="Path to the configuration file. Default %s." % settings.CONF_PATH ) args = parser.parse_args() if args.verbose: logger.setLevel(logging.INFO) logger.debug("Logger set to INFO level.") else: logger.setLevel(logging.ERROR) try: main(args.config, args.overwrite, logger) except AssertionError as e: sys.stderr.write(e.message + "\n") sys.exit(1)