存档五月 2021

authentication_答题认证.sh

#!/bin/bash
# 主要功能加入 验证 答题环节 bb - ff 为答题环节
# 次要功能为 替换 替换模板 主要在 aa 里面实现
while :
do
        echo -ne "\e[1;34m请输入模板的网址: \e[0m"
        read TEMPLATE
        if [ -z $TEMPLATE &> /dev/null ];then
                sleep 0.5
                echo -e "\e[1;31m输入的模板为空... ...请重新输入\e[0m"
        else
                #true
                break
        fi
done
web_dir=/www/wwwroot
while :
do
        echo
        echo -e "\e[1;35m您的网页目录为 $web_dir \e[0m"
        echo
	sleep 1
        echo -e "\e[1;35m请核对路径信息 如果网址路径相符合则不用修改\e[0m"
        echo
	sleep 1
        echo -ne "\e[1;36m直接回车不修改,输入 yes 修改路径 请输出:  \e[0m"
        read message
        echo
        if [ -z $message &> /dev/null ];then
                break;
        else
                echo -ne "\e[1;36m请输入您的网页目录: \e[0m"
                read web_dir
                echo
                echo -e "\e[1;34m您更改的 网页目录为 $web_dir\e[0m"
                echo
                break;
        fi
done

ip=`curl -s ip.sb`
dir=$web_dir/$TEMPLATE
apache_conf=/www/server/panel/vhost/apache
DATE=$(date +"%Y%m%d%s")
dujitang=https://api.btstu.cn/yan/api.php?charset=utf-8
n=1
j=30

function aa {
	#read -p '请输入模板的网址: ' TEMPLATE
	if [ -d $dir &> /dev/null ];then
		echo -e "\e[1;35m模板检测通过... ...\e[0m"
	else
		echo -e "\e[1;31m模板不存在... 请您先创建模板\e[0m"
		exit 1
	fi

	if [ -f $apache_conf/$TEMPLATE.conf ];then
		echo -e "\e[1;35m配置文件检测通过... ...\e[0m"
	else
		echo -e "\e[1;31m模板配置文件出错... 请您检查配置... ...\e[0m"
		exit 1
	fi
		echo -e "\e[1;35m正在部署新的模板... ...\e[0m"
	chattr -i /data/$TEMPLATE/.user.ini &> /dev/null
	mkdir -p /data/bak
	mv /data/$TEMPLATE /data/bak/$TEMPLATE_$DATE &> /dev/null
	mv /data/$TEMPLATE.conf /data/bak/$TEMPLATE_$DATE &> /dev/null
	cp -a $dir /data/ 
	cp -a $apache_conf/$TEMPLATE.conf /data/
	chattr -i $TEMPLATE/.user.ini &> /dev/null
	sed -i "s@^TEMPLATE=.*@TEMPLATE=$TEMPLATE@" /data/create_apache.sh
	echo -e "\e[1;35m新的模板部署完成... ...\e[0m"
	exit 0
}

function bb {

	while :
	do
		echo -e "\e[1;33m已经检测到此服务器不是我对象的服务器 现开启验证模式... ...\e[0m"
		sleep 1
		echo -e "\e[1;33m已经检测到此服务器不是我对象的服务器 现开启验证模式... ...\e[0m"
		sleep 1
		echo -e "\e[1;33m已经检测到此服务器不是我对象的服务器 现开启验证模式... ...\e[0m"
		echo
		sleep 5
		echo -en "\e[1;32m您是我的对象吗? 是/不是   \e[0m"
		read ans_1
		if [ -z $ans_1 &> /dev/null ];then
       			echo -e "\e[1;31m瞎啊...'是' 或 '不是' 看不到吗\e[0m"
			sleep 1
			echo
		fi

		if [ "$ans_1" == "是" -o "$ans_1" == "是的" -o "$ans_1" == "yes" -o "$ans_1" == "YES"&> /dev/null ];then
       			echo -e "\e[1;31m真的吗?... \e[0m"
			sleep 2
			echo
			cc	
		elif [ "$ans_1" == "不是" -o "$ans_1" == "no" -o "$ans_1" == "不是的" -o "$ans_1" == "NO"&> /dev/null ];then
       			echo -e "\e[1;31m有缘再见... \e[0m"
			echo
			exit 3
		else
       			echo -e "\e[1;31m瞎啊...'是' 或 '不是' 看不到吗\e[0m"
			sleep 1
			echo
		fi

	done
	

}

