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)
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
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
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)
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
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)
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
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
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])
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)
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
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)
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()
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)
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'
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)
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
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
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, '设置成功!')
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()
def getServerDir(): return mw.getServerDir() + '/' + getPluginName()
def getConf(): return mw.getServerDir() + '/web_conf/nginx/vhost/xhprof.conf'
def getConfAppStart(): pstart = mw.getServerDir() + '/php/app_start.php' return pstart
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
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
def contentReplace(content): service_path = mw.getServerDir() content = content.replace('{$SERVER_PATH}', service_path) return content
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`")
def getConf(): path = mw.getServerDir() + "/openresty/nginx/conf/nginx.conf" return path
def getRuleJsonPath(name): path = mw.getServerDir( ) + "/openresty/nginx/conf/waf/rule/" + name + ".json" return path
def reload(): stop() mw.execShell('rm -rf ' + mw.getServerDir() + "/openresty/nginx/logs/error.log") start() return 'ok'