9r4h1 dZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z m Z ddl mZddlmZdd lmZmZmZmZmZmZmZmZmZmZmZdd lmZdd lm Z m!Z!m"Z"m#Z#m$Z$dd l%m&Z'dd l(m)Z)m*Z*m+Z+e+j,dddZ-ej.e/Z0e+j1d Z2dZ3dZ4e+j,dde-Z5dZ6eej7,ddZ8d\Z9Z:d\Z;ZdZ?dZ@dZAdZBdZCdZDdZEdZFdZGd ZHd ZId!ZJd"ZKd#ZLd$ZMd%\ZNZOZPd&\ZQZRZSd'ZTd(\ZUZVd)ZWej7fd*eXd+eYd,ed-eYfd.ZZej7fd*eXd+e[d,ed-e[fd/Z\d0Z]d1Z^d2Z_dd3Z`d4ZaGd5d6ZbGd7d8Zcd9d:d;Zdejed <d=Zfejed <d>Zgd?d@dAdd9dBdAdd9dBdCd9dDdCd9dDdEidFiZhGdGdHeiZjGdIdJZkGdKdLeZlGdMdNeleZmGdOdPee)ZnGdQdRZoGdSdTelenUZpGdVdWepZqGdXdYelenUZr ddZeeeXeYfd[eeXd-elfd\Zsd-e[fd]Ztejuepe$ekjveLekjw^_ZxGd`daepZyGdbdcZzGdddeezZ{GdfdgezZ|GdhdiezZ}GdjdkezZ~GdldmeZGdndoZGdpdqZGdrdsZGdtduZGdvdwZGdxdyZGdzd{ZGd|d}ZGd~dZGddZGddZGddZdZGddZGddZGddZGddZGddZGddepZGddZGddZGddZGddZdZGddZGddeiZGddZesZGddZGddeXeZdd@dCddDdAdd9eNeOeReQeUePeVeSeTg ddidFiZGddepZGddZdZGddZdZeXd-e[fdZdZeXd-e fdZdZeXd-e[fdZGddZdS)z5 All the config settings for defence360 in one place N)abstractmethod) bisect_left bisect_right)deepcopy)datetime timedelta)Enum)Path) AnyCallableDictListMappingOptionalProtocolSequenceTupleUnion _ProtocolMeta) Validator)CachedConfigReader ConfigError ConfigReaderUserConfigReaderWriteOnlyConfigReader)config_cleanup) Singletondict_deep_updateimporterz imav._version __version__)modulenamedefaultim360z'/var/imunify360/myimunify-freemium.flag MY_IMUNIFYzim360._versionz../.IM360_CONFIG_SCHEMA_PATHz4/opt/imunify360/venv/share/imunify360/config_schema/)notifycleanup)nonedayweekmonthiiFULLMINIMALDENYALLOWa4############################################################################ # DO NOT MODIFY THIS FILE!!! # # USE /etc/sysconfig/imunify360/imunify360.config.d/ TO OVERRIDE DEFAULTS # ############################################################################ a############################################################################ # DO NOT MODIFY THIS FILE!!! # # USE /etc/sysconfig/imunify360/imunify360.config.d/ TO OVERRIDE DEFAULTS # # This is an example of default values only # # Changing this file will have no effect # ############################################################################ )cpanelplesk directadmin)acronisr1soft clusterlogicssample) cloudlinuxcloudlinux_on_premisez./var/run/defence360agent/generic_sensor.sock.2varr#envreturnc t||S#t$r|cYSt$r(}td||d}~wwxYw)Nz{}: integer required)intKeyError ValueErrorformat)r=r#r>es U/opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/contracts/config.pyint_from_envvarrGmsuD3s8}}  DDD/66s;;< TRUE_VALS FALSE_VALSvals rFbool_from_envvarrWvs/I/J  #hiikk )  4 *  5 % , ,S)j2H I I    sA A#"A#ctjtjt|SN)ospathjoindirname__file__relpaths rF _self_rel2absras& 7<<117 ; ;;ctjtjt t |SrY)rZr[r\r]ra AGENT_CONFr_s rF conf_rel2absres. 7<< j(A(ABBG L LLrbc t|d5}|cdddS#1swxYwYdS#t$rYdSwxYw)z1Returns content for existing file, otherwise NonerN)openreadstripOSError)r[rOs rF _slurp_filerls $__ $6688>>## $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ tts3A&A AA  A A  A A A cVt|}||}|||}|||fStd||t}|||t jfS)z Choose action for config option by checking EndUser's Imunify360 config and Admin config. Admins config applies only if EndUser didn't set the default action usernameNz"Cannot read %s:%s from user config) ConfigFileconfig_to_dictgetloggerdebugUserTypeROOT)sectionoptionro user_config user_section user_value root_configs rFchoose_value_from_configr}s h///>>@@K??7++L!%%f--  !x' ' LL5wGGG,,--//K w  ' 66rbcJtjtS)zG Just checks if this is server with MyImunify Freemium license )rZr[existsFREEMIUM_FEATURE_FLAGrbrFis_mi_freemium_licensers 7>>/ 0 00rbceZdZddZdZdS) FromConfigNc>||_||_||_d|_dSrY)rwrx _config_cls_config_instance)selfrwrx config_clss rF__init__zFromConfig.__init__s&  % $rbc|j4|jt|_n||_|j|j}|j ||jS|SrY)rrrprqrwrx)rinstanceowner section_values rF__get__zFromConfig.__get__sm  ('(2 %%(,(8(8(:(:%-<<>>t|L ; " - -rbNN)__name__ __module__ __qualname__rrrrbrFrrs7%%%%     rbrc8eZdZedZedddZdZdS) FromFlagFile/var/imunify360.)coercer#c0||_||_||_dSrY)r"rr#)rr"rr#s rFrzFromFlagFile.__init__s   rbc|j|jz }|r.||p|jSdSrY)LOCATIONr"rr read_textr#)rrrr[s rFrzFromFlagFile.__get__sP}ty( ;;== A;;t~~//?4<@@ @ A ArbN)rrrr rboolrrrrbrFrrsVt%&&H'+S AAAAArbrTrootc|rdnd}i}tjtgD]0}t||d}|}t ||d1|S)Nget_root_configget_non_root_configciSrYrrrbrFz1_get_combined_validation_schema..srbF)allow_overwrite)r iter_modulesCONFIG_VALIDATORS_DIR_PATHgetattrr)r func_namecombined_schemar! get_schemaschemas rF_get_combined_validation_schemarst%)D!!/DIO')C(DEEIIVY ;; &%HHHHH rb)maxsizectSrYrrrbrFconfig_schema_rootrs * , ,,rbc"tdS)NFrrrrbrFconfig_schema_non_rootrs * 6 6 66rbCUSTOM_BILLINGdictstring)typer#nullableboolean)rr#) upgrade_urlupgrade_url_360billing_notifications ip_license)rrr#ceZdZdS)ConfigValidationErrorN)rrrrrbrFrrsDrbrcjeZdZdZesdezndZeZeZ e j ddZ dZdZdZd Zd Zd Zd Zd Ze jed ZdZe jeeZdZe jed ZdZdZdZdZ dZ!esdndZ"dZ#e$dZ%dZ&dS)Core imunify360z%s agentzimunify antivirusIMUNIFY360_API_URLzhttps://api.imunify360.com z.el7z/var/imunify360/tmpzimunify360-merged.configzimunify360.configz/etc/imunify360ry/etc/sysconfig/imunify360izimunify360.config.dz.imunify360.backup_configz hooks.yamlzcustom_billing.configz/var/imunify360/hookszimunify360-agentzimunify-antiviruszunified-access-logger.confz#/etc/sysconfig/imunify360/.go_agent<N)'rrrPRODUCTANTIVIRUS_MODENAME av_version AV_VERSION_versionVERSIONrZenvironrr API_BASE_URLDEFAULT_SOCKET_TIMEOUTDIST FILE_UMASKTMPDIRMERGED_CONFIG_FILE_NAMEUSER_CONFIG_FILE_NAMELOCAL_CONFIG_FILE_NAME CONFIG_DIRr[r\ USER_CONFDIRGLOBAL_CONFDIRMERGED_CONFIG_FILE_PATHMERGED_CONFIG_FILE_PERMISSIONLOCAL_CONFIG_FILE_PATH CONFIG_D_NAMEBACKUP_CONFIGFILENAMEHOOKS_CONFIGFILENAMECUSTOM_BILLING_CONFIGFILENAMEINBOX_HOOKS_DIRSVC_NAME$UNIFIED_ACCESS_LOGGER_CONFIGFILENAMEr GO_FLAG_FILE%SIGNAL_HANDLER_MIGRATION_TIMEOUT_SECSrrbrFrrs#G'5 N:  ;NDJG:>>:L  DJ "F8/0"J7<< M::L0N gll/%*!W\\.:MNN)M7'$;!-O#1I6I ,H(4=>>L,.)))rbrc eZdZe ddededefdZe ddededed ed edd f d Zedd Z e dded edefdZ ede e defdZ dede edefdZdede ededd fdZd S)IConfigTF normalize force_readr?ctrYNotImplementedErrorrrrs rFrqzIConfig.config_to_dict) "!rbdatavalidate overwritewithout_defaultsNctrYrrrrrrrs rFdict_to_configzIConfig.dict_to_config/s "!rbctrYrrs rFrzIConfig.validate:!!rbconfigctrYrrrrs rFrzIConfig.normalize>rrb timestampctrYrrrs rFmodified_sincezIConfig.modified_sinceDrrbrwrxc|r;||i|SdSrY)rqrr)rrwrxs rFrrz IConfig.getHs@  F&&((,,Wb99==fEE Etrbvaluec@|r||||iidSdSrY)r)rrwrxrs rFsetz IConfig.setMs7  <   65/ : ; ; ; ; ; < """26" """^" !& """" "  "  " """^""""^"8="""15" """^" ""D"""^"3 # <3< z;Normalizer._get_schema_without_defaults..js]   U777 %&&11%888777rbitems)r"rs` rFrz'Normalizer._get_schema_without_defaultshs8    $kkmm     rbrci}|D]W\}}t|tr6|D] \}}||||i|<!P|r|||<X|SrY)r%rr setdefault)r new_configrwoptionsrxrs rF remove_nullzNormalizer.remove_nullrs:< &  . . GW'4(( .%,]]__KKMFE(EJ --gr::6BK .'. 7#rbct|}||}|jrt|j|td||S)NzCerberus returned None for )ConfigValidator normalizederrorsr)rr validatorr-s rF_normalize_with_schemaz!Normalizer._normalize_with_schemasa#F++ %.%9%9&%A%A   :' (899 9  '(Nf(N(NOO Orbrc|r|jn|j}|r+||}|||S||jkr|jS|||}||_||_|jSrY)rrr*r0rr)rrrrr-s rFrzNormalizer.normalizes-= OD ) )4<   ?%%f--F..vv>> > T\ ! !* *00@@  ",&&rbN) rrrr classmethodrrr staticmethodr*r0rrrrbrFrr]s     T   [  G    \ w4\ ' '4 'D ' ' ' ' ' 'rbrc eZdZdZddddddddededeeegeffded e d e f fd Z d Z ddede fdZdde de fdZ d dede de de de ddf dZdZdZdZdeede fdZxZS)!ConfigNT)r[ config_readerr disclaimercached permissionsr[r7rr8r9r:ct|s|sJ|rtnt}|p|||p|j||_|jj|_|pt|_t|j|_ dS)N)r8r:) superrrr DISCLAIMER_config_readerr[rrr _normalizer) rr[r7rr8r9r:config_reader_cls __class__s rFrzConfig.__init__s $}$$$28J..l+ /@/@ !4T_#0 0 0  ', !2!H6H%d&<==rbcZd|jj|j|jS)NzW<{classname}(config_reader={config_reader!r}, validation_schema={validation_schema!r})>) classnamer7r)rDrArr>rrs rF__repr__zConfig.__repr__s6  &n1-"4    rbFrr?c8|j||SrY)r?rrs rFrzConfig.normalizes))&2BCCCrbrc|j|}|r||}t|S)zr Converts config file to dict :return dict: dictionary (key (section) / value (options)) )r)r>read_config_filerr)rrrrs rFrqzConfig.config_to_dictsD $555LL  ,^^F++Frbrrrrrcr|r|||||dS|||||dS)a Converts dict to config file New options will be mixed in with old ones unless overwrite is specified :param dict data: dictionary (key (section) / value (options)) :param bool validate: indicates if we need validation :param bool normalize: normalize config :param overwrite: overwrite existing conf :param without_defaults: do not fill defaults :return: None )rrrrN)_dict_to_config_overwrite_dict_to_configrs rFrzConfig.dict_to_configst(    * *!#!1 +       !#!1 !     rbc|r t||j|r|||}|j|dSNr)rrrrr>write_config_file)rrrrrs rFrIz Config._dict_to_config_overwritesb  D  % %dD,B C C C  K>>$9I>JJD --d33333rbc t|j}t||rW|r t||j|r|||}|j|dSdSrL) rr>rGrrrrrrN)rrrrrrs rFrJzConfig._dict_to_configs$->>@@AA FD ) ) : J ))&$2HIII -=(   1 1& 9 9 9 9 9 : :rbc |jd}nB#t$r5}d}td||t ||i|d}~wwxYw t ||jdS#t$r5}d}td||t ||i|d}~wwxYw)z/ :raises ConfigsValidatorError F) ignore_errorszError during config validationz%s: %sNz+Imunify360 config does not match the scheme) r>rGrrserrorConfigsValidatorErrorrrrr)r config_dictrEmessages rFrzConfig.validates @->>#?KK @ @ @6G LL7A . . .'w88a ? @  @  % %k43I J J J J J$ @ @ @CG LL7A . . .'w88a ? @s, A0AA! B C 0B==Crc6|j|SrY)r>rrs rFrzConfig.modified_since"11)<<>> > $ > !(2w;*?!?@ >>>>>>>>>.    DDDDDDDD     $     !& !!!! !  !  ! !!!!F444 : : :@@@(==D========rbr5) metaclassceZdZfdZxZS) UserConfigc||_tjtj|tj}t|t||tdS)N)r[r7r) rorZr[r\rrrr<rrr)rror[rAs rFrzUserConfig.__init__sl  w||  x)C   *4::4      rbrrrrrXrYs@rFr\r\s8          rbr\c eZdZddddedeffdZ dded ed efd Z dd ed edededed df dZ ddZ ddeded efdZ de e d efdZxZS) SystemConfigN) local_config merged_configrarbct|p t|_|p t |_dSrY)r<r LocalConfig _local_config MergedConfig_merged_config)rrarbrAs rFrzSystemConfig.__init__,sC ):[]]+=|~~rbTFrrr?c:|j||S)Nrr)rgrqrs rFrqzSystemConfig.config_to_dict3s)"11J2   rbrrrrcD|j|||||dSN)rrrr)rerrs rFrzSystemConfig.dict_to_config:s= )) - *     rbc8|jdSrY)rgrrs rFrzSystemConfig.validateJs $$&&&&&rbrc:|j||S)N)rr)rgrrs rFrzSystemConfig.normalizeMs*",,,<-   rbrc6|j|SrY)rgrrs rFrzSystemConfig.modified_sinceTrWrbrTTFTrr)rrrr5rrrrqrrrrrrrrXrYs@rFr`r`+sc(,d>>>%>=C>>>>>>:?   26     !%                ''''9>   15     ==D========rbr`ror[c|r%t|tst|S|rt|St S)Nrnr[)rrAr\r5r`)ror[s rFconfig_file_factoryrrXsQ 8S118,,,, 4    ~~rbctt}|jD]}||rdSdS)NTF)Mergerget_layer_nameslayersr)rmergerlayers rFany_layer_modified_sincerydsS F**,, - -F    * * 44  5rb)r[r8r:)r7c eZdZdZejddddddedeee geffde ffdZ dd ed e d e d e de ddf fd Z xZS)rdzt Config (/etc/sysconfig/imunify360/imunify360.config) should contain options changed by a customer only NFr[r7rr8r9r7rr8cTt|||||dS)Nr{r<r)rr[r7rr8r9rAs rFrzLocalConfig.__init__|s? '/!      rbTrrrrrr?cPt|||||Srk)r<r)rrrrrrrAs rFrzLocalConfig.dict_to_configs5ww%% - &   rbro)rrrrrrrrrr r rrrrXrYs@rFrdrdvs (&*CG   $  !(2w;*?!?@         (!%                      rbrdceZdZejejejZ dZ d dZ e dZ d dZe defdZdS) BaseMergerz90-local.configFc<|_fd|D_dS)Ncvg|]5}ttjj|6S)rq)r5rZr[r\DIR)r r"rs rF z'BaseMerger.__init__..sC   :>F TXt44 5 5 5   rb)_include_defaultsrv)rnamesinclude_defaultss` rFrzBaseMerger.__init__s9!1    BG    rbctj|jr&t tj|jngSrY)rZr[isdirrsortedlistdirr"s rFruzBaseMerger.get_layer_namess6.0gmmCG.D.DLvbj))***"Lrbcg}|jr>ttid}|||fd|jDz }||S)NFrMc>g|]}|dS)Fri)rq)r rxrs rFrz.BaseMerger.configs_to_dict..s<     5Z H H   rb)rrrrappendrv_build_effective_config)rrlayer_dict_listdefaultss ` rFconfigs_to_dictzBaseMerger.configs_to_dicts  ! -!"455??U@H  " "8 , , ,        ++O<< ? ?C)    MM[M = = = = d   [   rbrc$eZdZdeffd ZxZS) MutableMergerrct||j}|d|}t|ddSNTr)rrr<rrridxrAs rFrzMutableMerger.__init__sE%!788dsd  66666rbrrrrrrXrYs@rFrrsD7h7777777777rbrc$eZdZdeffd ZxZS)ImmutableMergerrct||j}||d}t|ddSNFr)rrr<rrs rFrzImmutableMerger.__init__sE5$"899cdd  77777rbrrYs@rFrrsD8h8888888888rbrc$eZdZdeffd ZxZS) NonBaseMergerrcNt|ddSrr}rrrAs rFrzNonBaseMerger.__init__s& 77777rbrrYs@rFrrsD8h8888888888rbrc4eZdZfdZedZxZS)rtcNt|ddSrr}rs rFrzMerger.__init__s& 66666rbcLt}||}|} t|||ddS#t tf$rt dYdSwxYw)NF)rzConfig file is invalid!) rfrurrrrrSrrswarning)r"rbrwrTs rFupdate_merged_configzMerger.update_merged_configs$ S((**++,,..  F  % %k 2 2 2  ( (u ( E E E E E&'<= 6 6 6 NN4 5 5 5 5 5 5 6sA44+B#"B#)rrrrr2rrXrYs@rFrtrtsZ77777 F F[ F F F F Frbrtc,eZdZeddfd ZdZxZS)r,T allow_unknownpurge_readonlyc@tj|||d|dS)z Initialises ConfigValidator(Validator) for more details on Validator params please check https://docs.python-cerberus.org/en/stable/validation-rules.html rNr})rrrargskwargsrAs rFrzConfigValidator.__init__sB  ')        rbch|jdiddrdS|S)Nr%enableFT) root_documentrr)rrs rF(_normalize_coerce_user_override_pd_rulesz8ConfigValidator._normalize_coerce_user_override_pd_ruless7   ! !, 3 3 7 7% H H 4 rb)rrrrrrrXrYs@rFr,r,sY%        &rbr,c"eZdZdejzZdS) Packagingz/opt/imunify360/venv/share/%sN)rrrrrDATADIRrrbrFrrs- /var/imunify360/files/geo/v1/GeoLite2-Country-Locations-en.csvc,d|S)Nz2/var/imunify360/files/geo/v1/CountrySubnets-{}.txt)rD) country_codes rFcountry_subnets_filez CountryInfo.country_subnets_file8sCJJ    rbN)rrrDB LOCATIONS_DBr3rrrbrFrr1s? =B I  \   rbrcjeZdZejdedejzZe ddZ dS)SentryIMUNITY360_SENTRY_DSNz %s/sentryERROR_REPORTINGrN) rrrrZgetenvrlrrDSNrENABLErrbrFrr?sL ")-L!M!M  CZ)8 4 4FFFrbrceZdZdZdZdZdZdZeddZ eddZ eddZ edd Z edd Z edd Zd Zd ZdZeddZeddZeddZeddZeddZeddZeddZeddZeddZeddZedZeddZdS)Malwarei,rrrMALWARE_SCANNINGenable_scan_inotifyenable_scan_pure_ftpdsends_file_for_analysiscloud_assisted_scan rapid_scancrontabsz$/var/imunify360/aibolit/scans.pickleiz/var/imunify360/cleanup_storageMALWARE_CLEANUPtrim_file_instead_of_removalrwrxkeep_original_files_daysscan_modified_filesmax_signature_size_to_scanmax_cloudscan_size_to_scanmax_mrs_upload_file,rapid_scan_rescan_unchanging_files_frequency hyperscanMALWARE_DATABASE_SCANrenable_scan_cpaneldisable_cloudav db_timeoutN)rrrSCAN_CHECK_PERIODCONSECUTIVE_ERROR_LIMITINOTIFY_SCAN_PERIODCONFIG_CHECK_PERIODCONFLICTS_CHECK_PERIODrINOTIFY_ENABLED PURE_SCAN SEND_FILESCLOUD_ASSISTED_SCAN RAPID_SCANCRONTABS_SCAN_ENABLED SCANS_PATHFILE_PREVIEW_BYTES_NUMCLEANUP_STORAGE CLEANUP_TRIM CLEANUP_KEEPSCAN_MODIFIED_FILESMAX_SIGNATURE_SIZE_TO_SCANMAX_CLOUDSCAN_SIZE_TO_SCANMAX_MRS_UPLOAD_FILE,RAPID_SCAN_RESCAN_UNCHANGING_FILES_FREQUENCY HYPERSCANDATABASE_SCAN_ENABLEDCPANEL_SCAN_ENABLEDrCLEANUP_DISABLE_CLOUDAVMDS_DB_TIMEOUTrrbrFrrFs   j!35JKKO -/FGGI.0IJJJ$*%79NOO. ==J&J'9:FF7J'7O:!-L:!)L%*"$ ",8""",8""%*%79NOO3=:J440 -{;;I&J'>II$*%79MNN*l+<==Z 7FFNNNrbrceZdZeZeZeZeZdS)MalwareScanScheduleIntervalN)rrrNONEDAYWEEKMONTHrrbrFrrzs" D C D EEErbrceZdZdZdZdZeddZeddZeddZ edd Z d S) MalwareScanSchedulez8/usr/bin/imunify360-agent malware user scan --backgroundz!/etc/cron.d/imunify_scan_schedulezS# DO NOT EDIT. AUTOMATICALLY GENERATED. 0 {0} {1} * {2} root {cmd} >/dev/null 2>&1 MALWARE_SCAN_SCHEDULEintervalrhour day_of_week day_of_monthN) rrrCMD CRON_PATH CRON_STRINGrINTERVALHOUR DAY_OF_WEEK DAY_OF_MONTHrrbrFr r s DC3IKz'H :'   D*'K:'LLLrbr ceZdZeddZeddZeddZeddZeddZeddZ d S) MalwareScanIntensityMALWARE_SCAN_INTENSITYcpurioram user_scan_cpu user_scan_io user_scan_ramN) rrrrCPUIORAMUSER_CPUUSER_IOUSER_RAMrrbrFr.r.s *(   C (   B *(   Cz(Hj(Gz(HHHrbr.c\eZdZeddZeddZeddZdS)FileBasedResourceLimitsRESOURCE_MANAGEMENT cpu_limitrio_limit ram_limitN)rrrrr6r7r8rrbrFr=r=sf *%   C %   B *%   CCCrbr=c(eZdZeddZdS) KernelCare KERNELCAREedfrN)rrrrEDFrrbrFrCrCs* *   CCCrbrCctj}|Rtjdtjdtjdtjdi}|tj dS|S)Nr1r-rr) rrrrrrrrrr r))rfreqs rFget_rapid_rescan_frequencyrIsU  @E } ' ,a ' -q ' ,a ' +R   xx+4a888 LrbceZdZdZejedZejedZejeddZ ejeddZ ejeddZ ejeddZ ejedd Z d S) MalwareSignaturesz/var/imunify360/files/sigs/v1/rfxni360aibolitzai-bolit-hoster-full.dbrzmds-ai-bolit-hoster.dbz procu2.dbz mds-procu2.dbN)rrr_dirrZr[r\RFXNrMAI_BOLIT_HOSTERAI_BOLIT_HYPERSCANMDS_AI_BOLIT_HOSTERPROCU_DB MDS_PROCU_DBrrbrFrKrKs +D 7<<f % %D 7<<f % %Dgll44MNNOdI{CC',, i1w||D)[99H7<<iAALLLrbrKcJeZdZeddZeddZdZdZdS)LoggerLOGGERmax_log_file_sizer backup_countiiN)rrrrMAX_LOG_FILE_SIZE BACKUP_COUNT LOG_DIR_PERM LOG_FILE_PERMrrbrFrWrWsU" ":L LMMMrbrWceZdZdZdZdS)rurnon_rootN)rrrrvNON_ROOTrrbrFrurus DHHHrbruceZdZdZdZdS)UIRoleclientadminN)rrrCLIENTADMINrrbrFrcrcs F EEErbrcceZdZdZdZdS)NoCPz/etc/imunify360/scripts/domainsr1N)rrr CLIENT_SCRIPTLATEST_VERSIONrrbrFriris5MNNNrbriceZdZfdZxZS)CustomBillingConfigctjdtj}t |tdS)Nrr[r)rZr[r\rrr<rCONFIG_SCHEMA_CUSTOM_BILLING)rr[rAs rFrzCustomBillingConfig.__init__sSw|| ')K   )E      rbr^rYs@rFrmrms8         rbrmc~eZdZeddeZeddeZeddeZeddeZdS) CustomBillingrrrwrxrrrrN) rrrrrm UPGRADE_URLUPGRADE_URL_360 NOTIFICATIONS IP_LICENSErrbrFrrrrs* &K !j  &O J &&M  &JJJrbrrceZdZeddZeddZeddZeddZeddZeddZ d S) PermissionsConfig PERMISSIONSuser_ignore_listrallow_malware_scanuser_override_malware_actionsuser_override_proactive_defense*allow_local_malware_ignore_list_managementuse_plesk_service_planN) rrrrUSER_IGNORE_LISTALLOW_MALWARE_SCANUSER_OVERRIDE_MALWARE_ACTIONSUSER_OVERRIDE_PROACTIVE_DEFENSE*ALLOW_LOCAL_MALWARE_IGNORE_LIST_MANAGEMENTUSE_PLESK_SERVICE_PLANrrbrFryry's!z!$#%/J&E%%%!'1j0'''#2<;222.(Z'rbrycBeZdZeddZeddZdS)MyImunifyConfigr%rrpurchase_page_urlN)rrrrENABLEDPURCHASE_PAGE_URLrrbrFrrAsKjG# "rbrcBeZdZeddZeddZdS)ControlPanelConfig CONTROL_PANELsmart_advice_allowedradvice_email_notificationN)rrrrSMART_ADVICE_ALLOWEDADVICE_EMAIL_NOTIFICATIONrrbrFrrLsL%:%!+ *!!!rbrcgd}tjtjd||fdfd|D}t ||jS)N)BACKUP_RESTORErrrPROACTIVE_DEFENCErzr%r))rdefault_action)rmodec>t|}t |i}i}|D]?\}}||}|||fdr|||<:|||<@|S)NT)rrrr%) rw admin_options user_optionsresulting_dictrx admin_valuer{ admin_dict overridable user_dicts rFnormalize_sectionz0effective_user_config..normalize_sectionos !8!899  gr : :;; #0#6#6#8#8 5 5 FK%))&11J&OOWf$5t<<'*4v&&)4v&&rbc(i|]}||Srr)r rwrs rFr#z)effective_user_config..s407""7++rb)ryrrrqfm_config_cleanupro) admin_configryallowed_sectionseffective_configrrrrs @@@@rFeffective_user_configrWs     :  <  K,,..J**,,I";K -{/C D DDrbc:eZdZdxZ\ZZZZZeeeefZ e re neZ dS) HookEvents)agentlicensezmalware-scanningzmalware-cleanupzmalware-detectedN) rrr IM360_EVENTSAGENTLICENSErrMALWARE_DETECTED IMAV_EVENTSrEVENTSrrbrFrrsS  L   K + <[[ FFFrbrc0eZdZdeeeffdZdZdS)rSconfigs_to_errorsc||_dSrY)r)rrs rFrzConfigsValidatorError.__init__s!2rbcg}|jD]\}}||d| d|S)Nz:  )rr%rr\)rr.rrRs rFrDzConfigsValidatorError.__repr__s^!399;; 2 2MFE MMV0000 1 1 1 1yy   rbN)rrrr r5r rrDrrbrFrSrSsG3$vs{*;3333!!!!!rbrSceZdZdZedZedZeefdede ee fddfdZ e de e e fde fd ZdS) rz@A class that has methods to validate configs bypassing the cachecFtdS)zN Validate merged config :raises ConfigsValidatorError N)r`rrs rFvalidate_system_configz'ConfigsValidator.validate_system_configs !!!!!rbci}ttjD]H} |#t$r$}||jYd}~Ad}~wwxYw|rt |dS)zf Validate all config layers, collect all errors :raises ConfigsValidatorError N)rtrurvrrSupdater)r"rrxrEs rFvalidate_config_layersz'ConfigsValidator.validate_config_layerss F224455< > >E >    ( > > >!(()<======== >  ;'(9:: : ; ;sA A4A//A4rTrr?Nc||}t|}||st|jdS)z Validate config represented by a dict :param config_dict: config to validate :param validation_schema: schema to validate config against :raises ConfigValidationError N)rr,rrr.)r"rTrrvs rFrzConfigsValidator.validatesS**+<== F # #zz+&& 2'11 1 2 2rbc8t|r |S|SrY)callable)rs rFrz&ConfigsValidator.get_validation_schemas* % & & '$$&& &  rb)rrrrr2rrrrrr rr3rrrrbrFrrsJJ""[" ; ;[ ;4F222!x02  222[2"! (!23! !!!\!!!rbrc(eZdZeddZdS) AdminContactsADMIN_CONTACTSenable_icontact_notificationsrN)rrrrENABLE_ICONTACT_NOTIFICATIONSrrbrFrrs-$.J .%%%!!!rbrc eZdZdZdZdZdZdS)IContactMessageType MalwareFoundScanNotScheduledGenericc|jSrY)rrs rF__str__zIContactMessageType.__str__s zrbN)rrr MALWARE_FOUNDSCAN_NOT_SCHEDULEDGENERICrrrbrFrrs3"M+Grbr BACKUP_SYSTEMF)rr#rallowed)enabled backup_systemcfeZdZdZejdeje dfd Z xZ S) BackupConfigaW# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # DO NOT EDIT. AUTOMATICALLY GENERATED. # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # # Direct modifications to this file WILL be lost upon subsequent # regeneration of this configuration file. # # To have your modifications retained, you should use CLI command # imunify360-agent backup-systems # or activate/deactivate appropriate feature in UI. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # rrocNt||dS)Nror})rr[rrAs rFrzBackupConfig.__init__"s) d6GHHHHHrb) rrrr=rZr[r\rrCONFIG_SCHEMA_BACKUP_SYSTEMrrXrYs@rFrrsvJ(W\\ ')C  6 IIIIIIIIIIIrbrceZdZeddeZeddeZeddZeddZe d Z d S) BackupRestorerrrsrrcl_backup_allowedrcl_on_premise_backup_allowedc*t|jSrY)_get_backend_system_BACKUP_SYSTEMrs rFrzBackupRestore.backup_system?s"3#5666rbN) rrrrrrrCL_BACKUP_ALLOWEDCL_ON_PREMISE_BACKUP_ALLOWEDr2rrrbrFrr-sj lG ZN #  "$.: -$$$ 77[777rbrctddlm}|ttfvrt}n|dS||dS)zo Get backup module from its name :param name: backup system name :return: backup system module r)backup_backendsNT)async_)restore_infectedr CLOUDLINUXCLOUDLINUX_ON_PREMISEACRONISbackend)r"rs rFrrDsQ 100000 1222 t  " "4 " 5 55rbceZdZdZdZdhZdS) AcronisBackupzacronis-installer.log)i ii)iZixN)rrrLOG_NAMEPORTSRANGErrbrFrrUs!'H E NEEErbrcFtdd|\}}tjo|S)zs Checks is Agent should try restore malware file firts and returns user that set this action in config rtry_restore_from_backup_first)r}rr)ro try_restore_s rF should_try_autorestore_maliciousr]s/ .;XNK  0[0rbcvtdd|\}}tjt|z }|S)Nrmax_days_in_backup)days)r}rnowr)romax_daysruntils rF"choose_use_backups_start_from_daterhs?*.KHa LNNYH555 5E Lrbc0tdd|\}}|S)Nrgeneric_user_notificationsrn)r})ro should_sendrs rFshould_send_user_notificationsrps+-$NK rbceZdZdZdZdZdZdS) HackerTraprzmalware_found_b64.listzmalware_standalone_b64.listz%/opt/imunify360/proactive/dangerlist/N)rrrrrSA_NAMEDIR_PDrrbrFrrys" C #D+G 4FFFrbrrYr)r functoolsloggingrZabcrbisectrrcopyrrrenumr pathlibr typingr r r rrrrrrrrcerberusr)defence360agent.contracts.config_providerrrrrr+defence360agent.feature_management.checkersrrdefence360agent.utilsrrrrrr getLoggerrrsrrrMY_IMUNIFY_KEYrrdrrNOTIFYCLEANUPrrrrDEFAULT_INTENSITY_CPUDEFAULT_INTENSITY_IODEFAULT_INTENSITY_RAM%DEFAULT_RESOURCE_MANAGEMENT_CPU_LIMIT$DEFAULT_RESOURCE_MANAGEMENT_IO_LIMIT%DEFAULT_RESOURCE_MANAGEMENT_RAM_LIMITMODSEC_RULESET_FULLMODSEC_RULESET_MINIMAL_DOS_DETECTOR_DEFAULT_LIMIT_DOS_DETECTOR_MIN_LIMIT_DOS_DETECTOR_MIN_INTERVALPORT_BLOCKING_MODE_DENYPORT_BLOCKING_MODE_ALLOWDO_NOT_MODIFY_DISCLAMERDEFAULT_CONFIG_DISCLAMERCPANELPLESK DIRECTADMINrR1SOFT CLUSTERLOGICSSAMPLE_BACKENDrrGENERIC_SENSOR_SOCKET_PATHr rArGrrWrarerlr}rrrr lru_cacherrrp Exceptionrrrr rrr5r\r`rrrypartialrrrfrdrrrrrtr,rrrrrrrrr r.r=rCrIrKrWrurcrirmrrryrrrrrSrrprrrrrrrrrrrrrbrFr*s ,,,,,,,,((((((((                          HGGGGGGGGG X\    8 $ $$X_W---A 8< -    !TJNN">&7c4()%'($(+%"! " >{!E$I! !M<>:DDDsDD#DDDD-/J    ")      (<<<MMM7777"111( A A A A A A A A-1Q-- -Q77 7 !  !    /8D%I%I#,>>   ! ,     I   "/"/"/"/"/"/"/"/J'<'<'<'<'sm 4!y  ''  )*6 % % % % % &% % % P((((((((V77777J77788888j88888888J888 FFFFFZFFF"i4========&LLLLLLLL                 555555551G1G1G1G1G1G1G1Gh26            B B B B B B B B               &   .4-E-E-E`========.!!!!!I!!!3!3!3!3!3!3!3!3!l! #t"  ! )!"     ,1<IIIII6III:77777777.666"1s1t1111ST5555555555rb