function cc {

	while :
	do
		echo -en "\e[1;32m我对象叫什么名字?   \e[0m"
		read ans_2
		if [ -z $ans_2 &> /dev/null ];then
       			echo -e "\e[1;31m什么都没输入呀... ... \e[0m"
			sleep 1
			echo
			continue
		fi

		if [ "$ans_2" == "hazel" -o "$ans_2" == "HAZEL" -o "$ans_2" == "黑柔" -o "$ans_2" == "小鱼" &> /dev/null ];then
       			echo -e "\e[1;31m嗯... 您有可能是我对象... \e[0m"
			echo
			sleep 1
			dd
		else
       			echo -e "\e[1;31m回答错误... 在给您一次机会\e[0m"
			sleep 1
			let cc1++
			echo
		fi

		if [ $cc1 -eq 5 ];then
       			echo -en "\e[1;36m看样您是真不知道了... 是否直接进入答题模式 是/否  \e[0m"
			sleep 1
			read ans_cc1
			if [ "$ans_cc1" == "是" -o "$ans_cc1" == "是的" -o "$ans_cc1" == "yes" -o "$ans_cc1" == "YES"&> /dev/null ];then
				sleep 1
				gg
			elif [ "$ans_cc1" == "不是" -o "$ans_cc1" == "no" -o "$ans_cc1" == "不是的" -o "$ans_cc1" == "NO"&> /dev/null ];then
				continue
			fi
		fi
	done
}	

function dd {

	while :
	do
		echo -en "\e[1;32m我对象漂亮吗?   \e[0m"
		read ans_3
		if [ -z $ans_3 &> /dev/null ];then
       			echo -e "\e[1;31m什么都没输入呀... ... \e[0m"
			sleep 1
			echo
			continue
		fi

		if [ "$ans_3" == "漂亮" -o "$ans_3" == "好看" -o "$ans_3" == "美丽" -o "$ans_3" == "beautiful" &> /dev/null ];then
       			echo -e "\e[1;31m嗯... 您眼光很好... \e[0m"
			echo
			sleep 1
			ee
		else
       			echo -e "\e[1;31m在说一次... ...\e[0m"
			sleep 1
			echo
		fi

	done
}	

function ee {

	while :
	do
		echo -en "\e[1;32m我对象小名是什么?   \e[0m"
		read ans_4
		if [ -z $ans_4 &> /dev/null ];then
       			echo -e "\e[1;31m什么都没输入呀... ... \e[0m"
			echo
			sleep 1
			continue
		fi

		if [ "$ans_4" == "小鱼" &> /dev/null ];then
       			echo -e "\e[1;31m哇... 小名您都知道... \e[0m"
			echo
			sleep 1
			ff
		else
       			echo -e "\e[1;31m回答错误... 在给您一次机会\e[0m"
			echo
			sleep 1
			let ee1++
		fi

		if [ $ee1 -eq 5 ];then
       			echo -en "\e[1;36m看样您是真不知道了... 是否直接进入答题模式 是/否  \e[0m"
			sleep 1
			read ans_ee1
			if [ "$ans_ee1" == "是" -o "$ans_ee1" == "是的" -o "$ans_ee1" == "yes" -o "$ans_ee1" == "YES"&> /dev/null ];then
				sleep 1
				gg
			elif [ "$ans_ee1" == "不是" -o "$ans_ee1" == "no" -o "$ans_ee1" == "不是的" -o "$ans_ee1" == "NO"&> /dev/null ];then
				continue
			fi
		fi

	done
}	

function ff {

	while :
	do
		echo -en "\e[1;32m愿意当我女朋友吗?   \e[0m"
		read ans_5
		if [ -z $ans_5 &> /dev/null ];then
       			echo -e "\e[1;31m什么都没输入呀... ... \e[0m"
			echo
			sleep 1
			continue
		fi

		if [ "$ans_5" == "愿意" -o "$ans_5" == "我愿意" -o "$ans_5" == "yes" -o "$ans_5" == "YES" &> /dev/null ];then
       			echo -e "\e[1;31m真的吗?... 考验您一下吧... \e[0m"
			echo
			sleep 1
			gg
		elif [ "$ans_5" == "不" -o "$ans_5" == "no" -o "$ans_5" == "不愿意" -o "$ans_5" == "NO"&> /dev/null ];then
       			echo -e "\e[1;31m伤心了... .... 在给您一次机会好好说话\e[0m"
			echo
			sleep 1
		else
       			echo -e "\e[1;31m在给您一次机会... \e[0m"
			echo
			sleep 1
		fi

	done
}	

