Exemple #1
0
def initDreplace():

    config = getPluginDir() + '/waf/config.json'
    content = mw.readFile(config)
    content = json.loads(content)
    content['reqfile_path'] = mw.getServerDir(
    ) + "/openresty/nginx/conf/waf/html"
    mw.writeFile(config, mw.getJson(content))

    path = mw.getServerDir() + "/openresty/nginx/conf"
    if not os.path.exists(path + '/waf'):
        sdir = getPluginDir() + '/waf'
        cmd = 'cp -rf ' + sdir + ' ' + path
        mw.execShell(cmd)

    config = mw.getServerDir() + "/openresty/nginx/conf/waf/lua/init.lua"
    content = mw.readFile(config)
    content = contentReplace(content)
    mw.writeFile(config, content)

    waf_conf = mw.getServerDir() + "/openresty/nginx/conf/luawaf.conf"
    waf_tpl = getPluginDir() + "/conf/luawaf.conf"
    content = mw.readFile(waf_tpl)
    content = contentReplace(content)
    mw.writeFile(waf_conf, content)
Exemple #2
0
def contentReplace(content):
    service_path = mw.getServerDir()
    waf_path = mw.getServerDir() + "/openresty/nginx/conf/waf"
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$WAF_PATH}', waf_path)
    return content
Exemple #3
0
def contentReplace(content, version):
    service_path = mw.getServerDir()
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$PHP_VERSION}', version)
    content = content.replace('{$LOCAL_IP}', mw.getLocalIp())

    if mw.isAppleSystem():
        # user = mw.execShell(
        #     "who | sed -n '2, 1p' |awk '{print $1}'")[0].strip()
        content = content.replace('{$PHP_USER}', 'nobody')
        content = content.replace('{$PHP_GROUP}', 'nobody')

        rep = 'listen.owner\s*=\s*(.+)\r?\n'
        val = ';listen.owner = nobody\n'
        content = re.sub(rep, val, content)

        rep = 'listen.group\s*=\s*(.+)\r?\n'
        val = ';listen.group = nobody\n'
        content = re.sub(rep, val, content)

        rep = 'user\s*=\s*(.+)\r?\n'
        val = ';user = nobody\n'
        content = re.sub(rep, val, content)

        rep = r'[^\.]group\s*=\s*(.+)\r?\n'
        val = ';group = nobody\n'
        content = re.sub(rep, val, content)

    else:
        content = content.replace('{$PHP_USER}', 'www')
        content = content.replace('{$PHP_GROUP}', 'www')
    return content
Exemple #4
0
def getLibConf(version):
    fname = mw.getServerDir() + '/php/' + version + '/etc/php.ini'
    if not os.path.exists(fname):
        return mw.returnJson(False, '指定PHP版本不存在!')

    phpini = mw.readFile(fname)

    libpath = getPluginDir() + '/versions/phplib.conf'
    phplib = json.loads(mw.readFile(libpath))

    libs = []
    tasks = mw.M('tasks').where("status!=?",
                                ('1', )).field('status,name').select()
    for lib in phplib:
        lib['task'] = '1'
        for task in tasks:
            tmp = mw.getStrBetween('[', ']', task['name'])
            if not tmp:
                continue
            tmp1 = tmp.split('-')
            if tmp1[0].lower() == lib['name'].lower():
                lib['task'] = task['status']
                lib['phpversions'] = []
                lib['phpversions'].append(tmp1[1])
        if phpini.find(lib['check']) == -1:
            lib['status'] = False
        else:
            lib['status'] = True
        libs.append(lib)
    return mw.returnJson(True, 'OK!', libs)
