Linux s3.cpanelhost.co.in 5.14.0-611.49.2.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Apr 30 09:05:08 EDT 2026 x86_64
LiteSpeed
: 65.108.44.247 | : 216.73.216.250
Cant Read [ /etc/named.conf ]
7.4.33
teac11783
Bypass.pw
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
Backdoor Scanner
Backdoor Create
Alfa Webshell
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
tmp /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
.sessions
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
X11M-onix
[ DIR ]
drwxr-xr-x
alfacgiapi
[ DIR ]
drwxr-xr-x
bhsocket-1194
[ DIR ]
drwxr-xr-x
.crontab.lock
0
B
-rw-r--r--
.mad-root
0
B
-rw-r--r--
adminer.php
0
B
-rw-r--r--
alf4.php
0
B
-rw-r--r--
copyfail.py
0
B
-rw-r--r--
copyfail_su.py
0
B
-rw-r--r--
fortiweb_msgid.counter
12
B
-rw-r--r--
i360deploy.sh
61.45
KB
-rwxr-xr-x
imgbb_cookie_25ClHy
131
B
-rw-r--r--
imgbb_cookie_2Vm3a2
131
B
-rw-------
imgbb_cookie_B3JVWX
203
B
-rw-------
imgbb_cookie_WynZlY
203
B
-rw-r--r--
imgbb_cookie_ZcDt3e
131
B
-rw-r--r--
imgbb_cookie_k5ef9G
131
B
-rw-r--r--
imgbb_cookie_ncqJU2
203
B
-rw-------
pwnkit
0
B
-rwxr-xr-x
radium.py
9.43
KB
-rw-r--r--
tg_img_051JuG
0
B
-rw-------
tg_img_0LeZ3G
0
B
-rw-------
tg_img_0MfVWi
0
B
-rw-------
tg_img_0PzzFL
0
B
-rw-------
tg_img_0Xj8Ji
0
B
-rw-------
tg_img_0gGgRf
0
B
-rw-------
tg_img_0hZKQx
0
B
-rw-------
tg_img_0nUg1j
0
B
-rw-------
tg_img_0txxYQ
0
B
-rw-------
tg_img_0uUqCp
0
B
-rw-------
tg_img_0wV0Vi
0
B
-rw-------
tg_img_12QHjR
0
B
-rw-------
tg_img_16dCt5
0
B
-rw-------
tg_img_1715l6
0
B
-rw-------
tg_img_1BC6Vv
0
B
-rw-------
tg_img_1CopV8
0
B
-rw-------
tg_img_1Fe9JG
0
B
-rw-------
tg_img_1IGm5V
0
B
-rw-------
tg_img_1MseB5
0
B
-rw-------
tg_img_1alLY7
0
B
-rw-------
tg_img_1etEx1
0
B
-rw-------
tg_img_1mRA8E
0
B
-rw-------
tg_img_1uri63
0
B
-rw-------
tg_img_26xqnz
0
B
-rw-------
tg_img_2AJF9N
0
B
-rw-------
tg_img_2AXZSR
0
B
-rw-------
tg_img_2E62er
0
B
-rw-------
tg_img_2bblQU
0
B
-rw-------
tg_img_2dqA66
0
B
-rw-------
tg_img_2pEfC1
0
B
-rw-------
tg_img_2pajpk
0
B
-rw-------
tg_img_2sgxLD
0
B
-rw-------
tg_img_2ueXLC
0
B
-rw-------
tg_img_2v9fxE
0
B
-rw-------
tg_img_30q852
0
B
-rw-------
tg_img_32BdlG
0
B
-rw-------
tg_img_33BqBL
0
B
-rw-------
tg_img_34gkeN
0
B
-rw-------
tg_img_3BBUDl
0
B
-rw-------
tg_img_3Go7BX
0
B
-rw-------
tg_img_3bUEqx
0
B
-rw-------
tg_img_3dgvOx
0
B
-rw-------
tg_img_3l8kBe
0
B
-rw-------
tg_img_3lhOB8
0
B
-rw-------
tg_img_3m6CCM
0
B
-rw-------
tg_img_3s6j35
0
B
-rw-------
tg_img_3zz6cc
0
B
-rw-------
tg_img_46RXle
0
B
-rw-------
tg_img_46m2gj
0
B
-rw-------
tg_img_47Gfo9
0
B
-rw-------
tg_img_4CiINZ
0
B
-rw-------
tg_img_4RM943
0
B
-rw-------
tg_img_4UflUw
0
B
-rw-------
tg_img_4c5mzW
0
B
-rw-------
tg_img_4rJV7d
0
B
-rw-------
tg_img_4xg16F
0
B
-rw-------
tg_img_56L20p
0
B
-rw-------
tg_img_56OIoZ
0
B
-rw-------
tg_img_5VQaN9
0
B
-rw-------
tg_img_5X1Txo
0
B
-rw-------
tg_img_5cqBVf
0
B
-rw-------
tg_img_5fBNJN
0
B
-rw-------
tg_img_5fODiB
0
B
-rw-------
tg_img_5j41Pn
0
B
-rw-------
tg_img_5nERj0
0
B
-rw-------
tg_img_5nP5Io
0
B
-rw-------
tg_img_5owrC0
0
B
-rw-------
tg_img_5tdkmK
0
B
-rw-------
tg_img_5uPcpI
0
B
-rw-------
tg_img_5wbTB3
0
B
-rw-------
tg_img_5wgCjv
0
B
-rw-------
tg_img_5xOqvO
0
B
-rw-------
tg_img_68Qxwk
0
B
-rw-------
tg_img_6CvRe0
0
B
-rw-------
tg_img_6N9UDB
0
B
-rw-------
tg_img_6YdkFg
0
B
-rw-------
tg_img_6fyhJr
0
B
-rw-------
tg_img_6i55RJ
0
B
-rw-------
tg_img_6pkpQo
0
B
-rw-------
tg_img_6qc5TS
0
B
-rw-------
tg_img_6wjERy
0
B
-rw-------
tg_img_6zHdWR
0
B
-rw-------
tg_img_70BV9n
0
B
-rw-------
tg_img_77E3gS
0
B
-rw-------
tg_img_77HyYb
0
B
-rw-------
tg_img_7Dx2I9
0
B
-rw-------
tg_img_7MhJek
0
B
-rw-------
tg_img_7Rnqz7
0
B
-rw-------
tg_img_7ZGE0d
0
B
-rw-------
tg_img_7iH2sP
0
B
-rw-------
tg_img_7l96jO
0
B
-rw-------
tg_img_7nscXu
0
B
-rw-------
tg_img_7q8vTs
0
B
-rw-------
tg_img_82MXD2
0
B
-rw-------
tg_img_8BR5Ml
0
B
-rw-------
tg_img_8H45ko
0
B
-rw-------
tg_img_8Irtnt
0
B
-rw-------
tg_img_8N5evR
0
B
-rw-------
tg_img_8Sm8u3
0
B
-rw-------
tg_img_8bUp0w
0
B
-rw-------
tg_img_8iYhxr
0
B
-rw-------
tg_img_8jlo6g
0
B
-rw-------
tg_img_8oRX5n
0
B
-rw-------
tg_img_9PLFzT
0
B
-rw-------
tg_img_9R3pxe
0
B
-rw-------
tg_img_9UECPE
0
B
-rw-------
tg_img_9a9WRn
0
B
-rw-------
tg_img_9dFSBb
0
B
-rw-------
tg_img_9fArmS
0
B
-rw-------
tg_img_9fZJ5Z
0
B
-rw-------
tg_img_9knuE7
0
B
-rw-------
tg_img_9luhGw
0
B
-rw-------
tg_img_9mPp5u
0
B
-rw-------
tg_img_9rDrzv
0
B
-rw-------
tg_img_9s4Eyr
0
B
-rw-------
tg_img_9uFtFh
0
B
-rw-------
tg_img_9ybBoK
0
B
-rw-------
tg_img_AGMyOq
0
B
-rw-------
tg_img_AM4VFQ
0
B
-rw-------
tg_img_AO0ZHl
0
B
-rw-------
tg_img_AP2IWR
0
B
-rw-------
tg_img_AVHwCK
0
B
-rw-------
tg_img_AWr08z
0
B
-rw-------
tg_img_Adodbr
0
B
-rw-------
tg_img_AkU84S
0
B
-rw-------
tg_img_AqKn3R
0
B
-rw-------
tg_img_Arho6w
0
B
-rw-------
tg_img_As53be
0
B
-rw-------
tg_img_AuDzV0
0
B
-rw-------
tg_img_B0hAsQ
0
B
-rw-------
tg_img_B14D7x
0
B
-rw-------
tg_img_B7shbk
0
B
-rw-------
tg_img_BCe5Sj
0
B
-rw-------
tg_img_BJ5EHE
0
B
-rw-------
tg_img_BJEEFf
0
B
-rw-------
tg_img_BZPXZY
0
B
-rw-------
tg_img_BatMkZ
0
B
-rw-------
tg_img_Bd2UKF
0
B
-rw-------
tg_img_BeNRU6
0
B
-rw-------
tg_img_BgcW2p
0
B
-rw-------
tg_img_BlgED9
0
B
-rw-------
tg_img_BoSLYe
0
B
-rw-------
tg_img_C3B7eG
0
B
-rw-------
tg_img_C57Gpe
0
B
-rw-------
tg_img_C6OVpR
0
B
-rw-------
tg_img_C8jDmY
0
B
-rw-------
tg_img_C8y4gZ
0
B
-rw-------
tg_img_CCkkpy
0
B
-rw-------
tg_img_CGlEQD
0
B
-rw-------
tg_img_CKNXLr
0
B
-rw-------
tg_img_CMjyjt
0
B
-rw-------
tg_img_CS3QwW
0
B
-rw-------
tg_img_CSJnNM
0
B
-rw-------
tg_img_CVHboh
0
B
-rw-------
tg_img_CX0imj
0
B
-rw-------
tg_img_CY6Bx2
0
B
-rw-------
tg_img_CaV6Q8
0
B
-rw-------
tg_img_ChJ6N8
0
B
-rw-------
tg_img_ClmGMG
0
B
-rw-------
tg_img_D5wRE2
0
B
-rw-------
tg_img_D5xInC
0
B
-rw-------
tg_img_D68jug
0
B
-rw-------
tg_img_D7aLZy
0
B
-rw-------
tg_img_DF2ylI
0
B
-rw-------
tg_img_DGoANl
0
B
-rw-------
tg_img_DNV3R3
0
B
-rw-------
tg_img_DO2cED
0
B
-rw-------
tg_img_DPX1HA
0
B
-rw-------
tg_img_DPe8tn
0
B
-rw-------
tg_img_DTSTyH
0
B
-rw-------
tg_img_DaLAD7
0
B
-rw-------
tg_img_DeuQAZ
0
B
-rw-------
tg_img_DjIY3C
0
B
-rw-------
tg_img_DnTdJS
0
B
-rw-------
tg_img_DpmEu5
0
B
-rw-------
tg_img_E1FgH4
0
B
-rw-------
tg_img_E5ZDi8
0
B
-rw-------
tg_img_E84Vg6
0
B
-rw-------
tg_img_EQDKnX
0
B
-rw-------
tg_img_ESfIlW
0
B
-rw-------
tg_img_EX3RW1
0
B
-rw-------
tg_img_EdI1np
0
B
-rw-------
tg_img_EhxH2S
0
B
-rw-------
tg_img_Eksb94
0
B
-rw-------
tg_img_Emqoi9
0
B
-rw-------
tg_img_EqT4mQ
0
B
-rw-------
tg_img_EqtbTN
0
B
-rw-------
tg_img_EwKLVu
0
B
-rw-------
tg_img_F3iFRT
0
B
-rw-------
tg_img_F7kCGx
0
B
-rw-------
tg_img_FHAAI4
0
B
-rw-------
tg_img_FIOPNR
0
B
-rw-------
tg_img_FIxb0X
0
B
-rw-------
tg_img_FJyM8M
0
B
-rw-------
tg_img_FMmf4d
0
B
-rw-------
tg_img_FVWC6z
0
B
-rw-------
tg_img_Fa2cS2
0
B
-rw-------
tg_img_FoZUHR
0
B
-rw-------
tg_img_FsMycZ
0
B
-rw-------
tg_img_GH6bQI
0
B
-rw-------
tg_img_GHUKcN
0
B
-rw-------
tg_img_GKjQMb
0
B
-rw-------
tg_img_GPf3JE
0
B
-rw-------
tg_img_GT4Izi
0
B
-rw-------
tg_img_GW1Cpj
0
B
-rw-------
tg_img_Glsz7v
0
B
-rw-------
tg_img_GmnKUP
0
B
-rw-------
tg_img_Gpifm2
0
B
-rw-------
tg_img_GrWql8
0
B
-rw-------
tg_img_GvDUaW
0
B
-rw-------
tg_img_H0OEOU
0
B
-rw-------
tg_img_H4TZ1H
0
B
-rw-------
tg_img_H8o5ZJ
0
B
-rw-------
tg_img_HEfQuW
0
B
-rw-------
tg_img_HOToG6
0
B
-rw-------
tg_img_HOVNfm
0
B
-rw-------
tg_img_HZIZc6
0
B
-rw-------
tg_img_HcDDh4
0
B
-rw-------
tg_img_HkWd6V
0
B
-rw-------
tg_img_HoVQ5H
0
B
-rw-------
tg_img_HpNchU
0
B
-rw-------
tg_img_HtmvAV
0
B
-rw-------
tg_img_I0gWEL
0
B
-rw-------
tg_img_I2Qx15
0
B
-rw-------
tg_img_IFWOUc
0
B
-rw-------
tg_img_IM0imE
0
B
-rw-------
tg_img_IO4xpB
0
B
-rw-------
tg_img_IfY82j
0
B
-rw-------
tg_img_Igjhnv
0
B
-rw-------
tg_img_Ijjwy0
0
B
-rw-------
tg_img_ItjVGV
0
B
-rw-------
tg_img_J0veB8
0
B
-rw-------
tg_img_JFltMK
0
B
-rw-------
tg_img_JJmJtA
0
B
-rw-------
tg_img_JNdRHf
0
B
-rw-------
tg_img_JPKblm
0
B
-rw-------
tg_img_JQQzwV
0
B
-rw-------
tg_img_JR2s9H
0
B
-rw-------
tg_img_JTFGlA
0
B
-rw-------
tg_img_JUjh2W
0
B
-rw-------
tg_img_JYU31p
0
B
-rw-------
tg_img_JmnB4B
0
B
-rw-------
tg_img_JoBK4Q
0
B
-rw-------
tg_img_JpREDw
0
B
-rw-------
tg_img_JpxiuN
0
B
-rw-------
tg_img_JqhuaD
0
B
-rw-------
tg_img_K0CsDu
0
B
-rw-------
tg_img_K5hPIK
0
B
-rw-------
tg_img_KBRYm7
0
B
-rw-------
tg_img_KFLUrd
0
B
-rw-------
tg_img_KFNOmk
0
B
-rw-------
tg_img_KFmhem
0
B
-rw-------
tg_img_KGg2I1
0
B
-rw-------
tg_img_KOSm2p
0
B
-rw-------
tg_img_KOlUmg
0
B
-rw-------
tg_img_KS4NzS
0
B
-rw-------
tg_img_KSzFIJ
0
B
-rw-------
tg_img_KVm3tY
0
B
-rw-------
tg_img_KWih17
0
B
-rw-------
tg_img_KXMyBZ
0
B
-rw-------
tg_img_KmBtha
0
B
-rw-------
tg_img_KtxrfA
0
B
-rw-------
tg_img_KxEdsx
0
B
-rw-------
tg_img_L9Do4M
0
B
-rw-------
tg_img_LMpjZn
0
B
-rw-------
tg_img_LQNabY
0
B
-rw-------
tg_img_LUhXHO
0
B
-rw-------
tg_img_LaQho1
0
B
-rw-------
tg_img_LdXgHa
0
B
-rw-------
tg_img_LdoCvS
0
B
-rw-------
tg_img_LetTmQ
0
B
-rw-------
tg_img_LkYzVU
0
B
-rw-------
tg_img_Lo6iVi
0
B
-rw-------
tg_img_LvD2k2
0
B
-rw-------
tg_img_LyFCap
0
B
-rw-------
tg_img_M7awoX
0
B
-rw-------
tg_img_M8Ycfi
0
B
-rw-------
tg_img_MFncTE
0
B
-rw-------
tg_img_MHnPyj
0
B
-rw-------
tg_img_MLUmaK
0
B
-rw-------
tg_img_MM3pjp
0
B
-rw-------
tg_img_MOY0Ro
0
B
-rw-------
tg_img_MP6OAO
0
B
-rw-------
tg_img_MUd3sC
0
B
-rw-------
tg_img_McLlKt
0
B
-rw-------
tg_img_MloD6g
0
B
-rw-------
tg_img_Mn8Tvq
0
B
-rw-------
tg_img_MnMXOo
0
B
-rw-------
tg_img_Mw8whH
0
B
-rw-------
tg_img_N2l0Dt
0
B
-rw-------
tg_img_N7GzHr
0
B
-rw-------
tg_img_N7HKdf
0
B
-rw-------
tg_img_N8101D
0
B
-rw-------
tg_img_N8zjBH
0
B
-rw-------
tg_img_N9nzyk
0
B
-rw-------
tg_img_NDVAby
0
B
-rw-------
tg_img_NESpa4
0
B
-rw-------
tg_img_NF5cyP
0
B
-rw-------
tg_img_NHYBF1
0
B
-rw-------
tg_img_NJN6Du
0
B
-rw-------
tg_img_NKkyJG
0
B
-rw-------
tg_img_NNeYem
0
B
-rw-------
tg_img_NSGtgX
0
B
-rw-------
tg_img_NXIpq4
0
B
-rw-------
tg_img_NarKII
0
B
-rw-------
tg_img_NowD4O
0
B
-rw-------
tg_img_NwyZEf
0
B
-rw-------
tg_img_O1IyLT
0
B
-rw-------
tg_img_OAMfYj
0
B
-rw-------
tg_img_OC2Twh
0
B
-rw-------
tg_img_OEu9qz
0
B
-rw-------
tg_img_OLxz1H
0
B
-rw-------
tg_img_ORPlud
0
B
-rw-------
tg_img_OS5oXo
0
B
-rw-------
tg_img_OSofoN
0
B
-rw-------
tg_img_OUKdOO
0
B
-rw-------
tg_img_ObETaB
0
B
-rw-------
tg_img_Od1lnd
0
B
-rw-------
tg_img_Oi8gYU
0
B
-rw-------
tg_img_Or1cSq
0
B
-rw-------
tg_img_OsjKCp
0
B
-rw-------
tg_img_Osu3J7
0
B
-rw-------
tg_img_Oy6yJ0
0
B
-rw-------
tg_img_P0Argx
0
B
-rw-------
tg_img_PA4vo2
0
B
-rw-------
tg_img_PIHw13
0
B
-rw-------
tg_img_PKnkkf
0
B
-rw-------
tg_img_PO1VXa
0
B
-rw-------
tg_img_PPj5dx
0
B
-rw-------
tg_img_PRkiiT
0
B
-rw-------
tg_img_PRkiiT.jpg
125.38
KB
-rw-r--r--
tg_img_PTSRGP
0
B
-rw-------
tg_img_Pfw9fn
0
B
-rw-------
tg_img_PqjyIq
0
B
-rw-------
tg_img_PsEmaz
0
B
-rw-------
tg_img_PxO1FS
0
B
-rw-------
tg_img_PyiQVU
0
B
-rw-------
tg_img_Q0IxlT
0
B
-rw-------
tg_img_Q90zHg
0
B
-rw-------
tg_img_QB9Vz3
0
B
-rw-------
tg_img_QChb9Q
0
B
-rw-------
tg_img_QHvxYL
0
B
-rw-------
tg_img_QJ5G8g
0
B
-rw-------
tg_img_QKCTZp
0
B
-rw-------
tg_img_QL0p35
0
B
-rw-------
tg_img_QNnFng
0
B
-rw-------
tg_img_QQspk4
0
B
-rw-------
tg_img_QRd2Np
0
B
-rw-------
tg_img_QSrsFP
0
B
-rw-------
tg_img_QTdQrl
0
B
-rw-------
tg_img_QgIOxL
0
B
-rw-------
tg_img_QguGAW
0
B
-rw-------
tg_img_QhqFNW
0
B
-rw-------
tg_img_QqmTaJ
0
B
-rw-------
tg_img_QrdoYD
0
B
-rw-------
tg_img_QrkzeH
0
B
-rw-------
tg_img_Qronaf
0
B
-rw-------
tg_img_Qx18NH
0
B
-rw-------
tg_img_QzCCUK
0
B
-rw-------
tg_img_QzSRFo
0
B
-rw-------
tg_img_QzZzuu
0
B
-rw-------
tg_img_R5bbR3
0
B
-rw-------
tg_img_REWXLX
0
B
-rw-------
tg_img_RG6Y0D
0
B
-rw-------
tg_img_RKY539
0
B
-rw-------
tg_img_RNpxeH
0
B
-rw-------
tg_img_ROELlo
0
B
-rw-------
tg_img_RUypYm
0
B
-rw-------
tg_img_RYNkpj
0
B
-rw-------
tg_img_RZ4YFX
0
B
-rw-------
tg_img_RZVrQL
0
B
-rw-------
tg_img_RaHOTx
0
B
-rw-------
tg_img_Raqi7l
0
B
-rw-------
tg_img_Rcu3Ht
0
B
-rw-------
tg_img_RgNGnz
0
B
-rw-------
tg_img_Rkxy6Z
0
B
-rw-------
tg_img_RpDba2
0
B
-rw-------
tg_img_S0Dkgg
0
B
-rw-------
tg_img_S1pR8H
0
B
-rw-------
tg_img_S3nmUy
0
B
-rw-------
tg_img_S5uERq
0
B
-rw-------
tg_img_SCQNv7
0
B
-rw-------
tg_img_SFLMmB
0
B
-rw-------
tg_img_SJDaTm
0
B
-rw-------
tg_img_SMXLtP
0
B
-rw-------
tg_img_SNKS34
0
B
-rw-------
tg_img_SO0qJq
0
B
-rw-------
tg_img_SUTU6f
0
B
-rw-------
tg_img_SWH7pa
0
B
-rw-------
tg_img_SdM9Cv
0
B
-rw-------
tg_img_SmzAnB
0
B
-rw-------
tg_img_SrodrA
0
B
-rw-------
tg_img_StTr14
0
B
-rw-------
tg_img_SwLgyC
0
B
-rw-------
tg_img_Sx0zOi
0
B
-rw-------
tg_img_T2jMJ6
0
B
-rw-------
tg_img_T2pVA3
0
B
-rw-------
tg_img_T4gt0t
0
B
-rw-------
tg_img_TAVaCs
0
B
-rw-------
tg_img_TINHR2
0
B
-rw-------
tg_img_TJkRbV
0
B
-rw-------
tg_img_TNNdSc
0
B
-rw-------
tg_img_TQzDP8
0
B
-rw-------
tg_img_TbbQgO
0
B
-rw-------
tg_img_TdDrmr
0
B
-rw-------
tg_img_TdynGd
0
B
-rw-------
tg_img_TfnEIx
0
B
-rw-------
tg_img_Ti4I0L
0
B
-rw-------
tg_img_Tiu3Bp
0
B
-rw-------
tg_img_TjriOy
0
B
-rw-------
tg_img_Tmwi7U
0
B
-rw-------
tg_img_ToYEjC
0
B
-rw-------
tg_img_TpTjRy
0
B
-rw-------
tg_img_TxNypY
0
B
-rw-------
tg_img_U2WpX3
0
B
-rw-------
tg_img_UACWyp
0
B
-rw-------
tg_img_UCs7Oa
0
B
-rw-------
tg_img_UHvoCo
0
B
-rw-------
tg_img_ULWQcw
0
B
-rw-------
tg_img_UMsgVo
0
B
-rw-------
tg_img_USeIIV
0
B
-rw-------
tg_img_UU4Q31
0
B
-rw-------
tg_img_UVjVL7
0
B
-rw-------
tg_img_UdsaAH
0
B
-rw-------
tg_img_Uzkx1P
0
B
-rw-------
tg_img_V2eHYJ
0
B
-rw-------
tg_img_VAusXT
0
B
-rw-------
tg_img_VCmfIG
0
B
-rw-------
tg_img_VIRQid
0
B
-rw-------
tg_img_VJoC8i
0
B
-rw-------
tg_img_VTfhiu
0
B
-rw-------
tg_img_VUCWXu
0
B
-rw-------
tg_img_VV5qLc
0
B
-rw-------
tg_img_VbGra9
0
B
-rw-------
tg_img_Vbm6K1
0
B
-rw-------
tg_img_Vg8pGY
0
B
-rw-------
tg_img_Vi1EUz
0
B
-rw-------
tg_img_VmHIiA
0
B
-rw-------
tg_img_VnNsrh
0
B
-rw-------
tg_img_VxeoQW
0
B
-rw-------
tg_img_VzVGA5
0
B
-rw-------
tg_img_W0dtqX
0
B
-rw-------
tg_img_W6RKgE
0
B
-rw-------
tg_img_W7PgCs
0
B
-rw-------
tg_img_W86lxw
0
B
-rw-------
tg_img_WCyVYp
0
B
-rw-------
tg_img_WD9D2e
0
B
-rw-------
tg_img_WEmuxt
0
B
-rw-------
tg_img_WMtPVC
0
B
-rw-------
tg_img_WOPx2D
0
B
-rw-------
tg_img_WUYC0Q
0
B
-rw-------
tg_img_WVIaHO
0
B
-rw-------
tg_img_WYMKuz
0
B
-rw-------
tg_img_WeLZvy
0
B
-rw-------
tg_img_WiGIfH
0
B
-rw-------
tg_img_WlIwOY
0
B
-rw-------
tg_img_WmQ07P
0
B
-rw-------
tg_img_WtzdLM
0
B
-rw-------
tg_img_Wx1Cpy
0
B
-rw-------
tg_img_WxOV7l
0
B
-rw-------
tg_img_X3vUIo
0
B
-rw-------
tg_img_X6xmCl
0
B
-rw-------
tg_img_X98Hcb
0
B
-rw-------
tg_img_XDoHBb
0
B
-rw-------
tg_img_XE98Zz
0
B
-rw-------
tg_img_XJeex1
0
B
-rw-------
tg_img_XJxQcu
0
B
-rw-------
tg_img_XPhtcE
0
B
-rw-------
tg_img_Xicfia
0
B
-rw-------
tg_img_Y42SMI
0
B
-rw-------
tg_img_YADEp6
0
B
-rw-------
tg_img_YEcJR5
0
B
-rw-------
tg_img_YHG4Js
0
B
-rw-------
tg_img_YQmpuo
0
B
-rw-------
tg_img_YbNchL
0
B
-rw-------
tg_img_YfgoV4
0
B
-rw-------
tg_img_YgJJ42
0
B
-rw-------
tg_img_YjR1zp
0
B
-rw-------
tg_img_YkfZ2t
0
B
-rw-------
tg_img_YpW7Re
0
B
-rw-------
tg_img_Yrjq3D
0
B
-rw-------
tg_img_Yvkm4m
0
B
-rw-------
tg_img_Z0m0Ee
0
B
-rw-------
tg_img_Z4SnWa
0
B
-rw-------
tg_img_Z4aNct
0
B
-rw-------
tg_img_Z9rF0l
0
B
-rw-------
tg_img_ZISBME
0
B
-rw-------
tg_img_ZKThZp
0
B
-rw-------
tg_img_ZLb7CW
0
B
-rw-------
tg_img_ZWa1YT
0
B
-rw-------
tg_img_ZZKHWV
0
B
-rw-------
tg_img_Zfw8Qx
0
B
-rw-------
tg_img_ZrJsnf
0
B
-rw-------
tg_img_ZsegsU
0
B
-rw-------
tg_img_ZyGBQV
0
B
-rw-------
tg_img_ZyaTbj
0
B
-rw-------
tg_img_a18eOD
0
B
-rw-------
tg_img_a5PmMm
0
B
-rw-------
tg_img_aMIvn3
0
B
-rw-------
tg_img_aMV6Du
0
B
-rw-------
tg_img_aP5mmu
0
B
-rw-------
tg_img_aRt2BW
0
B
-rw-------
tg_img_aUsl6L
0
B
-rw-------
tg_img_ad47CB
0
B
-rw-------
tg_img_ae5LNP
0
B
-rw-------
tg_img_ahGy2i
0
B
-rw-------
tg_img_asPizj
0
B
-rw-------
tg_img_b0YGQn
0
B
-rw-------
tg_img_b7l9gY
0
B
-rw-------
tg_img_b8eJog
0
B
-rw-------
tg_img_bFiGhw
0
B
-rw-------
tg_img_bHcUE6
0
B
-rw-------
tg_img_bRJaL1
0
B
-rw-------
tg_img_bVrLeg
0
B
-rw-------
tg_img_bX9hhh
0
B
-rw-------
tg_img_bXyefY
0
B
-rw-------
tg_img_bYEII5
0
B
-rw-------
tg_img_bkHsfT
0
B
-rw-------
tg_img_bog4it
0
B
-rw-------
tg_img_bsaiho
0
B
-rw-------
tg_img_bwB6sg
0
B
-rw-------
tg_img_c83mTr
0
B
-rw-------
tg_img_cA0XvP
0
B
-rw-------
tg_img_cBLS8I
0
B
-rw-------
tg_img_cBzXCA
0
B
-rw-------
tg_img_cN8iz7
0
B
-rw-------
tg_img_cS50oE
0
B
-rw-------
tg_img_cSC0JI
0
B
-rw-------
tg_img_cZ6nw3
0
B
-rw-------
tg_img_cbuwdL
0
B
-rw-------
tg_img_cn2lZN
0
B
-rw-------
tg_img_cnsJ1x
0
B
-rw-------
tg_img_csPsml
0
B
-rw-------
tg_img_cyHLIl
0
B
-rw-------
tg_img_d3Dhl1
0
B
-rw-------
tg_img_d4o8xh
0
B
-rw-------
tg_img_dBIeTF
0
B
-rw-------
tg_img_dCmH8A
0
B
-rw-------
tg_img_dPcR6f
0
B
-rw-------
tg_img_dUppCj
0
B
-rw-------
tg_img_dWbTtp
0
B
-rw-------
tg_img_dXThvK
0
B
-rw-------
tg_img_dd68R4
0
B
-rw-------
tg_img_dfk6yO
0
B
-rw-------
tg_img_dkCAcz
0
B
-rw-------
tg_img_dnGdMd
0
B
-rw-------
tg_img_dugEIy
0
B
-rw-------
tg_img_e1PdVu
0
B
-rw-------
tg_img_e7f12t
0
B
-rw-------
tg_img_e9L1Rr
0
B
-rw-------
tg_img_eDA8at
0
B
-rw-------
tg_img_eIJfSC
0
B
-rw-------
tg_img_eLMyD4
0
B
-rw-------
tg_img_eNhNsx
0
B
-rw-------
tg_img_ea547f
0
B
-rw-------
tg_img_ebSTN9
0
B
-rw-------
tg_img_ed88Ok
0
B
-rw-------
tg_img_ejfUhW
0
B
-rw-------
tg_img_em3gzi
0
B
-rw-------
tg_img_enoqNr
0
B
-rw-------
tg_img_eoGxM2
0
B
-rw-------
tg_img_epNj0f
0
B
-rw-------
tg_img_eq5kCZ
0
B
-rw-------
tg_img_ezhwhv
0
B
-rw-------
tg_img_f0yDEf
0
B
-rw-------
tg_img_f6ZDyg
0
B
-rw-------
tg_img_f8KJAa
0
B
-rw-------
tg_img_fAvMxK
0
B
-rw-------
tg_img_fHqbmB
0
B
-rw-------
tg_img_fQXAoM
0
B
-rw-------
tg_img_fa8mPD
0
B
-rw-------
tg_img_fhqF6m
0
B
-rw-------
tg_img_fhqF6m.jpg
0
B
-rw-r--r--
tg_img_fpLouA
0
B
-rw-------
tg_img_fpmi8O
0
B
-rw-------
tg_img_fvvqrI
0
B
-rw-------
tg_img_fxHdly
0
B
-rw-------
tg_img_g1OiWZ
0
B
-rw-------
tg_img_g37Y8c
0
B
-rw-------
tg_img_g5Q0Jg
0
B
-rw-------
tg_img_gHPqOV
0
B
-rw-------
tg_img_gRs0fZ
0
B
-rw-------
tg_img_gYE8UC
0
B
-rw-------
tg_img_gk3zqu
0
B
-rw-------
tg_img_gkk8Dz
0
B
-rw-------
tg_img_glqHBx
0
B
-rw-------
tg_img_goiseG
0
B
-rw-------
tg_img_gq4yqk
0
B
-rw-------
tg_img_grrRJk
0
B
-rw-------
tg_img_h3y4fq
0
B
-rw-------
tg_img_h5IqDM
0
B
-rw-------
tg_img_h5yN0R
0
B
-rw-------
tg_img_hHEeJw
0
B
-rw-------
tg_img_hLbDoc
0
B
-rw-------
tg_img_hM3g1a
0
B
-rw-------
tg_img_hMvm2F
0
B
-rw-------
tg_img_hX7T5D
0
B
-rw-------
tg_img_hbvvXz
0
B
-rw-------
tg_img_hhMG32
0
B
-rw-------
tg_img_hnlT3x
0
B
-rw-------
tg_img_hwgkV9
0
B
-rw-------
tg_img_hxrGPL
0
B
-rw-------
tg_img_i2nitV
0
B
-rw-------
tg_img_i5IpPZ
0
B
-rw-------
tg_img_iDwd4c
0
B
-rw-------
tg_img_iEgaGT
0
B
-rw-------
tg_img_iJY50g
0
B
-rw-------
tg_img_iOSir1
0
B
-rw-------
tg_img_iRfDTq
0
B
-rw-------
tg_img_ih43Fz
0
B
-rw-------
tg_img_ij6OaH
0
B
-rw-------
tg_img_ikQomb
0
B
-rw-------
tg_img_il4Ezr
0
B
-rw-------
tg_img_iqU4gw
0
B
-rw-------
tg_img_iwzt3J
0
B
-rw-------
tg_img_ixBRsI
0
B
-rw-------
tg_img_j2vsJI
0
B
-rw-------
tg_img_jAfPIO
0
B
-rw-------
tg_img_jCGCKD
0
B
-rw-------
tg_img_jFFHce
0
B
-rw-------
tg_img_jFmP3C
0
B
-rw-------
tg_img_jYzoNm
0
B
-rw-------
tg_img_jZ7Arv
0
B
-rw-------
tg_img_jaMEIZ
0
B
-rw-------
tg_img_jaMEIZ.jpg
44.1
KB
-rw-r--r--
tg_img_jbzmU3
0
B
-rw-------
tg_img_jkVpWj
0
B
-rw-------
tg_img_jpZvq6
0
B
-rw-------
tg_img_jvvAQV
0
B
-rw-------
tg_img_jwyAp8
0
B
-rw-------
tg_img_k1U4TN
0
B
-rw-------
tg_img_k4J6As
0
B
-rw-------
tg_img_k9YA5H
0
B
-rw-------
tg_img_kCrQbN
0
B
-rw-------
tg_img_kDFByf
0
B
-rw-------
tg_img_kLsI3W
0
B
-rw-------
tg_img_kN04FL
0
B
-rw-------
tg_img_kQepyK
0
B
-rw-------
tg_img_kT2Hiz
0
B
-rw-------
tg_img_kVpIqH
0
B
-rw-------
tg_img_kWgGhJ
0
B
-rw-------
tg_img_kZVI3Z
0
B
-rw-------
tg_img_kaJoPF
0
B
-rw-------
tg_img_kdbHRY
0
B
-rw-------
tg_img_khF2q5
0
B
-rw-------
tg_img_ksOSUL
0
B
-rw-------
tg_img_ksyulW
0
B
-rw-------
tg_img_ktDobR
0
B
-rw-------
tg_img_kvWW8R
0
B
-rw-------
tg_img_l0uJkb
0
B
-rw-------
tg_img_l7O23o
0
B
-rw-------
tg_img_lB16eU
0
B
-rw-------
tg_img_lB2RjR
0
B
-rw-------
tg_img_lI0KZO
0
B
-rw-------
tg_img_lKTnk9
0
B
-rw-------
tg_img_lLxdVY
0
B
-rw-------
tg_img_lOAxLS
0
B
-rw-------
tg_img_lfimoP
0
B
-rw-------
tg_img_liYiBg
0
B
-rw-------
tg_img_llyeDF
0
B
-rw-------
tg_img_luohJR
0
B
-rw-------
tg_img_lvlHRg
0
B
-rw-------
tg_img_lz3syh
0
B
-rw-------
tg_img_m4BjZ3
0
B
-rw-------
tg_img_mABSes
0
B
-rw-------
tg_img_mBd5WY
0
B
-rw-------
tg_img_mC1EPu
0
B
-rw-------
tg_img_mCdVqx
0
B
-rw-------
tg_img_mDcy9t
0
B
-rw-------
tg_img_mF1JmE
0
B
-rw-------
tg_img_mK1xDI
0
B
-rw-------
tg_img_mK9oSh
0
B
-rw-------
tg_img_mLjA8c
0
B
-rw-------
tg_img_mR0Bnh
0
B
-rw-------
tg_img_mRX0g5
0
B
-rw-------
tg_img_mTdQGJ
0
B
-rw-------
tg_img_mapWlI
0
B
-rw-------
tg_img_mvjdJc
0
B
-rw-------
tg_img_mxbDxM
0
B
-rw-------
tg_img_mzQoSi
0
B
-rw-------
tg_img_n2lHx5
0
B
-rw-------
tg_img_n6larg
0
B
-rw-------
tg_img_nPnlgL
0
B
-rw-------
tg_img_nUlRZc
0
B
-rw-------
tg_img_nYlmbG
0
B
-rw-------
tg_img_ncBhWZ
0
B
-rw-------
tg_img_nklNI4
0
B
-rw-------
tg_img_nnxygk
0
B
-rw-------
tg_img_nq7MEC
0
B
-rw-------
tg_img_o2R08g
0
B
-rw-------
tg_img_o3NKBu
0
B
-rw-------
tg_img_o3lYYs
0
B
-rw-------
tg_img_oEbU6d
0
B
-rw-------
tg_img_oHoCQe
0
B
-rw-------
tg_img_oKAR2J
0
B
-rw-------
tg_img_oOTnpr
0
B
-rw-------
tg_img_oX8QSy
0
B
-rw-------
tg_img_oY63Ss
0
B
-rw-------
tg_img_oYszY7
0
B
-rw-------
tg_img_obMuTG
0
B
-rw-------
tg_img_obYBRK
0
B
-rw-------
tg_img_ocC3Fo
0
B
-rw-------
tg_img_oeYQtV
0
B
-rw-------
tg_img_oi5hBi
0
B
-rw-------
tg_img_orNIBm
0
B
-rw-------
tg_img_p7QMMV
0
B
-rw-------
tg_img_pBtB1W
0
B
-rw-------
tg_img_pDPdaL
0
B
-rw-------
tg_img_pDeOIl
0
B
-rw-------
tg_img_pDxKL7
0
B
-rw-------
tg_img_pJ5znd
0
B
-rw-------
tg_img_pJudgM
0
B
-rw-------
tg_img_pLTFj9
0
B
-rw-------
tg_img_pPARI5
0
B
-rw-------
tg_img_pQzTv9
0
B
-rw-------
tg_img_pRLuGy
0
B
-rw-------
tg_img_pSp5hA
0
B
-rw-------
tg_img_paz5Yb
0
B
-rw-------
tg_img_pepEDh
0
B
-rw-------
tg_img_pfQ8Jm
0
B
-rw-------
tg_img_pgAhk7
0
B
-rw-------
tg_img_po4dkZ
0
B
-rw-------
tg_img_pvqGWj
0
B
-rw-------
tg_img_q23556
0
B
-rw-------
tg_img_qBY5AJ
0
B
-rw-------
tg_img_qJSIuC
0
B
-rw-------
tg_img_qOXLXw
0
B
-rw-------
tg_img_qQET6H
0
B
-rw-------
tg_img_qSZDEa
0
B
-rw-------
tg_img_qTXiAU
0
B
-rw-------
tg_img_qU3jWC
0
B
-rw-------
tg_img_qW6zYt
0
B
-rw-------
tg_img_qaHZIw
0
B
-rw-------
tg_img_qb7LMh
0
B
-rw-------
tg_img_qbOqP5
0
B
-rw-------
tg_img_qdyonP
0
B
-rw-------
tg_img_qj1hJO
0
B
-rw-------
tg_img_qktQXi
0
B
-rw-------
tg_img_qm3nXu
0
B
-rw-------
tg_img_qppsEw
0
B
-rw-------
tg_img_qrKvH1
0
B
-rw-------
tg_img_quKFMm
0
B
-rw-------
tg_img_r4jD9n
0
B
-rw-------
tg_img_rBfrbw
0
B
-rw-------
tg_img_rGgqmk
0
B
-rw-------
tg_img_rLIU71
0
B
-rw-------
tg_img_ra2Gxy
0
B
-rw-------
tg_img_rfQFEO
0
B
-rw-------
tg_img_rihFC1
0
B
-rw-------
tg_img_rjw2hA
0
B
-rw-------
tg_img_rsmL5w
0
B
-rw-------
tg_img_rt0h8Z
0
B
-rw-------
tg_img_rucX2C
0
B
-rw-------
tg_img_s0Iy95
0
B
-rw-------
tg_img_s8adt6
0
B
-rw-------
tg_img_s9KwVP
0
B
-rw-------
tg_img_sH9KSP
0
B
-rw-------
tg_img_sWnmxF
0
B
-rw-------
tg_img_sYZbxI
0
B
-rw-------
tg_img_skT9Wf
0
B
-rw-------
tg_img_slfltc
0
B
-rw-------
tg_img_spVKqa
0
B
-rw-------
tg_img_tEilFW
0
B
-rw-------
tg_img_tKAmbC
0
B
-rw-------
tg_img_tLATG7
0
B
-rw-------
tg_img_tNMeKs
0
B
-rw-------
tg_img_tRC3G1
0
B
-rw-------
tg_img_tRbG6w
0
B
-rw-------
tg_img_tU5NxW
0
B
-rw-------
tg_img_tXQUDM
0
B
-rw-------
tg_img_tYzZzy
0
B
-rw-------
tg_img_tckDRE
0
B
-rw-------
tg_img_tgqSvT
0
B
-rw-------
tg_img_tpMo2S
0
B
-rw-------
tg_img_tsVjlr
0
B
-rw-------
tg_img_ttWbMC
0
B
-rw-------
tg_img_tuRXtR
0
B
-rw-------
tg_img_tzUEZu
0
B
-rw-------
tg_img_u05AmC
0
B
-rw-------
tg_img_u09w17
0
B
-rw-------
tg_img_u2TQvX
0
B
-rw-------
tg_img_u5i7Mn
0
B
-rw-------
tg_img_u6dV0l
0
B
-rw-------
tg_img_uB4JnV
0
B
-rw-------
tg_img_uCuTNl
0
B
-rw-------
tg_img_uVid5B
0
B
-rw-------
tg_img_ubXtBa
0
B
-rw-------
tg_img_ubrnkx
0
B
-rw-------
tg_img_ulcZ3x
0
B
-rw-------
tg_img_us8CuK
0
B
-rw-------
tg_img_utQ0IE
0
B
-rw-------
tg_img_v1k98L
0
B
-rw-------
tg_img_v8Ezli
0
B
-rw-------
tg_img_v8Rajb
0
B
-rw-------
tg_img_v8eNcr
0
B
-rw-------
tg_img_vLa9gg
0
B
-rw-------
tg_img_vNIInG
0
B
-rw-------
tg_img_vNvybQ
0
B
-rw-------
tg_img_vRsHOV
0
B
-rw-------
tg_img_vSya5W
0
B
-rw-------
tg_img_vVv8gi
0
B
-rw-------
tg_img_vWhkmb
0
B
-rw-------
tg_img_vYh9m8
0
B
-rw-------
tg_img_viJBoW
0
B
-rw-------
tg_img_vlbzpV
0
B
-rw-------
tg_img_vnn84O
0
B
-rw-------
tg_img_vpIg7W
0
B
-rw-------
tg_img_vqGpzk
0
B
-rw-------
tg_img_vqZXuz
0
B
-rw-------
tg_img_vvKv5T
0
B
-rw-------
tg_img_vw8CNW
0
B
-rw-------
tg_img_vzsSnM
0
B
-rw-------
tg_img_wDZFci
0
B
-rw-------
tg_img_wKX4a8
0
B
-rw-------
tg_img_wKvJAb
0
B
-rw-------
tg_img_wNjEKM
0
B
-rw-------
tg_img_wQXsAJ
0
B
-rw-------
tg_img_wcqKFZ
0
B
-rw-------
tg_img_wjLOiv
0
B
-rw-------
tg_img_woEn7A
0
B
-rw-------
tg_img_woeIkJ
0
B
-rw-------
tg_img_wrDbGf
0
B
-rw-------
tg_img_wzQmWA
0
B
-rw-------
tg_img_x1hz5L
0
B
-rw-------
tg_img_xPwBHc
0
B
-rw-------
tg_img_xU8R8f
0
B
-rw-------
tg_img_xoLD88
0
B
-rw-------
tg_img_xon4WK
0
B
-rw-------
tg_img_y09kDl
0
B
-rw-------
tg_img_y4y4dR
0
B
-rw-------
tg_img_y7Pzr6
0
B
-rw-------
tg_img_y7gmq0
0
B
-rw-------
tg_img_yLH2fc
0
B
-rw-------
tg_img_yPgzt4
0
B
-rw-------
tg_img_yQzzHK
0
B
-rw-------
tg_img_yWOKpa
0
B
-rw-------
tg_img_ydPblE
0
B
-rw-------
tg_img_yi4IdG
0
B
-rw-------
tg_img_ykXlCA
0
B
-rw-------
tg_img_yxdYGD
0
B
-rw-------
tg_img_yzZD7J
0
B
-rw-------
tg_img_zCymg7
0
B
-rw-------
tg_img_zU5OsR
0
B
-rw-------
tg_img_zVDGTw
0
B
-rw-------
tg_img_zX8qZC
0
B
-rw-------
tg_img_zZm4bt
0
B
-rw-------
tg_img_zbjMK2
0
B
-rw-------
tg_img_zo1buY
0
B
-rw-------
tg_img_ztIazM
0
B
-rw-------
tg_img_zvzDrM
0
B
-rw-------
tmp.IFGfOzX923
0
B
-rw-------
tmp.c3UjgvZ9VK
0
B
-rw-------
tmp.vR2bcYfUpE
0
B
-rw-------
tmp.vZToIpccK8
0
B
-rw-------
tmp.wW1IQk9Npv
0
B
-rw-------
Delete
Unzip
Zip
${this.title}
Close
Code Editor : i360deploy.sh
#!/bin/bash # Short Description :Deploy imunify360/ImunifyAV # Description :Installs imunify360/ImunifyAV repository # Copyright :Cloud Linux Zug GmbH # License :Cloud Linux Commercial License # Do not edit/move/reformat this line except for actual version bump # it is used by old versions of deploy scripts to check for update version="2.155" readonly package="imunify360-firewall" readonly imunify360="imunify360-firewall" readonly imunify_av="imunify-antivirus" if [[ "$package" != "$imunify360" ]] && [[ "$package" != "$imunify_av" ]]; then exit 1 fi if [[ "$package" = "$imunify360" ]]; then PRODUCT="Imunify360" UI_PACKAGE="imunify-ui-firewall" COMMAND="imunify360-agent" STAND_ALONE_URL="https://docs.imunify360.com/control_panel_integration/#introduction" LOG_FILE="/var/log/i360deploy.log" LOCK="/var/lock/i360deploy.lck" # packages mentioned in the update command in the daily cron job + PD packages readonly additional_packages_to_remove="cloudlinux-backup-utils\ imunify360-ossec\ imunify360-pam\ imunify360-php-i360\ imunify360-webshield-bundle\ imunify360-unified-access-logger" readonly additional_packages_to_remove_av="ai-bolit\ alt-php-hyperscan\ imunify-release\ imunify-common\ imunify-notifier\ imunify-core\ imunify-realtime-av\ imunify-realtime-av-imrt2\ rustbolit\ imunify-ui\ imunify-wp-security\ imunify360-venv\ imunify-antivirus\ imunify-patchman" readonly additional_packages_to_remove_cl="alt-php-internal\ app-version-detector" readonly additional_packages_to_remove_centos="imunify-auditd-log-reader\ minidaemon" readonly additional_packages_to_remove_debian="" fi readonly YUM_DISABLED_PHP_REPOS_OPTION="--disablerepo=imunify360-ea-php-hardened*" OS_RELEASE_INFO=/etc/os-release set -o pipefail # fail if any error: will not #set -e # error for unbound variable: not for now #set -eu # $1 = Message prompt # Returns ans=0 for yes, ans=1 for no yesno() { local YES=0 local NO=1 local PENDING=2 if [ $dry_run -eq 1 ]; then echo "Would be asked here if you wanted to" echo "$1 (y/n - y is assumed)" local ans=$YES elif [ "$assumeyes" = "true" ]; then local ans=$YES else local ans=$PENDING fi while [ $ans -eq $PENDING ]; do echo "Do you want to $1 (y/n) ?" ; read -r reply case "$reply" in Y*|y*) ans=$YES ;; N*|n*) ans=$NO ;; *) echo "Please answer y or n" ;; esac done return "$ans" } prepend_timestamp() { # Prepend current time to each line # # Usage: source-program | prepend_timestamp # # Note: it may fail if the input contains \0 bytes while IFS= read -r line do printf '[%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$line" done } log() { # Run given command and append its duplicated stdout/stderr to # $LOG_FILE. # # Usage: log <command> [<args>...] # "$@" |& prepend_timestamp | tee -a "$LOG_FILE" return "${PIPESTATUS[0]}" } exit_with_error() { log echo -e "$@" rm -rf "$lock" exit 1 } print_debug_info() { if [ "$DEBUG" == "true" ]; then echo "$@" fi } # Only for imunify360-firewall set_low_resource_usage_mode_if_necessary() { local _package=$1 local _package_version=$2 imunify360_low_mem_limit=2147483648 imunify360_python38_datadir=$venv_path/share/imunify360 # total usable memory in bytes mem_total=$(</proc/meminfo awk '$1 == "MemTotal:" { printf "%.0f", $2 * 1024 }') if (( mem_total < imunify360_low_mem_limit )); then # enable "Low Resource Usage" mode local low_mem_config="$imunify360_python38_datadir/20-low-mem-settings.config" if [ -f "$low_mem_config" ]; then log echo "Installing $low_mem_config from $_package $_package_version" ln -s "$low_mem_config" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." fi fi } populate_os_release_vars() { # shellcheck source=/etc/os-release [ -f "$OS_RELEASE_INFO" ] && source "$OS_RELEASE_INFO" } is_debian_like() { populate_os_release_vars [[ "$ID" == "debian" || "$ID" == "ubuntu" ]] } check_exit_code() { if [ $? -ne "$1" ]; then exit_with_error "$2"; fi; } disable_3rd_party_ids() { if [ -d "$venv_path" ]; then echo "imunify360-venv detected" imunify360_python38_datadir=$venv_path/share/imunify360 fi if [ -d "$imunify360_python38_datadir" ]; then datadir="$imunify360_python38_datadir" else datadir="$imunify360_python35_datadir" fi $datadir/scripts/disable_3rd_party_ids } install_first_install_default_overrides() { local first_install_package=$1 local package_version=$2 if [ -d "$venv_path" ]; then echo "imunify360-venv detected" imunify360_python38_datadir=$venv_path/share/imunify360 fi local first_install_config_deprecated="$imunify360_python38_datadir/10_on_first_install.config" local first_install_config_core="$imunify360_python38_datadir/10_on_first_install_core.config" local first_install_config_av="$imunify360_python38_datadir/10_on_first_install_av.config" local first_install_config_ids="$imunify360_python38_datadir/10_on_first_install_ids.config" if [ -f "$first_install_config_deprecated" ]; then log echo "Installing $first_install_config_deprecated from $first_install_package $package_version" cp -v "$first_install_config_deprecated" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." else log echo "Installing $first_install_config_core from $first_install_package $package_version" cp -v "$first_install_config_core" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." log echo "Installing $first_install_config_av from $first_install_package $package_version" cp -v "$first_install_config_av" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." # touch flag file to indicate that the first install config has been applied touch /etc/sysconfig/imunify360/imunify360.config.d/.11_on_first_install_wp_av.flag if [[ "$package" = "$imunify360" ]]; then log echo "Installing $first_install_config_ids from $first_install_package $package_version" cp -v "$first_install_config_ids" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." fi fi } remove_first_install_default_overrides() { unlink /etc/sysconfig/imunify360/imunify360.config.d/10_on_first_install.config 2>/dev/null || true unlink /etc/sysconfig/imunify360/imunify360.config.d/10_on_first_install_core.config 2>/dev/null || true unlink /etc/sysconfig/imunify360/imunify360.config.d/10_on_first_install_av.config 2>/dev/null || true unlink /etc/sysconfig/imunify360/imunify360.config.d/10_on_first_install_ids.config 2>/dev/null || true } init_vars() { wget="/usr/bin/wget" wget_options="-q --retry-connrefused --waitretry=15 --read-timeout=20 --timeout=15 -t 15" uninstall=false purge=false conversion=false beta=false if [ -f /var/imunify360/force_install_from_beta.flag ]; then beta=true fi install_vendors=false freemium=false downgrade=false post_os_upgrade=false compatibility_check_script="compatibility-check.sh" # get full path to the current script script="$1" case "$script" in ./*) script="$(pwd)/${script#*/}" ;; /*) script="$script" ;; *) script="$(pwd)/$script" ;; esac scriptname=$(basename "$script") script_run_args="$2" # Update checker URL checksite="https://repo.imunify360.cloudlinux.com/defense360/" upgradeurl="$checksite$scriptname" dry_run="0" assumeyes=false modifying_call=false yum_beta_option="" yum_beta_repo_enable=0 apt_force="" apt_allow_unauthenticated="" if [[ "$package" = "$imunify360" ]]; then # Virtuozzo 7 with kernel 3.10.0 or later has support for ipset in Container VZ_VERSION_LONG=3.10.0-327.10.1.vz7.12.8 # Inside VZ version is provided without release VZ_VERSION_BRIEF=3.10.0 readonly imunify360_python35_datadir=/opt/alt/python35/share/imunify360 fi imunify360_python38_datadir=/opt/alt/python38/share/imunify360 venv_path=/opt/imunify360/venv } version() { local lhs=$1 local op=$2 local rhs=$3 case $op in -lt) test "$(echo -e "$lhs\\n$rhs" | sort --version-sort | head -1)" = "$lhs" && \ test "$lhs" != "$rhs" return $? ;; *) echo "function version(): operator $op is not supported." return 2 ;; esac } check_package_version() { version="$1" if [ -z "$version" ]; then echo "No available package detected" return 1 else echo "$version" fi } get_available_debian_package_version() { version=$(apt-cache policy "$1" 2>/dev/null | sed -n '3p' | awk '{split($0, candidate); print candidate[2]}') check_package_version "$version" return $? } get_available_centos_package_version() { version=$(yum $yum_beta_option $YUM_DISABLED_PHP_REPOS_OPTION list available "$1" 2>/dev/null | grep -E "$1.x86_64|$1.noarch" | awk '{split($0, candidate); print candidate[2]}' | sort --version-sort | tail -n 1) check_package_version "$version" return $? } install_plugin() { local plugin_package=$1 local panel=$2 echo "Installing $PRODUCT $panel plugin..." install_${ostype}_pkgs "$plugin_package-$panel" check_exit_code 0 "Failed to install $PRODUCT $panel plugin." } install_ui_part() { local ui_package=$1 local panel=$2 echo "Installing UI part of $PRODUCT $panel plugin..." install_${ostype}_pkgs "$ui_package-$panel" check_exit_code 0 "Failed to install UI part of $PRODUCT $panel plugin." } check_and_install() { local package_to_install=$1 local package_version=$2 local ui_package=$3 local panel=$4 if version "$package_version" -lt "7.3"; then install_plugin "$package_to_install" "$panel" else if [[ "$package_to_install" = "$imunify360" ]]; then install_plugin $package_to_install $panel fi install_ui_part "$ui_package" "$panel" fi } check_hardened_php_status() { local agent_bin='/usr/bin/imunify360-agent' local python_bin='/opt/imunify360/venv/bin/python' local status=$(\ ${agent_bin} features status hardened-php --json |\ ${python_bin} -c 'import json; print(json.loads(input()).get("items", {}).get("status"))'\ ) echo ${status} } remove_hardened_php_feature() { local agent_bin='/usr/bin/imunify360-agent' local python_bin='/opt/imunify360/venv/bin/python' # sometimes it takes a long time to remove hardened-php # especially in the Plesk environment local timeout=1500 # A downgrade leaves the server in production on ImunifyAV, so its PHP # interpreters have to survive it. Checked before anything else so the # decision does not depend on the agent still being installed. if [ "$downgrade" = "true" ]; then echo "Keeping Hardened PHP packages: only a full uninstall removes them." return fi if [ ! -f ${agent_bin} ] || [ ! -f ${python_bin} ]; then return fi if [ "$(check_hardened_php_status)" != "installed" ]; then return fi echo "Warning: Hardened PHP packages will be removed"\ "and replaced with the default ones if possible."\ "Some sites may stop working" echo -n "Starting removal, this may take a couple of minutes" local logfile="$(${agent_bin} features remove hardened-php)" local start_ts=$(date +%s) while true; do removal_status="$(check_hardened_php_status)" [ "${removal_status}" = "not_installed" ] && echo OK && break local current_ts=$(date +%s) if [ $((current_ts - start_ts)) -gt ${timeout} ]; then echo TIMEOUT exit_with_error "Error occured while trying to remove Hardened PHP packages."\ "See log: ${logfile}" fi echo -n "." sleep 5 done } install_vendors_in_cw_environment() { # log output but hide it from stdout log echo "Run vendor installation in background for Cloudways" file_path="/var/imunify360/files/modsec/v2/description.json" while [ ! -f "$file_path" ]; do log echo "Waiting for $file_path to appear" sleep 5 done log echo "Installing vendors" log /usr/bin/imunify360-agent --console-log-level=WARNING install-vendors } do_migrate_patchman() { log echo "Run patchman migration..." log imunify-antivirus patchman migrate check_exit_code 0 "Failed to migrate patchman service." } refresh_debian_repos() { if ! log run_with_retries "apt-get update" ""; then test "$dev_install" = true if [ $? -ne 0 ]; then log echo "apt-get update error." exit 1 fi fi } enable_debian_beta_repo() { if test -f /etc/apt/sources.list.d/imunify360-testing.list.example ; then log cp /etc/apt/sources.list.d/imunify360-testing.list.example /etc/apt/sources.list.d/imunify360-testing.list fi if test -f /usr/share/imunify360/apt/imunify360-testing.list.disabled ; then log cp /usr/share/imunify360/apt/imunify360-testing.list.disabled /etc/apt/sources.list.d/imunify360-testing.list fi } enable_centos_beta_repo() { log yum-config-manager --enable imunify360-testing } install_imunify_release() { if [[ $ostype = debian ]]; then suffix="$ID.$VERSION_ID.deb" if test -f /etc/apt/sources.list.d/imunify360.list ; then if [ "$beta" = "true" ]; then enable_debian_beta_repo refresh_debian_repos fi log echo "repo is already present, skip installation of imunify-release" return 0 fi else if test -f /etc/yum.repos.d/imunify360.repo ; then if [ "$beta" = "true" ]; then enable_centos_beta_repo fi log echo "repo is already present, skip installation of imunify-release" return 0 fi suffix="el${VERSION_ID%%.*}.rpm" fi local pkg_name="imunify-release-latest.$suffix" log echo "Downloading imunify-release package: $pkg_name" log wget "https://repo.imunify360.cloudlinux.com/defence360/$pkg_name" -O $pkg_name if [[ $ostype = debian ]]; then # since for debian/ubuntu gpg key is added to common location (/etc/apt/trusted.gpg.d/) - # allow overwriting config files to avoid conflicts if gpg key was added manually log dpkg -i --force-confmiss --force-confnew ./$pkg_name else log yum install -y ./$pkg_name fi if [[ $ostype = debian ]]; then if [ "$beta" = "true" ]; then enable_debian_beta_repo fi refresh_debian_repos else log rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CloudLinux-Imunify if [ "$beta" = "true" ]; then enable_centos_beta_repo fi fi } post_os_upgrade_repos() { if [[ "$ostype" != "debian" ]]; then log echo "OS upgrade repo refresh is only needed for Debian/Ubuntu systems." log echo "RPM-based systems use \$releasever which resolves dynamically." exit 0 fi if ! check_debian_pkg_presence "$package"; then exit_with_error "$package is not installed. Nothing to upgrade." fi log echo "Refreshing $PRODUCT repositories after OS upgrade..." log echo "Detected OS: $ID $VERSION_ID" # Download and install imunify-release for the current OS # --force-confnew ensures all repo .list files are overwritten with new OS URLs local suffix="$ID.$VERSION_ID.deb" local pkg_name="imunify-release-latest.$suffix" log echo "Downloading imunify-release package: $pkg_name" log $wget $wget_options -O "$pkg_name" \ "https://repo.imunify360.cloudlinux.com/defence360/$pkg_name" if [ ! -s "$pkg_name" ]; then exit_with_error "Failed to download $pkg_name. Is $ID $VERSION_ID supported?" fi log dpkg -i --force-confmiss --force-confnew "./$pkg_name" check_exit_code 0 "Failed to install imunify-release package." rm -f "./$pkg_name" # Handle GPG key delivered as .dpkg-dist (can happen despite --force-confnew) local gpg_key_path="/etc/apt/trusted.gpg.d/RPM-GPG-KEY-CloudLinux.gpg" if [ -f "${gpg_key_path}.dpkg-dist" ]; then log echo "Replacing GPG key with version from package (.dpkg-dist)..." mv -f "${gpg_key_path}.dpkg-dist" "$gpg_key_path" fi # The testing repo .list is a runtime copy (not a dpkg conffile), # so --force-confnew does not update it. Use its presence as a marker # that beta was enabled, then recreate with correct URLs. if [ -f /etc/apt/sources.list.d/imunify360-testing.list ] || [ "$beta" = "true" ]; then log echo "Re-enabling beta repository..." rm -f /etc/apt/sources.list.d/imunify360-testing.list enable_debian_beta_repo fi # Refresh package lists with the new repos log echo "Refreshing package lists..." refresh_debian_repos # Reinstall the package to get the version built for the new OS log echo "Reinstalling $package for $ID $VERSION_ID..." export DEBIAN_FRONTEND=noninteractive run_with_retries "apt-get install --reinstall -y \ -o Dpkg::Options::=--force-confdef \ -o Dpkg::Options::=--force-confold \ $package" "Could not get lock" check_exit_code 0 "Failed to reinstall $package." # Restart the service to pick up the new OS info if is_systemctl_avail; then log echo "Restarting $PRODUCT service..." if [[ "$package" = "$imunify360" ]]; then log systemctl restart imunify360 imunify360-agent else log systemctl restart "$package" fi fi log echo "OS upgrade repository refresh complete." log echo "$PRODUCT is now configured for $ID $VERSION_ID." } remove_imunify_release() { log remove_${ostype}_pkgs imunify-release if [[ $ostype = debian && $beta = true ]]; then # imunify360-testing repo is added by imunify-release as imunify360-testing.list.[example|disabled]. # then in case of `$beta = true` it is enabled by copying it to imunify360-testing.list. # so, in case of $beta imunify360-testing.list must be removed manually. log rm /etc/apt/sources.list.d/imunify360-testing.list fi } run_compatibility_check() { local script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")" local script_path="$script_dir/$compatibility_check_script" if [[ -f "$script_path" ]]; then bash $script_path --$package else $wget -qO- "$checksite$compatibility_check_script" | bash -s -- --$package fi } # Compile and load the product's SELinux policy module so services like # imunify-notifier work on SELinux-enforcing hosts without manual steps # (DEF-36450, https://docs.imunify360.com/installation/#selinux-support). # Silent no-op on non-CentOS, SELinux-disabled hosts, or when the policy # source is not on disk yet. apply_selinux_policy() { if [[ "$ostype" != "centos" ]]; then log echo "apply_selinux_policy: ostype=$ostype is not centos; skipping" return 0 fi if ! command -v getenforce >/dev/null 2>&1; then log echo "apply_selinux_policy: getenforce not found; skipping" return 0 fi local selinux_state selinux_state="$(getenforce 2>/dev/null || true)" if [ "$selinux_state" = "Disabled" ] || [ -z "$selinux_state" ]; then log echo "apply_selinux_policy: SELinux is disabled; skipping" return 0 fi local policy_name if [[ "$package" = "$imunify360" ]]; then policy_name="imunify360" else policy_name="imunify-antivirus" fi # Policy source search paths (venv path is canonical per upstream docs; # the RPM %{_datadir} location is kept as a fallback). The env overrides # exist so Bats tests can redirect the probe into BATS_TMPDIR. local te_primary_dir="${SELINUX_TE_PRIMARY_DIR:-/opt/imunify360/venv/share/imunify360}" local te_fallback_dir="${SELINUX_TE_FALLBACK_DIR:-/usr/share/imunify360}" local te_path="" local candidate for candidate in \ "${te_primary_dir}/${policy_name}.te" \ "${te_fallback_dir}/${policy_name}.te"; do if [ -f "$candidate" ]; then te_path="$candidate" break fi done if [ -z "$te_path" ]; then log echo "apply_selinux_policy: ${policy_name}.te not found; skipping" return 0 fi if ! command -v checkmodule >/dev/null 2>&1; then # `/usr/bin/checkmodule` is owned by `checkpolicy` on every EL # release (6 through 9); upstream docs mention # policycoreutils-python-utils but that only "works" on EL8+ via a # transitive dep and pulls in far more than we need. log echo "apply_selinux_policy: installing checkpolicy for checkmodule" log install_centos_pkgs checkpolicy if ! command -v checkmodule >/dev/null 2>&1; then log echo "apply_selinux_policy: checkmodule still missing after install; skipping" return 0 fi fi local workdir workdir="$(mktemp -d -t imunify-selinux-XXXXXX)" if [ ! -d "$workdir" ]; then log echo "apply_selinux_policy: failed to create temp directory; skipping" return 0 fi # Clean up on any exit path (success, failure, or error). trap 'rm -rf "$workdir"' RETURN local mod_path="$workdir/${policy_name}.mod" local pp_path="$workdir/${policy_name}.pp" if ! log checkmodule -M -m -o "$mod_path" "$te_path"; then log echo "apply_selinux_policy: checkmodule failed for $te_path" return 0 fi if ! log semodule_package -o "$pp_path" -m "$mod_path"; then log echo "apply_selinux_policy: semodule_package failed" return 0 fi # semodule -i is idempotent; on re-runs it upgrades the module in place. if ! log semodule -i "$pp_path"; then log echo "apply_selinux_policy: semodule -i failed" return 0 fi log echo "apply_selinux_policy: ${policy_name} SELinux policy loaded" } # Remove Imunify/i360 files left behind after package removal. # Invoked only on --purge; every removal ignores errors so a missing path # or a busy file can never abort the uninstall. cleanup_purge_leftovers() { # Most of what we remove (e.g. /var/imunify360, /etc/imunify360) is shared # between imunify360-firewall and imunify-antivirus. If a sibling product # package is still installed after this uninstall (e.g. imav-deploy.sh # --purge on a host that keeps imunify360-firewall), wiping that shared # state would break the surviving install — so bail out. if check_${ostype}_pkg_presence imunify360-firewall \ || check_${ostype}_pkg_presence imunify-antivirus; then log echo "Another Imunify product is still installed; skipping leftover purge." return 0 fi log echo "Purging leftover Imunify files..." # Core config and runtime data (absent paths are simply skipped) rm -rf /var/imunify360 rm -rf /opt/imunify360 rm -rf /etc/imunify360 rm -rf /etc/sysconfig/imunify360 rm -rf /etc/imunify360-webshield rm -rf /opt/imunify360-webshield rm -rf /var/cache/imunify360-webshield rm -rf /etc/imunify360-wafd rm -rf /etc/imunify-agent-proxy rm -rf /etc/imunify-auditd-log-reader rm -rf /var/lib/imunify360 rm -f /var/lib/imunify-users.json # Cron jobs created at install or at runtime rm -f /etc/cron.d/imunify-core rm -f /etc/cron.d/imunify360-ual rm -f /etc/cron.d/imunify-notifier-timed-trigger # clamav-purge cron is co-owned by imunify360 + imunify-antivirus; remove it # here (full --purge) rather than in either package's %postun, which fires on # single-package removal and would strand the surviving package's cron. rm -f /etc/cron.d/imunify360-purge-clamav # Config backups the agent left when it edited host configs find /etc \( -name '*.i360bak' -o -name '*.i360bkp' \) -delete 2>/dev/null || true # Per-user markers (Plesk keeps vhosts under a different root) local user_base="/home" [ "$PANEL" = "plesk" ] && user_base="/var/www/vhosts" find "$user_base" -maxdepth 2 \( -name .imunify_patch_id -o -name .myimunify_id \) -delete 2>/dev/null || true # Apache integration configs: the agent writes these under /etc/apache2 on # Debian panels and /etc/httpd on RHEL ones. Match fixed imunify filenames # only, so customer vhosts are never touched. for ap_root in /etc/apache2 /etc/httpd; do [ -d "$ap_root" ] || continue find "$ap_root" -maxdepth 3 \( -type f -o -type l \) \( \ -name 'i360-app-based-excludes.conf' -o \ -name 'zz999-i360-app-based-excludes.conf' -o \ -name 'modsec2.i360_disabled_rules.conf' -o \ -name 'i360_modsec_disable.conf' -o \ -name 'zz_imunify360_misc.conf' -o \ -name 'zz_imunify360_modsec.conf' -o \ -name 'modsec2.imunify.conf' -o \ -name 'zz999_modsec2.imunify.conf' -o \ -name 'zz999_modsec2.imunify_disable.conf' \) \ -delete 2>/dev/null || true done rm -f /etc/nginx/conf.d/i360.remoteip.conf rm -rf /var/www/html/i360 if [ "$PANEL" = "cpanel" ]; then rm -rf /usr/local/cpanel/whostmgr/docroot/cgi/imunify rm -rf /usr/local/cpanel/whostmgr/docroot/templates/banners/imunify360 rm -rf /usr/local/cpanel/base/frontend/jupiter/imunify elif [ "$PANEL" = "plesk" ]; then # custom.backup/ also holds the customer's own rules — drop i360 files only for ms_root in /etc/apache2 /etc/httpd; do find "$ms_root/modsecurity.d/rules/custom" \ "$ms_root/modsecurity.d/rules/custom.backup" \ -maxdepth 1 -name '*_i360_*.conf' -delete 2>/dev/null || true done # per-domain ModSec disable configs the agent writes under each vhost find /var/www/vhosts/system -maxdepth 4 \ -path '*/conf/siteapp.d/i360_modsec_disable.conf' \ -delete 2>/dev/null || true fi # MySQL drop-ins (generic/Plesk) rm -f /etc/mysql/imunify360-generic.cnf rm -f /etc/mysql/mysql.conf.d/i360.cnf if [ "$ostype" = "centos" ]; then # config(noreplace) files that rpm renamed to .rpmsave on removal find /etc/yum.repos.d /etc/sysconfig \ \( -name '*imunify*.rpmsave' -o -name '*i360*.rpmsave' \) \ -delete 2>/dev/null || true fi if [ "$ostype" = "debian" ]; then for wants in /etc/systemd/system/*.target.wants; do rm -f "$wants"/imunify* 2>/dev/null || true done find /var/lib/systemd/deb-systemd-helper-enabled -name 'imunify*' -delete 2>/dev/null || true # PHP module markers the agent dropped to disable modules find /var/lib/php/modules -path '*/disabled_by_admin/i360' -prune -exec rm -rf {} + 2>/dev/null || true systemctl daemon-reload >/dev/null 2>&1 || true fi log echo "Purge cleanup complete." } run_with_retries() { cmd=$1 expected_error_text=$2 ignore_res=$3 min_timeout=2 max_timeout=30 nattempts=10 for ((i=1;i<=nattempts;i++)); do output=$( { $cmd ; } 2>&1 ) res=$? if [ $res -eq 0 ] && [[ "$ignore_res" != "true" ]]; then echo "$output" break else if echo "$output" | grep -q "$expected_error_text"; then echo "$output" echo "Attempt #$i/$nattempts: to run $cmd." timeout=$(($RANDOM%($max_timeout-$min_timeout+1)+$min_timeout)) [ $i -ne $nattempts ] && echo "Retrying in $timeout seconds.." sleep $timeout else echo "$output" break fi fi done return $res } reopen_log() { echo "-- $(date -R): $script $script_run_args --" >> "$LOG_FILE" chmod 0600 "$LOG_FILE" } check_debian_pkg_presence() { test "$(dpkg-query --show --showformat='${db:Status-Status}\n' "$1" 2>/dev/null)" = "installed" } check_centos_pkg_presence() { rpm --query "$1" >/dev/null } should_perform_downgrade() { if [[ "$package" = "$imunify_av" ]]; then downgrade=false return 1 # https://cloudlinux.atlassian.net/browse/DEF-33180 Decided to postpone having this as default action for plesk/cpanel # elif [ "$downgrade" = "true" ] || [ "$PANEL" = "plesk" ] || [ "$PANEL" = "cpanel" ]; then elif [ "$downgrade" = "true" ]; then # downgrade=true return 0 else return 1 fi } verify_imunify_av() { log echo "Verifying ImunifyAV installation..." # Get the list of packages to verify from additional_packages_to_remove_av # and remove imunify-realtime-av from the list local packages_to_verify="" for _package in $additional_packages_to_remove_av; do if [ "$_package" != "imunify-realtime-av" ] && [ "$_package" != "imunify-patchman" ]; then packages_to_verify="$packages_to_verify $_package" fi done packages_to_verify="$packages_to_verify imunify-antivirus-$PANEL" packages_to_verify="$packages_to_verify imunify-antivirus-$PANEL" # UI package if panel is detected if [ "$PANEL" = generic ]; then packages_to_verify="$packages_to_verify imunify-ui-$PANEL" else packages_to_verify="$packages_to_verify imunify-ui-antivirus-$PANEL" fi # Flag to track if any package is missing local missing_packages=0 # Check each package for _package in $packages_to_verify; do if ! check_${ostype}_pkg_presence "$_package"; then log echo "WARNING: Package $_package is missing." missing_packages=1 fi done # Return status based on missing packages if [ $missing_packages -eq 0 ]; then log echo "All ImunifyAV packages are properly installed." return 0 else log echo "ERROR: Some ImunifyAV packages are missing. Manual intervention may be required." exit 1 fi } # Function to mark ImunifyAV packages as manually installed for Debian mark_debian_av_manual() { echo "Marking ImunifyAV as manually installed to preserve it and its dependencies..." # Check if ImunifyAV is installed before marking if check_debian_pkg_presence "imunify-antivirus"; then apt-mark manual imunify-antivirus-$PANEL if [ "$PANEL" = "generic" ]; then apt-mark manual imunify-ui-generic else apt-mark manual imunify-ui-antivirus-$PANEL fi fi } # Function to mark ImunifyAV packages as user-installed for CentOS mark_centos_av_manual() { echo "Marking ImunifyAV as user-installed to preserve it and its dependencies..." # Check if ImunifyAV is installed before marking if ! rpm -q imunify-antivirus &>/dev/null; then return fi local ui_package="imunify-ui-${PANEL}" [[ "$PANEL" != "generic" ]] && ui_package="imunify-ui-antivirus-${PANEL}" if [[ "$VERSION_ID" == 7* ]]; then yumdb set reason user "imunify-antivirus-${PANEL}" yumdb set reason user "${ui_package}" else yum mark install "imunify-antivirus-${PANEL}" yum mark install "${ui_package}" fi } remove_debian_imunify() { local pkgs_to_remove="$package $additional_packages_to_remove $additional_packages_to_remove_debian" if [ "$downgrade" = "false" ]; then pkgs_to_remove="$pkgs_to_remove $additional_packages_to_remove_av" fi if [ "$purge" = "true" ]; then local purge_flag="--purge" else local purge_flag="" fi apt-mark unhold $pkgs_to_remove # --ignore-missing doesn't work if apt doesn't know about package, so # resolve the list to packages that dpkg actually has records for. # Also caches the result into a variable so run_with_retries' word- # splitting doesn't re-invoke the substitution on every retry. # shellcheck disable=SC2086 local installed_pkgs installed_pkgs=$(dpkg-query -W -f='${binary:Package}\n' $pkgs_to_remove 2>/dev/null) # Idempotency: re-running --uninstall on a clean Debian system must not # fail. apt-get remove with an empty package list errors out, so short- # circuit here before the dry-run and yesno prompt. if [ -z "$installed_pkgs" ]; then echo "No imunify packages installed; nothing to remove." return 0 fi # shellcheck disable=SC2086 apt-get remove $purge_flag --autoremove --ignore-missing --dry-run $installed_pkgs yesno "apt-get $purge_flag --AUTOREMOVE to remove $installed_pkgs plus \ aforementioned packages [y] or just $installed_pkgs [n]" local res=$? if [ $res = 0 ]; then local autoremove="--autoremove" else local autoremove="" fi run_with_retries "apt-get remove $purge_flag $autoremove -y --ignore-missing $installed_pkgs" "Could not get lock" local remove_res=$? if [ $remove_res -ne 0 ]; then return $remove_res fi # dpkg-query exits non-zero for any unknown package, so ignore exit code # and filter on Status-Status=='installed' instead. # shellcheck disable=SC2086 local still_installed still_installed=$(dpkg-query -W -f='${binary:Package} ${db:Status-Status}\n' $pkgs_to_remove 2>/dev/null \ | awk '$2=="installed"{print $1}') if [ -n "$still_installed" ]; then echo "ERROR: imunify packages still installed after remove:" echo "$still_installed" return 1 fi } remove_centos_imunify() { local pkgs_to_remove="$package $additional_packages_to_remove $additional_packages_to_remove_centos" if [ "$downgrade" = "false" ]; then if rpm -q cloudlinux-release &>/dev/null; then # if it is CLOS leave "alt-php-internal" and "app-version-detector" as is local pkgs_to_remove="$pkgs_to_remove $additional_packages_to_remove_av" else # Otherwise the also could be removed local pkgs_to_remove="$pkgs_to_remove $additional_packages_to_remove_av $additional_packages_to_remove_cl" fi fi yum remove -y $yum_beta_option $YUM_DISABLED_PHP_REPOS_OPTION \ $pkgs_to_remove --setopt=clean_requirements_on_remove=1 } remove_freemium_flag() { if [ ! -f "/var/imunify360/myimunify-freemium.flag" ]; then return fi rm -f "/var/imunify360/myimunify-freemium.flag" } get_debian_pkgs_manager() { pkgs_manager="apt-get" } get_centos_pkgs_manager() { pkgs_manager="yum" } remove_debian_pkgs() { if [ "$purge" = "true" ]; then local purge_flag="--purge" else local purge_flag="" fi run_with_retries "apt-get remove -y $purge_flag $*" "Could not get lock" } remove_centos_pkgs() { yum remove -y "$@" } install_debian_pkgs() { local pkgs=$* run_with_retries "apt-get $apt_opts install -y $apt_allow_unauthenticated $apt_force $pkgs" "" } install_centos_pkgs() { local pkgs=$* yum install -y $yum_beta_option $YUM_DISABLED_PHP_REPOS_OPTION $pkgs } install_debian_ipset() { install_debian_pkgs ipset } install_centos_ipset() { yum install -y ipset } detect_first_install() { if check_${ostype}_pkg_presence "$package" >/dev/null then first_install=false else first_install=true fi } is_systemctl_avail() { command -v systemctl >/dev/null 2>&1 } # $1 = Full URL to download # $2 = Optional basename to save to (if omitted, then = basename $1) # Also allow download to fail without exit if $2 is set download_file() { if [ "$2" = "" ]; then dlbase="$(basename "$1")" else dlbase="$2" fi if [ $dry_run -eq 1 ]; then echo "Would download this URL to $dlbase :" echo "$1" ; echo return fi old_dlbase="$dlbase.old" if [ -f "$dlbase" ]; then rm -f "$old_dlbase" mv -f "$dlbase" "$old_dlbase" fi echo "Downloading $dlbase (please wait)" $wget $wget_options -O "$dlbase" "$1" if [ ! -s "$dlbase" ]; then if [ -f "$old_dlbase" ]; then mv -f "$old_dlbase" "$dlbase" fi if [ "$2" = "" ]; then echo "Failed to download $dlbase" exit 1 fi fi } # Make sure that we are running the latest version # $* = Params passed to script check_version() { echo "Checking for an update to $scriptname" script_from_repo="$scriptname.repo_version" download_file "$upgradeurl" "$script_from_repo" newversion=$(grep "^version=" "$script_from_repo" | sed 's/[^0-9.]*//g') if [ -z "$newversion" ]; then newversion=$version fi if [ $dry_run -eq 1 ]; then echo -e "Would check if this running script (version $version) is out of date. \n" \ "If it's been superseded, the new version would be downloaded and you'd be asked \n" \ "if you want to upgrade to it and run the new version. \n" return fi local latest_version latest_version=$(echo -e "$version\\n$newversion" | sort --reverse --version-sort | head -1) if [ "$latest_version" = "$version" ]; then echo "$scriptname is already the latest version ($version) - continuing" rm -f "$script_from_repo" else echo "New version ($newversion) of $scriptname detected" if yesno "run $scriptname $newversion now" then echo "OK, executing $script_from_repo $*" # replace the current script with a new one mv -f "$script_from_repo" "$script" chmod u+x "$script" echo "Download of $scriptname $newversion successful" rm "$LOCK" echo "Run $script $script_run_args" # use $script_run_args without quotes to avoid error # `getopt: unrecognized option` if there are more than 1 arguments # shellcheck disable=SC2086 exec "$script" --skip-version-check $script_run_args error "Failed to run $script $script_run_args" else echo -e "New version of script is available: $upgradeurl \n" \ "It was downloaded to $script_from_repo \n" \ "If you prefer to use current version, run it with \"--skip-version-check\" key. \n" exit 1 fi fi } remove_debian_repo() { rm /etc/apt/sources.list.d/imunify360-alt-php.list 2>/dev/null } remove_centos_repo() { rm /etc/yum.repos.d/imunify360-ea-php-hardened \ /etc/yum.repos.d/imunify360-alt-php 2>/dev/null } remove_acronis_agent() { [ ! -e /usr/bin/restore_infected ] && return if /usr/bin/restore_infected acronis extra is_installed 2> /dev/null; then # If Acronis installation logs are present in restore_infected folder, # then remove Acronis and the logs if ls /var/restore_infected/acronis_installation*.log; then /usr/bin/restore_infected acronis extra uninstall > /dev/null || : rm -f /var/restore_infected/acronis_installation*.log fi fi } terminate_detached_scans () { for file in /var/imunify360/aibolit/run/*/pid; do test -e "$file" && kill -9 "$(cat "$file")" done rm -rf /var/imunify360/aibolit/run/ rm -rf /var/imunify360/aibolit/scans.pickle } # Only for imunify360-firewall remove_hardened_php_repos() { if [[ $ostype = centos ]]; then ALT_PHP=imunify360-alt-php.repo EA_PHP=imunify360-ea-php-hardened.repo REPOS_DIR=/etc/yum.repos.d # fix permissions for REPO in $ALT_PHP $EA_PHP; do test -f $REPOS_DIR/$REPO || continue chattr -i $REPOS_DIR/$REPO chmod 644 $REPOS_DIR/$REPO done # remove unconditionally rm -f $REPOS_DIR/$ALT_PHP rm -f $REPOS_DIR/$EA_PHP fi } print_help () { cat << EOF >&2 Usage: -h, --help Print this message --version Print script's version and exit -k, --key <key> Deploy $PRODUCT with activation key -c, --uninstall Uninstall $PRODUCT --skip-version-check Do not check for script updates --skip-registration Do not register, just install (the default) --dev-install Turn off software defect reporting --beta Install packages from 'testing' repo --check Check if imunify360 Agent can be installed and exit --downgrade Preserve ImunifyAV when uninstalling Imunify360 --purge Purge configuration and state files when uninstalling --post-os-upgrade Run after dist-upgrade on Debian/Ubuntu systems -y, --yes Assume "yes" as answer to all prompts and run non-interactively EOF } print_version() { echo "$scriptname $version" } check_centos_iptables_compatibility() { # dummy function that does nothing : } check_debian_iptables_compatibility() { if [ "$ID" == "debian" ] && [ "$VERSION_ID" == "10" ] then local apt_opts="-t buster-backports" log install_debian_pkgs iptables check_exit_code 0 "iptables >= 1.8.5 required on Debian 10. \n\ Please, turn on buster-backports repository and run the script/installation again. \n\ Buster-backports repository may be turned on by following command: \n\ echo "deb http://ftp.debian.org/debian buster-backports main" > /etc/apt/sources.list.d/buster-backports.list \n\ Then run: \n\ apt-get update \n" fi } setup_imunify360_dir() { if [ ! -d "/var/imunify360/" ]; then mkdir -m 2755 -p /var/imunify360 fi } install_revisium_premium_marker () { local key_directory="/etc/sw/keys/keys" local imunify_keytype="ImunifyAV+" if [ -d "$key_directory" ]; then # Search for the specified keytype in the keys if grep -q "<core:keytype>$imunify_keytype</core:keytype>" "$key_directory"/*; then # Create the flag setup_imunify360_dir touch "$PREMIUM_REVISIUM_EXTENSION" echo "AV+ license is detected in Revisium extension, creating marker file $PREMIUM_REVISIUM_EXTENSION" fi fi } remove_revisium_premium_marker () { if [ -f "$PREMIUM_REVISIUM_EXTENSION" ]; then rm -f "$PREMIUM_REVISIUM_EXTENSION" fi } disable_firewall() { setup_imunify360_dir touch /var/imunify360/firewall_disabled } special_config_cloudways() { log echo "Installing cloudways configuration" imunify360_python38_datadir=$venv_path/share/imunify360 local first_install_cloudways="$imunify360_python38_datadir/11_on_first_install_cloudways.config" cp -v "$first_install_cloudways" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." } create_upgrade_process_marker() { touch /var/imunify360/upgrade_process_started trap "rm -f /var/imunify360/upgrade_process_started" SIGTERM SIGINT SIGHUP EXIT } webshield_module_supported() { which apachectl &>/dev/null && [ -x /usr/local/cpanel/cpanel ] && [ ! -d /usr/local/lsws ] } install_apache_config() { local pkg=$1 local ver=$2 if [ -d "$venv_path" ]; then echo "imunify360-venv detected" imunify360_python38_datadir=$venv_path/share/imunify360 fi local cfg="$imunify360_python38_datadir"/10_on_first_install_ids.apache.config log echo "Installing $cfg from $pkg $ver" cp -v "$cfg" /etc/sysconfig/imunify360/imunify360.config.d/ && log echo "Done." } remove_apache_config() { unlink /etc/sysconfig/imunify360/imunify360.config.d/10_on_first_install_ids.apache.config 2>/dev/null || true } cleanup() { rm -f "$LOCK" } rapid_scan_basedir_override() { touch /var/imunify360/rapid_scan_basedir_override } uninstall_plesk_extension() { if [ "$PANEL" = "plesk" ] && [ "$I360_FROM_PLESK_EXTENSION" != "1" ]; then if [ -x /usr/local/psa/bin/extension ]; then log echo "Uninstalling Plesk extension for $PRODUCT..." SKIP_PREUNINSTALL_CHECK=true log /usr/local/psa/bin/extension --uninstall imunify360 || true fi fi } # Lets start # if environment has umask=0000 (if called from plesk extension), all created files have -rw-rw-rw- permission umask 0022 init_vars "$0" "$*" reopen_log if [ -f "$LOCK" ] ; then if [ -d "/proc/$(cat "$LOCK")" ] ; then exit_with_error "$scriptname is already running" fi fi echo $$ > "$LOCK" check_exit_code 0 "Please run $scriptname as root" trap cleanup SIGTERM SIGINT SIGHUP EXIT options=$(getopt -o ychk: -l yes,uninstall,purge,help,version,check,skip-version-check,skip-registration,beta,dev-install,force,apt-force,freemium,migrate-patchman,downgrade,post-os-upgrade,key: -- "$@") res=$? if [ "$res" != 0 ]; then print_help exit 1 fi eval set -- "$options" while true; do case "$1" in -h|--help) print_help exit 0 ;; --version) print_version exit 0 ;; -y|--yes) assumeyes=true export DEBIAN_FRONTEND=noninteractive if [ -z "$apt_force" ]; then apt_force='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold' fi shift ;; -c|--uninstall) uninstall=true shift ;; -k|--key) conversion=true activationkey="$2" shift 2 ;; --skip-version-check) skipversioncheck=true shift ;; --skip-registration) registration=false shift ;; --beta) beta=true yum_beta_option="--enablerepo=imunify360-testing" yum_beta_repo_enable=1 shift ;; --freemium) freemium=true shift ;; --dev-install) dev_install=true apt_allow_unauthenticated=--allow-unauthenticated shift ;; --force|--apt-force) # used for Plesk extension installation export DEBIAN_FRONTEND=noninteractive apt_force='-o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew' shift ;; --check) run_compatibility_check EXIT_CODE=$? exit $EXIT_CODE ;; --migrate-patchman) migrate_patchman=true shift ;; --downgrade) downgrade=true uninstall=true shift ;; --purge) uninstall=true purge=true shift ;; --post-os-upgrade) post_os_upgrade=true shift ;; --) shift break ;; -*) echo "$0: error - unrecognized option $1" 1>&2 print_help exit 1 ;; *) exit_with_error "Internal error!" ;; esac done # --post-os-upgrade runs before the compatibility check because the # broken repo state after a dist-upgrade may cause the check to fail. if [ "$post_os_upgrade" = "true" ]; then if [ "$uninstall" = "true" ]; then exit_with_error "invalid combination: --post-os-upgrade and --uninstall" fi # Detect OS type without full compatibility check populate_os_release_vars if echo "$ID" "$ID_LIKE" | grep -q debian; then ostype=debian else ostype=centos fi post_os_upgrade_repos exit 0 fi RESULT=$(run_compatibility_check) check_exit_code 0 "Compatibility check failed with exit code\nCompatiblity check output:\n$RESULT" log echo -e "Compatiblity check output:\n$RESULT" # Parse and set the variables from the output eval $(echo "$RESULT" | grep -E "^(ostype|is_cloudways|INTEGRATION_CONF_PATH|PANEL)=") populate_os_release_vars if [ "$skipversioncheck" = "true" ]; then log echo "Skipping check version" else log check_version "$*" fi detect_first_install if [[ "$package" = "$imunify360" ]]; then remove_hardened_php_repos # install vendors only for imunify360 install_vendors="true" if [ "$is_cloudways" = "true" ]; then setup_imunify360_dir touch /etc/sysconfig/imunify360/.cloudways_environment fi fi if [ "$conversion" = "true" ] && [ "$uninstall" = "true" ] ; then exit_with_error "invalid combination"; fi if [ "$conversion" = "false" ] && [ "$registration" != "false" ] ; then # Register by IP is the default now conversion=true activationkey=false fi if [ "$uninstall" = "true" ]; then remove_acronis_agent remove_hardened_php_feature remove_freemium_flag # Check if we need to downgrade if should_perform_downgrade; then log echo "Starting downgrade from Imunify360 to ImunifyAV..." # Mark ImunifyAV packages as manually installed log mark_${ostype}_av_manual fi # yum returns non-zero on already-missing packages, so only Debian can # reliably distinguish real failures from benign ones. if [ "$ostype" = "debian" ]; then if ! log remove_${ostype}_imunify; then exit_with_error "Failed to remove imunify packages (see log above for details)" fi else log remove_${ostype}_imunify fi log remove_apache_config if should_perform_downgrade; then # Don't remove the repository as ImunifyAV uses the same one # Verify ImunifyAV is still installed verify_imunify_av log echo "Downgrade to ImunifyAV complete." else remove_${ostype}_repo remove_imunify_release terminate_detached_scans log remove_first_install_default_overrides uninstall_plesk_extension log echo "Uninstall complete." if [ "$purge" = "true" ]; then cleanup_purge_leftovers fi fi exit 0 fi if [[ "$package" = "$imunify360" ]]; then if ! check_${ostype}_pkg_presence ipset then log install_${ostype}_ipset check_exit_code 0 "Package ipset was not installed." fi if ! ipset list -n -t >/dev/null then exit_with_error "Your OS virtualization technology $(systemd-detect-virt 2>/dev/null || virt-what >/dev/null || echo of unknown type) has limited support for ipset in containers. Please, contact Imunify360 Support Team." fi check_${ostype}_iptables_compatibility # Do not remove AV explicitly after moving 6.10 version into stable repo if check_${ostype}_pkg_presence imunify-antivirus \ && ! (check_${ostype}_pkg_presence imunify360-firewall); then # remove imunify-antivirus package for old imunify360 (due to conflict) # for new imunify360 versions AV is a dependency of imunify360 package_version=$(get_available_${ostype}_package_version "$package") check_exit_code 0 "Failed to get package version" log echo "$package $package_version is available" if [[ "$is_cloudways" != "true" && "$PANEL" != "plesk" ]]; then # Marker file for UI for tracking the upgrade process create_upgrade_process_marker fi if version "$package_version" -lt "6.10" ; then get_${ostype}_pkgs_manager log echo "You are about to uninstall ImunifyAV and install Imunify360 that includes Malware Scanner. To get ImunifyAV back run the following commands: # $pkgs_manager remove 'imunify360-firewall*' # wget https://repo.imunify360.cloudlinux.com/defence360/imav-deploy.sh -O imav-deploy.sh # bash imav-deploy.sh" if yesno "Do you agree to proceed with uninstalling ImunifyAV?"; then log remove_${ostype}_pkgs 'imunify-antivirus' else exit 1 fi fi fi fi if [[ "$package" = "$imunify360" ]]; then log echo "Checking prerequisites..." case "$PANEL" in cpanel) if [ -f '/etc/cpanel/ea4/is_ea4' ] ; then # modsec3 conflicts with mod_security2. Do not try to install # mod_security2 if modsec3 exists if ! check_${ostype}_pkg_presence ea-modsec30 then log echo "Installing mod_security2" if [[ "$ostype" = "debian" ]]; then # '-' (hyphen) modsec_package=ea-apache24-mod-security2 else # '_' (underscore) modsec_package=ea-apache24-mod_security2 fi log "install_${ostype}_pkgs" "$modsec_package" fi fi # "activate" Freemium license: just feature flag for now if [[ "${freemium}" = "true" ]]; then log echo "Creating Imunify Freemium feature flag" setup_imunify360_dir touch "/var/imunify360/myimunify-freemium.flag" fi ;; directadmin) pushd /usr/local/directadmin/custombuild/ da_webserver="$(grep ^webserver= options.conf | sed s/webserver=//)" da_modsecurity="$(grep ^modsecurity= options.conf | sed s/modsecurity=//)" if [ "$da_webserver" != apache -a "$da_webserver" != litespeed ] then log echo "Imunify modsecurity ruleset is not supported for $da_webserver webserver." else if [ "$da_modsecurity" != yes ]; then log echo "Installing DirectAdmin modsecurity..." # create options.conf backup file before edit # with name e.g. options.conf.bak_2018-03-29.1522323911 sed -i.bak_"$(date +%F.%s)" \ -e "s/^modsecurity=.*/modsecurity=yes/" \ -e "s/^modsecurity_ruleset=.*/modsecurity_ruleset=no/" options.conf ./build modsecurity else log echo "Installing DirectAdmin modsecurity... already installed!" fi modifying_call=true fi popd ;; generic) ;; plesk) if ! /usr/local/psa/bin/server_pref --show-web-app-firewall >/dev/null 2>&1 \ || ! ls /usr/local/psa/admin/sbin/modsecurity_ctl >/dev/null 2>&1 then # There appears to be a bug in Plesk - when installation is triggered via UI, using Plesk extension, # i360deploy process somehow receives a SIGTERM from `plesk installer` process. # See comments in https://cloudlinux.atlassian.net/browse/DEF-7450 for details. # TODO: re-check this bug after installation is re-worked in https://cloudlinux.atlassian.net/browse/DEF-9061 if [ "$I360_FROM_PLESK_EXTENSION" != 1 ]; then log echo "Installing mod_security" log run_with_retries "plesk installer --select-release-current --install-component modsecurity" "BUSY: Update operation was locked by another update process" "true" fi fi ;; esac fi if [ "$first_install" = "true" ]; then log echo "In a few moments the script will install latest $package" \ "package (w/dependencies)... (Ctrl-C to cancel)" sleep 4 install_imunify_release if [[ $ostype = debian ]]; then # do apt update to be able to install new version of alt-common-release if ! log run_with_retries "apt-get update" ""; then test "$dev_install" = true check_exit_code 0 "apt-get update error." fi fi log install_${ostype}_pkgs alt-common-release if [[ $ostype = debian ]]; then if ! log run_with_retries "apt-get update" ""; then test "$dev_install" = true check_exit_code 0 "apt-get update error." fi fi if [ "$is_cloudways" = "true" ]; then disable_firewall fi package_version=$(get_available_${ostype}_package_version "$package") check_exit_code 0 "Failed to get package version" log install_${ostype}_pkgs $package rc=$? # try installing the config overrides regardless of the installation success log install_first_install_default_overrides "$package" "$package_version" webshield_module_supported && log install_apache_config "$package" "$package_version" || true if [[ "$package" = "$imunify360" ]]; then log set_low_resource_usage_mode_if_necessary "$package" "$package_version" fi # fail if [ $rc -ne 0 ]; then exit_with_error "Package $package $package_version was not installed." fi if [ "$is_cloudways" = "true" ]; then special_config_cloudways rapid_scan_basedir_override fi # Load the product's SELinux policy so imunify-notifier & friends work # on SELinux-enforcing hosts without manual semodule steps (DEF-36450). log apply_selinux_policy modifying_call=true fi log echo "Installing ui packages..." case "$PANEL" in cpanel) log check_and_install "$package" "$package_version" "$UI_PACKAGE" "$PANEL" check_exit_code 0 "Failed to install $PRODUCT $PANEL plugin." modifying_call=true ;; directadmin) log check_and_install "$package" "$package_version" "$UI_PACKAGE" "$PANEL" check_exit_code 0 "Failed to install $PRODUCT $PANEL plugin." modifying_call=true ;; generic) log check_and_install "$package" "$package_version" "imunify-ui" "$PANEL" check_exit_code 0 "Failed to install $PRODUCT $PANEL plugin." modifying_call=true ;; plesk) log check_and_install "$package" "$package_version" "$UI_PACKAGE" "$PANEL" check_exit_code 0 "Failed to install $PRODUCT $PANEL plugin." if is_debian_like; then plugin_path="/var/imunify360/plesk/imunify-plugin.zip" else SYS_CONF_DIR="$(rpm --eval '%{_sysconfdir}')" plugin_path="$SYS_CONF_DIR/sysconfig/imunify360/plesk/imunify-plugin.zip" fi if [ -f "$plugin_path" ] && [ "$I360_FROM_PLESK_EXTENSION" != "1" ]; then log echo "Trying to install/upgrade Imunify360 Plesk extension..." SKIP_PREINSTALL_HOOK=true log /usr/local/psa/bin/extension --upgrade "$plugin_path" || true fi modifying_call=true ;; *) log echo "UI plugin is not installed." log echo "No supported hosted panel detected and $INTEGRATION_CONF_PATH file is missing." install_vendors=false ;; esac if [ "$conversion" = "true" ] ; then if [[ "$package" = "$imunify360" ]]; then # try to migrate the old patchman agent if [[ "$migrate_patchman" = "true" ]] ; then do_migrate_patchman fi if [ "$is_cloudways" != "true" ]; then log echo "Checking if has already been registered... " log imunify360-agent --console-log-level ERROR rstatus rstatus=$? if [ "$rstatus" = 11 ] ; then exit_with_error "Registration server general error." fi if [ "$rstatus" = 0 -a "$activationkey" != false ] ; then log echo "Unregister the previous registration key... " log imunify360-agent --console-log-level WARNING unregister fi if [ "$activationkey" != false ] ; then log echo "Register by key... " log imunify360-agent --console-log-level WARNING register "$activationkey" check_exit_code 0 "Registration was not successful. Exiting." elif [ "$rstatus" != 0 ] ; then # "$rstatus" != 0 check because it is no sense to re-register # by IP (in comparison with re-register by activation key) log echo "Register by IP... " log imunify360-agent --console-log-level WARNING register IPL fi if [[ $? != 0 ]]; then log echo "Registration was not successful." else log echo "Successfully registered" fi disable_3rd_party_ids fi if is_systemctl_avail; then log systemctl enable imunify360.service log systemctl start imunify360 else log /sbin/chkconfig --add imunify360 log /sbin/service imunify360 start fi fi check_exit_code 0 "Failed to start $package service." agent_start_success=false if [ "$is_cloudways" != "true" ]; then log echo "Waiting for $PRODUCT to start..." for i in {1..10}; do if log $COMMAND version then log echo "$PRODUCT is started" agent_start_success=true break else sleep 60 fi done if ! $agent_start_success; then log echo "Something went wrong during $PRODUCT start up" exit_with_error "See /var/log/imunify360/error.log for details" fi if [[ "$package" = "$imunify360" ]]; then # agent is started #force-disable WebShield if [ "$PANEL" = "generic" ] ; then imunify360-agent config update '{"WEBSHIELD": {"enable": false}}' fi # turn on MyImunify if [[ "${freemium}" = "true" && "$PANEL" = "cpanel" ]]; then log echo "Turning on MyImunify" imunify360-agent config update '{"MY_IMUNIFY": {"enable": true}}' fi fi if [ "$install_vendors" = "true" ]; then /usr/bin/imunify360-agent --console-log-level=WARNING install-vendors fi else install_vendors_in_cw_environment >/dev/null & disown fi elif ! $COMMAND rstatus >/dev/null 2>&1 then log echo "You have to register this software with registration key:" log echo " $script --key <key>" fi if $modifying_call; then log echo "Success" log echo "You can find complete log in $LOG_FILE" fi exit 0
Close