function gg {
	while [ $n -le 101 ]
	do
		sum1=`echo $RANDOM|cksum |cut -c 1-2`
		sum2=`echo $RANDOM|cksum |cut -c 1-2`
       		echo -ne "\e[1;32m $sum1 + $sum2 =  \e[0m"
		read ans_6
		sum=`echo $(($sum1+$sum2))`
		if echo $ans_6 | grep -q '[^0-9]' &> /dev/null ;then
       			echo -e "\e[1;31m能不能好好玩耍了... ...从新回答第 $n 题 \e[0m"
			continue
		fi

		if [ -z $ans_6 &> /dev/null ];then
       			echo -e "\e[1;31m什么都没输入呀...重新回答第 $n 题 \e[0m"
			sleep 1
			continue
		fi


		if [ $ans_6 == $sum ];then
       			echo -e "\e[1;31m您太聪明了... 这么难的都能答对... 完成 第 $n 题\e[0m"
			duji=$(curl -s $dujitang)
			echo -e "\e[1;36m$duji\e[0m"
			let n++
		else
       			echo -e "\e[1;31m回答错误 好好算算 第 $n 题\e[0m"
		fi

		if [ $n -eq 11 ];then
       			echo -e "\e[1;35m您是个能成就大事的人... ... 居然对了这么多道题目\e[0m"
			sleep 1
		fi

		if [ $n -eq 21 ];then
       			echo -e "\e[1;35m服务器已不能为您这高等智商的生物服务... 已开启 自毁模式 倒计时30秒 删除所有数据库...\e[0m"
			sleep 5
			while [ $j -gt 0 ]
			do
				echo -e "\e[1;36m$j\e[0m"
				let j--
				sleep 1
			done
       			echo -e "\e[1;35m一看您就是经历过风浪的人...遇事不慌...处事不惊...终究会成为人上之人...继续答题吧!!!\e[0m"
			
		fi
		
		if [ $n -ge 31 ];then
       			echo -e "\e[1;35m这样吧... 20210408 ...牢记这串数字对您会有帮助 \e[0m"
			sleep 1
		fi

		if [ $n -ge 41 ];then
       			echo -e "\e[1;35m因为这串数字是我对象第一次跟我说话的日子... \e[0m"
			sleep 1
		fi

		if [ $n -ge 41 ];then
       			echo -e "\e[1;35m人才 ... 祝您生活愉快...\e[0m"
			sleep 1
		fi

		if [ $n -ge 51 ];then
       			echo -e "\e[1;35m您有一颗成佛之心...上天也不会亏待您的... ...\e[0m"
			echo
			sleep 5
       			echo -e "\e[1;35m下次在使用直接执行命令 sh change.sh 20210408 或 sh change.sh hazel 即可跳过所有游戏项目... ...\e[0m"
			sleep 5
			aa
		fi

	done

}

if [ -z $1 ];then
	
	true	
else
	if [ "$1" == "20210408" -o "$1" == "hazel" -o "$1" == "HAZEL" ];then
		aa
	fi
	
fi

if [ "$ip" == "45.199.93.38" ];then
	aa
else
	bb
fi

Zimbra 邮箱服务器




Zimbra 邮箱服务器


