????
Your IP : 18.118.218.112
�
��g�7���ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl
mZddlm
Z
mZddlmZddlmZddlmZddlZddlZddlZddlZddlmZddlmZdd lmZdd
lm Z m!Z!m"Z"m#Z#m$Z$ddl%m&Z&ddl'm(Z(dd
l)m*Z*m+Z+m,Z,ddl-m.Z.ddl/m0Z0ddl1m2Z2ddl3m4Z4ddl5m6Z6ddl7m8Z8m9Z9m:Z:ddl;m<Z<ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCddlDmEZEddlFmGZGddlHmIZImJZJddlKmLZLddlMmNZNddlOmPZPddlQmRZRddlSmTZTddlUmVZVddlWmXZXd ZYed!e#jZz��Z[d"Z\d#Z]d$Z^ej_d%��Z`eJeI�&��e`ja��ZbGd'�d(��Zcd)�Zdd*eefd+�Zfe
d,���Zgd-�Zhd.�Zid/�Zjd0�Zkd1�Zld2�Zmd3�Znd4�Zod*ee6eeeeffd5�Zpd6�Zqd7�Zrd8eed*dfd9�Zsd:�Zteud;kr!et��e`�vd<��dSdS)=�N)�ThreadPoolExecutor)�contextmanager�suppress)�partial)�Path)�Tuple)�
AlreadyLocked)�files)�health)�ConfigsValidator�Core�Merger�Model�is_mi_freemium_license)� HookEvent)�
LicenseCLN)�
BasePlugin�MessageSink�
MessageSource)�subscribe_to_license_changes)�g)�IndependentAgentIDAPI)�
CoreSource)�TheSink)�instance�simplification� tls_check)�systemd_notifier)�Scope�Task�create_task_and_log_exceptions�importer�is_root_user�is_systemd_boot)�is_db_corrupted)�EXITCODE_GENERAL_ERROR)�DAY�
rate_limit)�flush_sentry)� configure)�IPSET_LISTS_PATH)�ip_versions)�IM360Source)�features)�AVSourcei4z%s.is_corruptedz�Imunify360 database is corrupt. Application cannot run with corrupt database. Please, contact Imunify360 support team at https://cloudlinux.zendesk.com)z"defence360agent.plugins.accumulatezim360.plugins.residentzim360.plugins.protectorzim360.plugins.sensorz(/var/run/defence360agent/simple_rpc.sock�resident)�periodc��eZdZd�Zd�ZdS)�TaskFactoryc�,�t��|_dS�N)�set�pool)�selfs �G/opt/imunify360/venv/lib/python3.11/site-packages/im360/run_resident.py�__init__zTaskFactory.__init__\s���E�E�� � � �c��t||���}|j�|��|�|jj��|S)N��loop)r r7�add�add_done_callback�discard)r8r>�coro�tasks r9�__call__zTaskFactory.__call___sF���D�t�$�$�$��� �
�
�d�������t�y�0�1�1�1��r;N)�__name__�
__module__�__qualname__r:rD�r;r9r3r3[s2�������������r;r3c���tjtjtj��5}|�d�� |�t
��n=#ttf$r)t� d��Yddd��dSwxYwtjdgid���dz}|�|�
����ddd��dS#1swxYwYdS)N�zRPC socket isn't available yet�update)�command�params�
)�socket�AF_UNIX�SOCK_STREAM�
settimeout�connect�SIMPLE_RPC_SOCKET�FileNotFoundError�ConnectionRefusedError�logger�error�json�dumps�sendall�encode)�sock�msgs r9�request_install_filesr_fs@�� ��v�~�v�'9� :� :�#�d�������� ��L�L�*�+�+�+�+��!�#9�:� � � ��L�L�9�:�:�:��
#�#�#�#�#�#�#�#� �����j�h�Z�2�>�>�?�?�$�F�����S�Z�Z�\�\�"�"�"�#�#�#�#�#�#�#�#�#�#�#�#����#�#�#�#�#�#s6�C(�A�C(�+B�C(�B�AC(�(C,�/C,�returnc��tjtjtjzt
jz��tjt��td�tj ��D��d����S)z$Return plugins in unspecified order.c�b�g|],}|jtju�t��r|j�*|��-SrH)�SCOPEr�AVr�AVAILABLE_ON_FREEMIUM)�.0�plugins r9�
<listcomp>zget_plugins.<locals>.<listcomp>zsJ��
�
�
���|�5�8�+�+�+�-�-�,�17�1M�,�
�+�+�+r;c�$�|j�d|j��S)N�.)rFrE)�items r9�<lambda>zget_plugins.<locals>.<lambda>�s��D�O�=�=�d�m�=�=�r;��key)
r"�
load_packagesr�MESSAGESr/r-�IM360_RESIDENT_PLUGINS_PACKAGES�sortedr�get_active_pluginsrHr;r9�get_pluginsrtrs�������h�/�/�+�2F�F����
��:�;�;�;��
�
�$�7�9�9�
�
�
�
>�=����r;c#�K� dV�dS#t$r;}t�d||��tj|��Yd}~dSd}~wwxYw)z)Log *message* on any error & suppress it.Nzcaught error %r on %s)� ExceptionrWrX�
sentry_sdk�capture_exception)�message�es r9�log_and_suppress_errorr{�sq����(�
��������(�(�(����,�a��9�9�9��$�Q�'�'�'�'�'�'�'�'�'�����(���s�
�
A�0A
�
Ac��K�tj��r tj���dStj���dSr5)r�is_validr�sensor�
registered�unregisteredrHr;r9�update_health_sensorr��sK��������%��
� � �"�"�"�"�"��
�"�"�$�$�$�$�$r;c��K�tj��ttj��tt
��tj�d� tj����dS)NzATTACH '{}' AS proactive)r,�initrr.�update_reposr�r�db�execute_sql�formatr�PROACTIVE_PATHrHr;r9�init_actionsr��so��������� ��!6�7�7�7� �!5�6�6�6��K���"�)�)�%�*>�?�?�����r;c�<�tjd���}|�ddddd���|�d d
d���|�d
dd���|�dd���|�tjdd���S)NzRun imunify agent)�descriptionz-v�verbose�countrz�Level of logging. Each value corresponds to:1 - console only log level,2 - previous plus add network log,3 - all previous plus add process message log,4 - all previous plus add debug log)�dest�action�default�helpz--daemon�
store_truez
run as daemon)r�r�z --pidfilez/var/run/imunify360.pidzuse with --daemon)r�r�z--log-configzlogging config filename)r��)�argparse�ArgumentParser�add_argument�
parse_args�sys�argv)�parsers r9� parse_clir��s���
�
$�1D�
E�
E�
E�F�
����
���
2�
�������
�<�o��N�N�N�
����)�
�����
����-F��G�G�G����S�X�a�b�b�\�*�*�*r;c���ttj���r�t���s9t
�t��t���nt
� t��tjt��dStt��5t���ddd��dS#1swxYwYdS)N)�db_path)r%r�
RESIDENT_PATH�_DB_IS_CORRUPTED_FLAG�existsrWrX�_DB_IS_CORRUPTED_MSG�touch�warningr��exitr&rrU�unlink)�pidfiles r9�_check_able_to_startr��s���u�2�3�3�3� +�$�+�+�-�-� 1��L�L�-�.�.�.�!�'�'�)�)�)�)��N�N�/�0�0�0���'�(�(�(�(�(�
�'�
(�
(� +� +�!�(�(�*�*�*� +� +� +� +� +� +� +� +� +� +� +� +���� +� +� +� +� +� +s�;C"�"C&�)C&c��t�d|��tj��}tj�|��|_d|_tj|_ t��rd|_nd|_tj
j���|_ |���nC#t"$r6t�d��t'jt*��YnwxYwt-j��tj
j���dS)NzRun as daemon [pidfile = %s]FTz*PID file already locked by another process)rW�info�daemon�
DaemonContextr��PIDLockFile�prevent_corer
�
FILE_UMASK�umaskr$�detach_process�defence360agent� internals�get_fds�files_preserve�openr rXr�r�r&�gc�collect�reconfigure)�pidfilepath�dcs r9�
_daemonizer��s
��
�K�K�.��<�<�<� � � � �B���+�+�K�8�8�B�J��B�O���B�H����!�!���� ���'�1�8�@�@�B�B�B��)�
��� � � � ���)�)�)����A�B�B�B���'�(�(�(�(�(�)�����J�L�L�L���$�0�0�2�2�2�2�2s�1C�=D�Dc�j�|�tj|tj����dSr5)�run_until_completer�run_in_executorr�resetr=s r9�_tls_check_resetr��s6������&�t�Y�_�=�=�����r;c�j� tj��dS#t$r�}ddlm}tjt|�����}|�||����t�
t|����tj
t��Yd}~dSd}~wwxYw)Nr)�
execute_hooks)rX)r�validate_config_layersrv�defence360agent.hooks.executer�r�AgentMisconfig�reprr�rWr��strr�r�r&)r>rzr��agent_misconfigs r9�validate_configs_on_startr��s���)��/�1�1�1�1�1���)�)�)�?�?�?�?�?�?�#�2��a���A�A�A�����
�
�o� >� >�?�?�?����s�1�v�v������'�(�(�(�(�(�(�(�(�(�����
)���s��
B2�BB-�-B2c� ���fd�|D��S)Nc�4��g|]}t|����|��SrH)�
isinstance)rf�p�pclasss �r9rhz$plugin_instances.<locals>.<listcomp>�s(���5�5�5�!�z�!�V�4�4�5�A�5�5�5r;rH)�objsr�s `r9�plugin_instancesr��s���5�5�5�5�t�5�5�5�5r;c���d�|D��}t|t��}|D]E}t�d|��|�|�|�����Ft
||��}t|t��}|D]F}t�d|��|�|�||�����G|� ��|||fS)Nc�"�g|]}|����
SrHrH)rf�plugin_classs r9rhz"_start_plugins.<locals>.<listcomp>�s��A�A�A�,�|�|�~�~�A�A�Ar;zCreating sink %rzCreating source %r)
r�rrWr�r��create_sinkrr�
create_source�start)r>�plugin_classes�plugins�sinks�s�the_sink�sourcess r9�_start_pluginsr��s���A�A�.�A�A�A�G�
�W�k�2�2�E�
�5�5�����&��*�*�*�����
�
�d� 3� 3�4�4�4�4��u�d�#�#�H��w�
�6�6�G�
�A�A�����(�!�,�,�,��������h� ?� ?�@�@�@�@��N�N�����U�G�#�#r;c����d���fd�}tjtjtjtjfD]}|�||||���dS)NFc����s/d�t�d|��t|����dSt�d|��dS)NTz Caught %sz9Caught %s. Shutdown task is already running, please wait.)rWr�r!)r>�sig�called�shutdowntasks ��r9�_sighandlerz+_setup_signal_handlers.<locals>._sighandlers]���� ��F��K�K��S�)�)�)�3�D�,�G�G�F�F�F��K�K�K��
�
�
�
�
r;)�signal�SIGINT�SIGTERM�SIGUSR1�SIGUSR2�add_signal_handler)r>r�r�r�r�s ` @r9�_setup_signal_handlersr�sp����
�F��������
�v�~�v�~�v�~�N�=�=������[�$��<�<�<�<�=�=r;c���K�td��5tj�t j����ddd��n#1swxYwYt
�dtj����dtd<td��5tj
���tj
d��4�d{V��tjtj
���|������d{V��ddd���d{V��n#1�d{V��swxYwYddd��n#1swxYwYt#|d����D]s}td ��5t
�d
|jj|jj��|����d{V��ddd��n#1swxYwY�ttd��5t+j���d{V��ddd��n#1swxYwYtjd��x}�Atd
��5tj|���d{V��ddd��n#1swxYwYtd��5|���ddd��n#1swxYwYt3��t
�dtj����dS)Nz)marking the start of the shutdown processzshutdown task starting, pid=%sT�shutdown_startedz4preventing new messages (if any) processing to start�
c��|jSr5)�SHUTDOWN_PRIORITY)r�s r9rlz _shutdown_task.<locals>.<lambda>6s ��A�4G�r;rmz,This happened while shutting down a plugin!!zShutting down %s.%s...zshutting down IAID API�web_server_restart_taskzwaiting for web server restartz
stopping loopzshutdown task finished, pid=%s)r{rr~�
shutting_down�timerWr��os�getpidr�
sensor_server�close�asyncio�timeout�gather�wait_closed�shutdownrr� __class__rFrEr�get�wait_for�stopr))r>r��plugin_listrg�restart_tasks r9�_shutdown_taskr$s����� � K� L� L�1�1��
�#�#�D�I�K�K�0�0�0�1�1�1�1�1�1�1�1�1�1�1����1�1�1�1��K�K�0�"�)�+�+�>�>�>� �A��� �>�
�
� � �
��������?�2�&�&� � � � � � � � ��.���+�+�-�-��!�!�#�#���
�
�
�
�
�
�
� � � � � � � � � � � � � � � � � � � � � � � ���� � � � � � � � � � � � � � � ���� � � � ���*G�*G�H�H�H�$�$��
#�:�
�
�
$�
$�
�K�K�(�� �+�� �)�
�
�
��/�/�#�#�#�#�#�#�#�#�#�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$�
$����
$�
$�
$�
$��
� 8� 9� 9�/�/�#�,�.�.�.�.�.�.�.�.�.�/�/�/�/�/�/�/�/�/�/�/����/�/�/�/���7�8�8�8��E�
#�$D�
E�
E� 1� 1��"�<�0�0�0�0�0�0�0�0�0� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1� 1���� 1� 1� 1� 1�
�� 0� 0���� � �����������������������N�N�N�
�K�K�0�"�)�+�+�>�>�>�>�>s��1A�A�A�9E�A
D4�"E�4
D> �>E�D> �E�E�E�?AG�G �G �1H�H�H�I.�.I2�5I2�J)�)J-�0J-r�c
�B �t��s3t�d��tjt
��t
��}tj� d��dkrdt_tj
j�|j��|jstj� d��rHtj
j�|jptj� d����tjt&��t)|j��|jr7t/|j��t1jt0jj��t8j�t?j����tAj!��st8j�"��tGj$��}tj%��}|�&tOtQd|r|dznd��� ����|�)tU���� tW|��tXj-�.t^j0��tXj-�1d
t^j2f��tXj-�1dtff��ti|��tkj6��|�7|����|�7tqj9����sht�d��tu��|�7tGj;d����tjt
��ty||��\}}}t�d
��t{j>t~j@d���}t�||jB|��t�|t�t�||||z����|�F��t�d��|�G��dS#|�G��wxYw)z�Common function for agent service startup.
plugin_classes is a list of classes implementing message processing
plugins. init_actions is a coroutine that will be called prior to starting
RPC and message processing.z5Imunify agent could be started by the root user only!�DEBUG�trueT�IMUNIFY360_LOGGING_CONFIG_FILE� ��)�max_workerszATTACH ? AS residentzATTACH ? AS ipsetlistsz<Essential files are missing. Try to update them and restart.zMessage Bus started)�versionr0zloop stoppedN)Hr#rWr�r�r�r&r�r��environr�rrr�r��setLogLevelr��
log_config�update_logging_config_from_file�setrecursionlimit�_MAX_RECURSION_DEPTHr�r�r�r�r�notify�
AgentState�
DAEMONIZEDrr~�startingr�r�
is_registeredr�r��get_event_loop� cpu_count�set_default_executorr�min�set_task_factoryr3r�rr�r�r�PATHr�r�r+r�r�update_merged_configr�r
�essential_files_existr_�sleepr�r�AgentStartedr
�VERSIONr!�process_messager�rr�run_foreverr�) r�r��argsr>�_cpur�r�r��
agent_starteds r9r�r�Ss����>�>�)����K�L�L�L���'�(�(�(��;�;�D� �z�~�~�g���&�(�(������$�0�0���>�>�>���
�"�*�.�.�)I�J�J�
��!�(�H�H��O�O�r�z�~�~�.N�O�O�
�
�
���.�/�/�/����&�&�&��{�H��4�<� � � ��� 0� ;� F�G�G�G�
�M���4�9�;�;�'�'�'��#�%�%�%��
�"�"�$�$�$��!�#�#�D�
�<�>�>�D� ����s�2�4�/F�t�a�x�x�Q�'G�'G�H�H�H���� ���+�-�-�(�(�(�*������������$�$�$����� 6��9L�8N�O�O�O����� 8�;K�:M�N�N�N�!�$�'�'�'��#�%�%�%��������/�/�/��&�&�u�'B�'D�'D�E�E� -��K�K�N�
�
�
�
"�#�#�#��#�#�G�M�!�$4�$4�5�5�5��H�+�,�,�,�#1�$��#G�#G� ��%�����)�*�*�*�!�.��L�4�
�
�
�
� '��(�*�M�
�
�
� ��'�.�$��%�'�/�J�J�
�
�
�
���������N�#�#�#�
�
�
��������
�
�������s
�"HR�Rc�l�td���t��}t|t��dS)NT)r0)r*rtr�r�)r�s r9�runr(�s2��
�t������m�m�G� �'�<� � � � � r;�__main__z
agent stopped)wr�r�r�rY�loggingr�r�rOr�r��concurrent.futuresr�
contextlibrr� functoolsr�pathlibr�typingrr��daemon.pidfile� defence360agent.internals.loggerr�rw�lockfiler r
�defence360agent.apir� defence360agent.contracts.configrr
rrr�%defence360agent.contracts.hook_eventsr�!defence360agent.contracts.licenser�!defence360agent.contracts.pluginsrrr�defence360agent.internals.clnr�&defence360agent.internals.global_scoper�defence360agent.internals.iaidr�#defence360agent.internals.lazy_loadr�"defence360agent.internals.the_sinkr�defence360agent.modelrrr�defence360agent.subsysr�defence360agent.utilsrr r!r"r#r$�defence360agent.utils.check_dbr%�defence360agent.utils.clir&�defence360agent.utils.commonr'r(�defence360agent.sentryr)�im360.application.settingsr*�im360.contracts.configr+�im360.internals.corer,�im360.internals.lazy_loadr-�im360.subsysr.�imav.internals.lazy_loadr/rr�r�r�rqrT� getLoggerrWrX�throttled_log_errorr3r_�listrtr{r�r�r�r�r�r�r�r�r�r�rr�r(rEr�rHr;r9�<module>rMs`���������� � � � ��������� � � � �
�
�
�
�
�
�
�
�
�
�
�
�����1�1�1�1�1�1�/�/�/�/�/�/�/�/�������������������
�
�
�
�����'�'�'�'�����"�"�"�"�"�"�!�!�!�!�!�!�&�&�&�&�&�&���������������<�;�;�;�;�;�8�8�8�8�8�8�����������
G�F�F�F�F�F�4�4�4�4�4�4�@�@�@�@�@�@�:�:�:�:�:�:�6�6�6�6�6�6�E�E�E�E�E�E�E�E�E�E�3�3�3�3�3�3�����������������;�:�:�:�:�:�<�<�<�<�<�<�8�8�8�8�8�8�8�8�/�/�/�/�/�/�0�0�0�0�0�0�3�3�3�3�3�3�,�,�,�,�,�,�1�1�1�1�1�1�!�!�!�!�!�!�-�-�-�-�-�-�����.��1D�D�E�E��%��#��?�� �� �:� &� &��,�j�j��,�,�,�V�\�:�:���������� #� #� #��T�����$�(�(���(�%�%�%�
�
�
� +�+�+�2
+�
+�
+�3�3�3�2��� )� )� )�6�6�6�$�E�'�4��2E�,F�$�$�$�$�*=�=�=�(,?�,?�,?�^R�$�R��R�R�R�R�j!�!�!��z����C�E�E�E�
�K�K�� � � � � ��r;