Failed to save the file to the "xx" directory.

Failed to save the file to the "ll" directory.

Failed to save the file to the "mm" directory.

Failed to save the file to the "wp" directory.

403WebShell
403Webshell
Server IP : 66.29.132.124  /  Your IP : 3.142.199.54
Web Server : LiteSpeed
System : Linux business141.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64
User : wavevlvu ( 1524)
PHP Version : 7.4.33
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /lib64/nagios/plugins/nccustom/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib64/nagios/plugins/nccustom/check_plans.py
#!/usr/bin/python2

import os, re, sys, getopt
import os.path
#####################################################################
#                                                                   #
# Script for validate users plans and owners on shared servers      #
#                                 Created by Max.N v.0.0.5          #
#                                                                   #
#####################################################################
# def vars
reseller = 0
defplans = []
#excludusers_file_path="excludeusers.list"
#defplans_file_path="defplans.list"
excludusers = ["nctest", "wh", "system"]
# excludeusers = open("excludeusers.list")

def fillArray(arrayname,path2file):
    if os.path.isfile(path2file):
        with open(path2file) as excl:
            arrayname += [line.strip() for line in excl]
    return arrayname


### file path 
fillArray(excludusers,"/usr/share/nc_nagios/check_plans/nc-users.list")
fillArray(defplans,"/usr/share/nc_nagios/check_plans/nc-plans.list")
#sys.exit(0)

debug = 0

getplan = re.compile('PLAN=(.*)', re.IGNORECASE)
getowner = re.compile('OWNER=(.*)', re.IGNORECASE)

badguys_resellers = ["reseller account:"]
badguys_owner = ["owner:"]
badguys_plan = ["plan:"]
badguys_excluded = ["settings in nrpe.cfg excludes list users: "]
badguys = []


def validateUser(user):
    if not os.path.exists("/home/" + user) or not os.path.isfile("/var/cpanel/users/" + user):
        badguys_excluded.append(user)
        return 0
    else:
        excludusers.append(user)
        return 1


try:
    opts, args = getopt.getopt(sys.argv[1:], "hrd:u:p:e:", ["reseller", "deff-plans=", "user-exclude=", "defplans-file=", "excludeuser-file="])
    for opt, arg in opts:
        if opt == '-h':
            print __file__, '-r -d <defplan1> -d <defplan2> ... -d <defplanN>'
            print " -r              use for reseller hosts"
            print " -d <defplan>    use to add plan to default batch"
            print " -u <username>   use to exclude user "
            print " -p <path to file>   file with allowed NC plans"
            print " -e <path to file>   file with whitelisted users"

            sys.exit(4)
        elif opt in ("-r", "--reseller"):
            reseller = 1
        elif opt in ("-d", "--deff-plans"):
            defplans.append(arg)
        elif opt in ("-u", "--user-exclude"):
            #if validateUser(arg) == 0:
            #    badguys_excluded.append(arg)
            #else:
            #    excludusers.append(arg)
            validateUser(arg)
        elif opt in ("-p", "--defplans-file"):
            fillArray(defplans, arg)
        elif opt in ("-e", "--excludeuser-file"):
                users = []
                if len(fillArray(users, arg)) > 0:
                    badguys_excluded[0]="settings in nrpe.cfg or external excludes list, users: "
                    for user in users:
                        validateUser(user)


except getopt.GetoptError:
    print "WRONG WAY ! please try again with another args."

#if sys.argv.__len__() <= 1:
#    print 'no args please use', __file__, '-h'
#    sys.exit(4)

if reseller == 1:
    getValidResellers = re.compile('(.*):')
    sourceResellerList = open('/var/cpanel/resellers').read()
    resellers = getValidResellers.findall(sourceResellerList)
    badguys_resellers_notRootChown = ["[Reseller account but Not owned by ROOT]: "]
    badguys_resellers_DelOwner = ["[Owner Not a reseller]: "]
    badguys_resellers_RootChownNotRes = ["[Owned by root but Not a Reseller]: "]