zimbra 搭建

    # df -h                                            \\ 程序会 安装到 /opt 下面 看是否有足够空间
    # echo 'mail.ssyy99.com' > /etc/hostname
    # hostnamectl set-hostname mail.ssyy99.com           \\ 主机名一定要对上 否则要hosts文件 报错 
    # ifconfig                                            \\ 一定要核对ip地址
    # echo '47.91.219.64 mail.ssyy99.com ' >> /etc/hosts   \\ 必须是网卡上的ip地址 否则会在安装的时候 报ldap错误
    # systemctl stop sendmail
    # systemctl disable sendmail
    # systemctl stop postfix
    # systemctl disable postfix
    # yum install perl perl-core ntpl nmap sudo libidn gmp libaio libstdc++ unzip sysstat sqlite nc
    # wget https://files.zimbra.com/downloads/8.6.0_GA/zcs-8.6.0_GA_1153.RHEL7_64.20141215151110.tgz
    # tar -zxvf zcs-8.6.0_GA_1153.RHEL7_64.20141215151110.tgz
    # mv zcs-8.6.0_GA_1153.RHEL7_64.20141215151110 zimbra
    # cd zimbra
    # ./install.sh --platform-override                              \\ 有特殊地方下面已经标明 其他地方 都是 y 或 yes
        Do you agree with the terms of the software license agreement? [N] y   \\ 同意 继续安装
        Change domain name? [Yes] no                                            \\ 这回报个 error 可选择no 跳过即可

        Address unconfigured (**) items (? - help) 7                         \\ 选择 7
        Select, or 'r' for previous menu [r] 4                                \\ 选择 4 更改管理员密码
        Password for admin@hongxue.com (min 6 characters): [1ewBUZwGo] 123456  \\ 设置管理员密码 123456
        Select, or 'r' for previous menu [r] r                                  \\ 按r 返回上一级
        Select from menu, or press 'a' to apply config (? - help) a              \\ 按 a

        Notify Zimbra of your installation? [Yes] no             \\  跳过zimbra通知

    # vim /etc/sysconfig/iptables                                  \\ 防火墙 需要开通的端口
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 465 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 7025 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 8443 -j ACCEPT
        -A INPUT -p tcp -m state --state NEW -m tcp --dport 7071 -j ACCEPT
    # systemctl restart iptables

    # su - zimbra             \\ 切换到 zimbra 账号  对于zimbra 操作 需要 切换到 zimbra 用户
    $ zmcontrol status         \\ 可查看服务运行状态
    $ zmcontrol restart         \\ 重启 zimbra 服务
    $ zmcontrol stop             \\ 停止 zimbra 服务

    邮箱页面  https://mail.ssyy99.com    \\ 默认是不支持 80端口访问的 需要加 https
        管理用户: admin
        密码: 123456                       \\ 密码 为上面 设置的密码

    管理后台  https://mail.ssyy99.com:7071
        管理用户: admin
        密码: 123456


    注:
        1. 如果在安装的时候报 ldap的错误 是由于删除了 /opt 下的文件 而系统里面包还存在 要删除系统里的包后 重新安装
            # rpm -ql | grep zimbra*
            # yum remove zimbra*

            # /opt/zimbra/libexec/zmsetup.pl      \\ 如有中途报错 待修复错误  此命令 可以继续安装

        2. 关于解析:  mail.ssyy99.com 解析到服务器  另外还需要添加   MX     @     mail.ssyy99.com
        3. 这个四个文件不能修改 会报错
            slapd.crt     slapd.key     smtpd.crt     smtpd.key


关于 更换证书                \\ 如果 使用certab 申请证书 可直接申请 或 把开启80端口的配置文件 注释掉试试  未测试
    # cd /opt/zimbra/conf                       \\ 更换以下 两个 文件即可
    # cp -a nginx.crt nginx_2021.5.14.crt        \\ 记得备份 原有的 证书文件 
    # cp -a nginx.key nginx_2021.5.14.key         \\ 导入 相关证书
    # chown zimbra.zimbra nginx.crt                \\ 不要给多了 不能使用 ./* 赋予权限  启动时候会报其他权限错误
    # chown zimbra.zimbra nginx.key
    # su - zimbra
    $ zmcontrol restart


关于 启用 80 端口 强制跳转 https

    # cd /opt/zimbra/conf/nginx/includes/
    # vim nginx.conf.web                            \\ 修改配置文件
        include /opt/zimbra/conf/nginx/includes/mail.ssyy99.com.conf;
    # vim mail.ssyy99.com.conf                         \\ 创建配置文件
        server{
            listen 80;
            server_name mail.ssyy99.com;
            rewrite ^(/.*)$ https://$host$1 permanent;
        }
    # chown zimbra.zimbra mail.ym8.tv.conf
    # su - zimbra             \\ 切换到 zimbra 账号  对于zimbra 操作 需要 切换到 zimbra 用户
    $ zmcontrol restart        \\ 重启 zimbra 服务


关于 zimbra jira  confluence 的备份