Exemple #5
0
def initDreplace():

    file_tpl = getInitdConfTpl()
    service_path = mw.getServerDir()

    initD_path = getServerDir() + '/init.d'
    if not os.path.exists(initD_path):
        os.mkdir(initD_path)
    file_bin = initD_path + '/' + getPluginName()

    if not os.path.exists(file_bin):
        content = mw.readFile(file_tpl)
        content = contentReplace(content)
        mw.writeFile(file_bin, content)
        mw.execShell('chmod +x ' + file_bin)

    conf_bin = getConf()
    if not os.path.exists(conf_bin):
        mw.execShell('mkdir -p ' + getServerDir() + '/custom/conf')
        conf_tpl = getConfTpl()
        content = mw.readFile(conf_tpl)
        content = contentReplace(content)
        mw.writeFile(conf_bin, content)

    log_path = getServerDir() + '/log'
    if not os.path.exists(log_path):
        os.mkdir(log_path)

    return file_bin
Exemple #6
0
 def backupDatabaseAll(self, save):
     db_path = mw.getServerDir() + '/mysql'
     db_name = 'mysql'
     databases = mw.M('databases').dbPos(db_path,
                                         db_name).field('name').select()
     for database in databases:
         self.backupDatabase(database['name'], save)
Exemple #7
0
def contentReplacePHP(content, version):
    service_path = mw.getServerDir()
    # print php_ver
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$PHP_VER}', version)
    return content
Exemple #8
0
def contentReplace(content):
    service_path = mw.getServerDir()
    php_ver = getCachePhpVer()
    # print php_ver
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$PHP_VER}', php_ver)
    return content
Exemple #9
0
 def closeLogsApi(self):
     logPath = mw.getLogsDir()
     os.system('rm -f ' + logPath + '/*')
     os.system('kill -USR1 `cat ' + mw.getServerDir() +
               'openresty/nginx/logs/nginx.pid`')
     mw.writeLog('文件管理', '网站日志已被清空!')
     tmp = self.getDirSize(logPath)
     return mw.returnJson(True, tmp[0].split()[0])
Exemple #10
0
def set_mysql_root(password):
    # 设置MySQL密码
    import db
    import os
    sql = db.Sql()

    root_mysql = '''#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
pwd=$1
${server}/init.d/mysql stop
${server}/bin/mysqld_safe --skip-grant-tables&
echo '正在修改密码...';
echo 'The set password...';
sleep 6
m_version=$(cat ${server}/version.pl|grep -E "(5.1.|5.5.|5.6.|mariadb)")
if [ "$m_version" != "" ];then
    ${server}/bin/mysql -uroot -e "insert into mysql.user(Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,User,Password,host)values('Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','root',password('${pwd}'),'127.0.0.1')"
    ${server}/bin/mysql -uroot -e "insert into mysql.user(Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,User,Password,host)values('Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','root',password('${pwd}'),'localhost')"
    ${server}/bin/mysql -uroot -e "UPDATE mysql.user SET password=PASSWORD('${pwd}') WHERE user='******'";
else
    ${server}/bin/mysql -uroot -e "UPDATE mysql.user SET authentication_string='' WHERE user='******'";
    ${server}/bin/mysql -uroot -e "FLUSH PRIVILEGES";
    ${server}/bin/mysql -uroot -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${pwd}';";
fi
${server} -uroot -e "FLUSH PRIVILEGES";
pkill -9 mysqld_safe
pkill -9 mysqld
sleep 2
${server}/init.d/mysql start

echo '==========================================='
echo "root密码成功修改为: ${pwd}"
echo "The root password set ${pwd}  successuful"'''

    server = mw.getServerDir() + '/mysql'
    root_mysql = root_mysql.replace('${server}', server)
    mw.writeFile('mysql_root.sh', root_mysql)
    os.system("/bin/bash mysql_root.sh " + password)
    os.system("rm -f mysql_root.sh")

    pos = mw.getServerDir() + '/mysql'
    result = sql.table('config').dbPos(pos,
                                       'mysql').where('id=?', (1, )).setField(
                                           'mysql_root', password)
Exemple #11
0
def contentReplace(content):

    service_path = mw.getServerDir()
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$RUN_USER}', getRunUser())
    content = content.replace('{$HOME_DIR}', getHomeDir())

    return content
Exemple #12
0
def makePhpIni(version):
    d_ini = mw.getServerDir() + '/php/' + version + '/etc/php.ini'
    if not os.path.exists(d_ini):
        s_ini = getPluginDir() + '/conf/php' + version[0:1] + '.ini'
        # shutil.copyfile(s_ini, d_ini)
        content = mw.readFile(s_ini)
        if version == '52':
            content = content + "auto_prepend_file=/www/server/php/app_start.php"
        mw.writeFile(d_ini, content)