if debug == 1:
    user = 'workiqmd'
    tmpuser = open("/var/cpanel/users/" + user).read()
    # print tmpuser
    plan = getplan.findall(tmpuser)[0]
    owner = getowner.findall(tmpuser)[0]
    if reseller:  # skip user if resold
        if owner != 'root':
            if user in resellers:
                print "user is not owned by root but have a RESELLER account"
                badguys_resellers_notRootChown.append(user + ":' owner " + owner + "'")
            elif owner not in resellers:
                print "user had owner that not exist"
                badguys_resellers_DelOwner.append(user + ":' owner " + owner + "'")
            else:
                print "GooD One"
                # continue

        elif user not in resellers:
            print "user owned by ROOT bun not a RESELLER !"
            badguys_resellers_RootChownNotRes.append(user + ":' owner " + owner + "'")

    if badguys_resellers_RootChownNotRes.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_RootChownNotRes)
    if badguys_resellers_DelOwner.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_DelOwner)
    if badguys_resellers_RootChownNotRes.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_notRootChown)
    if badguys_resellers.__len__() > 1:
        badguys.extend(badguys_resellers)
    print user, plan, owner
    sys.exit(1)

path2cPanelUsers = '/var/cpanel/users'
path2cPanelPlans = '/var/cpanel/packages/'

userlist = os.listdir(path2cPanelUsers)

# print userlist;
# users = []

for user in userlist:
    if user in excludusers:  # skip user.
        continue
    if not os.path.exists("/home/" + user): # skip if user not exist
    #if validateUser(user) == 0:
        continue

    try:
        tmpuser = open(path2cPanelUsers + '/' + user).read()
        plan = getplan.findall(tmpuser)[0]
        owner = getowner.findall(tmpuser)[0]
    except:
        badguys.append(user + ":" + "check manually")
    # users.append([user, plan, owner])
    if reseller:  # skip user if resold
        if owner != 'root':
            if user in resellers:
                # print "user is not owned by root but have a RESELLER account"
                badguys_resellers_notRootChown.append(user + ":'" + owner + "'")
                continue
            elif owner not in resellers:
                # print "user had owner that not exist"
                badguys_resellers_DelOwner.append(user + ":'" + owner + "'")
                continue
            else:
                # print "GooD One"
                continue
        elif user not in resellers:
            # print "user owned by ROOT bun not a RESELLER !"
            badguys_resellers_RootChownNotRes.append(user + ":'" + owner + "'")
            continue
    elif owner != 'wh':
        badguys_owner.append(user + ":'" + owner + "'")
        continue

    if plan not in defplans:
        badguys_plan.append(user + ":'" + plan + "'")

if badguys_owner.__len__() > 1:
    badguys.extend(badguys_owner)
if badguys_plan.__len__() > 1:
    badguys.extend(badguys_plan)

# print "\n", badguys_resellers_RootChownNotRes, badguys_resellers_RootChownNotRes.__len__(), '\n', badguys_resellers_DelOwner ,badguys_resellers_DelOwner.__len__() , '\n', badguys_resellers_notRootChown, badguys_resellers_notRootChown.__len__(),  "\n"

if reseller == 1:
    if badguys_resellers_RootChownNotRes.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_RootChownNotRes)
    if badguys_resellers_DelOwner.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_DelOwner)
    if badguys_resellers_notRootChown.__len__() > 1:
        badguys_resellers.extend(badguys_resellers_notRootChown)
    if badguys_resellers.__len__() > 1:
        badguys.extend(badguys_resellers)

# not valid whitelisted users
if badguys_excluded.__len__() > 1:
    badguys.extend(badguys_excluded)
    badguys.append(" already removed from server")

# print "\n", badguys_resellers, "\n"

# print users
if badguys.__len__() > 1:
    result = " ".join(badguys)
    print "[Critical]: Following users don't have valid " + result
    sys.exit(2)
else:
    print "[OK]: all users have valid hosting plans and owners"
    sys.exit(0)

Youez - 2016 - github.com/yon3zu
LinuXploit