zimbra 备份
 
    备份目录  /home/bak/mail_192.168.10.10/
    备份脚本 /home/bak/mail_192.168.10.10/zimbra_bak.sh

        #!/bin/bash
        # 更新备份整个zimbra
        rsync -avzP --port=63873 root@192.168.10.10::zimbra /home/bak/mail_192.168.10.10/zimbra  >> /home/bak/mail_192.168.10.10/log_bak/zimbra_bakup_log.`date +%Y%m%d`.log
        sleep 10
        tar zcf /home/bak/mail_192.168.10.10/tar_bak/zimbra_bak_`date +%Y_%m_%d`.tar.gz /home/bak/mail_192.168.10.10/zimbra &>/dev/null
        ##清除超过3天的备份
        find /home/bak/mail_192.168.10.10/tar_bak/ -type f -mtime +7 -exec rm -f {} \;
        ##清除超过7天的日志
        find /home/bak/mail_192.168.10.10/log_bak/ -type f -mtime +7 -exec rm -f {} \;


jira 备份
     
    数据备份目录  /home/bak/jira_192.168.10.11/jira_data/
    附件备份目录  /home/bak/jira_192.168.10.11/jira_attachments_tar_bak/
     
     
    备份脚本 /home/bak/jira_192.168.10.11/zimbra_bak.sh

        #!/bin/bash
        # 备份jira 数据库及附件
        rsync -avzP --port=63873 root@192.168.10.11::jira_data /home/bak/jira_192.168.10.11/jira_data/  >> /home/bak/jira_192.168.10.11/log_bak/jira_data_back_log.`date +%Y%m%d`.log
        sleep 10
        ##清除超过30天jara_data的备份
        find /home/bak/jira_192.168.10.11/jira_data/ -type f -mtime +30 -exec rm -f {} \;
        sleep 2
        rsync -avzP --port=63873 root@192.168.10.11::jira_attachments /home/bak/jira_192.168.10.11/jira_attachments/  >> /home/bak/jira_192.168.10.11/log_bak/jira_attachments_back_log.`date +%Y%m%d`.log
        tar zcf /home/bak/jira_192.168.10.11/jira_attachments_tar_bak/jira_attachments_bak_`date +%Y_%m_%d`.tar.gz /home/bak/jira_192.168.10.11/jira_attachments &>/dev/null
        ##清除超过7天jara_attachments的备份
        find /home/bak/jira_192.168.10.11/jira_attachments_tar_bak/ -type f -mtime +7 -exec rm -f {} \;
        ##清除超过7天的日志
        find /home/bak/jira_192.168.10.11/log_bak/ -type f -mtime +7 -exec rm -f {} \;


confluence 备份
 
    数据备份目录  /home/bak/confluence_192.168.10.11/confluence_data/
    附件备份目录  /home/bak/confluence_192.168.10.11/confluence_attachments_tar_bak/
     
     
    备份脚本 /home/bak/confluence_192.168.10.11/confluence_bak.sh
         
        #!/bin/bash
        # 备份confluence 数据库及附件
        rsync -avzP --port=63873 root@192.168.10.11::confluence_data /home/bak/confluence_192.168.10.11/confluence_data/  >> /home/bak/confluence_192.168.10.11/log_bak/confluence_data_back_log.`date +%Y%m%d`.log
        sleep 10
        ##清除超过30天jara_data的备份
        find /home/bak/confluence_192.168.10.11/confluence_data/ -type f -mtime +30 -exec rm -f {} \;
        sleep 2
        rsync -avzP --port=63873 root@192.168.10.11::confluence_attachments /home/bak/confluence_192.168.10.11/confluence_attachments/  >> /home/bak/confluence_192.168.10.11/log_bak/confluence_attachments_back_log.`date +%Y%m%d`.log
        tar zcf /home/bak/confluence_192.168.10.11/confluence_attachments_tar_bak/confluence_attachments_bak_`date +%Y_%m_%d`.tar.gz /home/bak/confluence_192.168.10.11/confluence_attachments &>/dev/null
        ##清除超过7天jara_attachments的备份
        find /home/bak/confluence_192.168.10.11/confluence_attachments_tar_bak/ -type f -mtime +7 -exec rm -f {} \;
        ##清除超过7天的日志
        find /home/bak/confluence_192.168.10.11/log_bak/ -type f -mtime +7 -exec rm -f {} \;