Exemple #13
0
def checkPhpinfoFile(v):
    if mw.isInstalledWeb():
        sdir = mw.getServerDir()
        dfile = sdir + '/openresty/nginx/conf/php_status/phpinfo_' + v + '.conf'
        if not os.path.exists(dfile):
            tpl = getPluginDir() + '/conf/phpinfo.conf'
            content = mw.readFile(tpl)
            content = contentReplace(content, v)
            mw.writeFile(dfile, content)
            mw.restartWeb()
Exemple #14
0
def getDisableFunc(version):
    filename = mw.getServerDir() + '/php/' + version + '/etc/php.ini'
    if not os.path.exists(filename):
        return mw.returnJson(False, '指定PHP版本不存在!')

    phpini = mw.readFile(filename)
    data = {}
    rep = "disable_functions\s*=\s{0,1}(.*)\n"
    tmp = re.search(rep, phpini).groups()
    data['disable_functions'] = tmp[0]
    return mw.getJson(data)
Exemple #15
0
def stop():
    path = mw.getServerDir() + "/openresty/nginx/conf/waf"
    if os.path.exists(path):
        cmd = 'rm -rf ' + path
        mw.execShell(cmd)

    path = getConf()
    conf = mw.readFile(path)
    conf = conf.replace('include luawaf.conf;', "#include luawaf.conf;")

    mw.writeFile(path, conf)
    mw.restartWeb()
    return 'ok'
Exemple #16
0
def check502():
    try:
        phpversions = ['53', '54', '55', '56', '70', '71', '72', '73', '74']
        for version in phpversions:
            sdir = mw.getServerDir()
            php_path = sdir + '/php/' + version + '/sbin/php-fpm'
            if not os.path.exists(php_path):
                continue
            if checkPHPVersion(version):
                continue
            if startPHPVersion(version):
                print '检测到PHP-' + version + '处理异常,已自动修复!'
                mw.writeLog('PHP守护程序', '检测到PHP-' + version + '处理异常,已自动修复!')
    except Exception as e:
        print str(e)
Exemple #17
0
def initDreplace():

    file_tpl = getConfTpl()
    service_path = mw.getServerDir()

    initD_path = getServerDir() + '/init.d'
    if not os.path.exists(initD_path):
        os.mkdir(initD_path)
    file_bin = initD_path + '/memcached'

    if not os.path.exists(file_bin):
        content = mw.readFile(file_tpl)
        content = content.replace('{$SERVER_PATH}', service_path)
        mw.writeFile(file_bin, content)
        mw.execShell('chmod +x ' + file_bin)

    return file_bin
Exemple #18
0
def startPHPVersion(version):
    sdir = mw.getServerDir()
    try:
        fpm = sdir + '/php/init.d/php' + version
        php_path = sdir + '/php/' + version + '/sbin/php-fpm'
        if not os.path.exists(php_path):
            if os.path.exists(fpm):
                os.remove(fpm)
            return False

        if not os.path.exists(fpm):
            return False

        # 尝试重载服务
        os.system(fpm + ' reload')
        if checkPHPVersion(version):
            return True

        # 尝试重启服务
        cgi = '/tmp/php-cgi-' + version + '.sock'
        pid = sdir + '/php/' + version + '/var/run/php-fpm.pid'
        data = mw.execShell("ps -ef | grep php/" + version +
                            " | grep -v grep|grep -v python |awk '{print $2}'")
        if data[0] != '':
            os.system(
                "ps -ef | grep php/" + version +
                " | grep -v grep|grep -v python |awk '{print $2}' | xargs kill "
            )
        time.sleep(0.5)
        if not os.path.exists(cgi):
            os.system('rm -f ' + cgi)
        if not os.path.exists(pid):
            os.system('rm -f ' + pid)
        os.system(fpm + ' start')
        if checkPHPVersion(version):
            return True

        # 检查是否正确启动
        if os.path.exists(cgi):
            return True
    except Exception as e:
        print(str(e))
        return True
Exemple #19
0
def setDisableFunc(version):
    filename = mw.getServerDir() + '/php/' + version + '/etc/php.ini'
    if not os.path.exists(filename):
        return mw.returnJson(False, '指定PHP版本不存在!')

    args = getArgs()
    disable_functions = args['disable_functions']

    phpini = mw.readFile(filename)
    rep = "disable_functions\s*=\s*.*\n"
    phpini = re.sub(rep, 'disable_functions = ' + disable_functions + "\n",
                    phpini)

    msg = mw.getInfo('修改PHP-{1}的禁用函数为[{2}]', (
        version,
        disable_functions,
    ))
    mw.writeLog('插件管理[PHP]', msg)
    mw.writeFile(filename, phpini)
    reload(version)
    return mw.returnJson(True, '设置成功!')
Exemple #20
0
def makeOpenrestyConf():
    phpversions = [
        '00', '52', '53', '54', '55', '56', '70', '71', '72', '73', '74', '80',
        '81'
    ]
    if mw.isInstalledWeb():
        sdir = mw.getServerDir()
        d_pathinfo = sdir + '/openresty/nginx/conf/pathinfo.conf'
        if not os.path.exists(d_pathinfo):
            s_pathinfo = getPluginDir() + '/conf/pathinfo.conf'
            shutil.copyfile(s_pathinfo, d_pathinfo)

        info = getPluginDir() + '/info.json'
        content = mw.readFile(info)
        content = json.loads(content)
        versions = content['versions']
        tpl = getPluginDir() + '/conf/enable-php.conf'
        tpl_content = mw.readFile(tpl)
        for x in phpversions:
            dfile = sdir + '/openresty/nginx/conf/enable-php-' + x + '.conf'
            if not os.path.exists(dfile):
                if x == '00':
                    mw.writeFile(dfile, '')
                else:
                    w_content = contentReplace(tpl_content, x)
                    mw.writeFile(dfile, w_content)

        # php-fpm status
        for version in phpversions:
            dfile = sdir + '/openresty/nginx/conf/php_status/phpfpm_status_' + version + '.conf'
            tpl = getPluginDir() + '/conf/phpfpm_status.conf'
            if not os.path.exists(dfile):
                content = mw.readFile(tpl)
                content = contentReplace(content, version)
                mw.writeFile(dfile, content)
        mw.restartWeb()
Exemple #21
0
def getServerDir():
    return mw.getServerDir() + '/' + getPluginName()
Exemple #22
0
def getConf():
    return mw.getServerDir() + '/web_conf/nginx/vhost/xhprof.conf'
Exemple #23
0
def getConfAppStart():
    pstart = mw.getServerDir() + '/php/app_start.php'
    return pstart
Exemple #24
0
    def backupDatabase(self, name, count):
        db_path = mw.getServerDir() + '/mysql'
        db_name = 'mysql'
        name = mw.M('databases').dbPos(db_path, 'mysql').where(
            'name=?', (name, )).getField('name')
        startTime = time.time()
        if not name:
            endDate = time.strftime('%Y/%m/%d %X', time.localtime())
            log = u"数据库[" + name + u"]不存在!"
            print(u"★[" + endDate + "] " + log)
            print(
                u"----------------------------------------------------------------------------"
            )
            return

        backup_path = mw.getRootDir() + '/backup/database'
        if not os.path.exists(backup_path):
            mw.execShell("mkdir -p " + backup_path)

        filename = backup_path + "/db_" + name + "_" + \
            time.strftime('%Y%m%d_%H%M%S', time.localtime()) + ".sql.gz"

        import re
        mysql_root = mw.M('config').dbPos(db_path, db_name).where(
            "id=?", (1, )).getField('mysql_root')

        mycnf = mw.readFile(db_path + '/etc/my.cnf')
        rep = "\[mysqldump\]\nuser=root"
        sea = "[mysqldump]\n"
        subStr = sea + "user=root\npassword="******"\n"
        mycnf = mycnf.replace(sea, subStr)
        if len(mycnf) > 100:
            mw.writeFile(db_path + '/etc/my.cnf', mycnf)

        mw.execShell(db_path +
                     "/bin/mysqldump --opt --default-character-set=utf8 " +
                     name + " | gzip > " + filename)

        if not os.path.exists(filename):
            endDate = time.strftime('%Y/%m/%d %X', time.localtime())
            log = u"数据库[" + name + u"]备份失败!"
            print(u"★[" + endDate + "] " + log)
            print(
                u"----------------------------------------------------------------------------"
            )
            return

        mycnf = mw.readFile(db_path + '/etc/my.cnf')
        mycnf = mycnf.replace(subStr, sea)
        if len(mycnf) > 100:
            mw.writeFile(db_path + '/etc/my.cnf', mycnf)

        endDate = time.strftime('%Y/%m/%d %X', time.localtime())
        outTime = time.time() - startTime
        pid = mw.M('databases').dbPos(db_path,
                                      db_name).where('name=?',
                                                     (name, )).getField('id')

        mw.M('backup').add('type,name,pid,filename,addtime,size',
                           (1, os.path.basename(filename), pid, filename,
                            endDate, os.path.getsize(filename)))
        log = u"数据库[" + name + u"]备份成功,用时[" + str(round(outTime, 2)) + u"]秒"
        mw.writeLog(u'计划任务', log)
        print("★[" + endDate + "] " + log)
        print(u"|---保留最新的[" + count + u"]份备份")
        print(u"|---文件名:" + filename)

        # 清理多余备份
        backups = mw.M('backup').where(
            'type=? and pid=?', ('1', pid)).field('id,filename').select()

        num = len(backups) - int(count)
        if num > 0:
            for backup in backups:
                mw.execShell("rm -f " + backup['filename'])
                mw.M('backup').where('id=?', (backup['id'], )).delete()
                num -= 1
                print(u"|---已清理过期备份文件:" + backup['filename'])
                if num < 1:
                    break
Exemple #25
0
def contentReplace(content):
    service_path = mw.getServerDir()
    content = content.replace('{$ROOT_PATH}', mw.getRootDir())
    content = content.replace('{$SERVER_PATH}', service_path)
    content = content.replace('{$SERVER_APP_PATH}', service_path + '/mysql')
    return content
Exemple #26
0
def contentReplace(content):
    service_path = mw.getServerDir()
    content = content.replace('{$SERVER_PATH}', service_path)
    return content
Exemple #27
0
        if i > num:
            break
        os.remove(logs[i])
        print('|---多余日志[' + logs[i] + ']已删除!')

    newFileName = oldFileName + '_' + time.strftime("%Y-%m-%d_%H%M%S") + '.log'
    shutil.move(oldFileName, newFileName)
    print('|---已切割日志到:' + newFileName)


def split_all(save):
    sites = mw.M('sites').field('name').select()
    for site in sites:
        oldFileName = logsPath + site['name'] + px
        split_logs(oldFileName, save)

if __name__ == '__main__':
    num = int(sys.argv[2])
    if sys.argv[1].find('ALL') == 0:
        split_all(num)
    else:
        siteName = sys.argv[1]
        if siteName[-4:] == '.log':
            siteName = siteName[:-4]
        else:
            siteName = siteName.replace("-access_log", '')
        oldFileName = logsPath + '/' + sys.argv[1]
        split_logs(oldFileName, num)
    path = mw.getServerDir()
    os.system("kill -USR1 `cat " + path + "/openresty/nginx/logs/nginx.pid`")
Exemple #28
0
def getConf():
    path = mw.getServerDir() + "/openresty/nginx/conf/nginx.conf"
    return path
Exemple #29
0
def getRuleJsonPath(name):
    path = mw.getServerDir(
    ) + "/openresty/nginx/conf/waf/rule/" + name + ".json"
    return path
Exemple #30
0
def reload():
    stop()
    mw.execShell('rm -rf ' + mw.getServerDir() +
                 "/openresty/nginx/logs/error.log")
    start()
    return 'ok'