存档十一月 2019

Linux 常用服务




Linux 常用配置


1. 网卡配置
    # vim /etc/sysconfig/network-scripts/ifcfg-ens33
        TYPE="Ethernet"     \\ 接口类型 常见的有Ethernet以太网 Bridge桥接
        PROXY_METHOD="none"
        BROWSER_ONLY="no"
        BOOTPROTO="static"    \\ 激活此设备时使用的地址配置协议,常用dhcp,static,none,bootp;
        IPADDR=192.168.10.10   \\ ip地址
        NETMASK=255.255.255.0   \\ 子网掩码
        GATEWAY=192.168.10.254   \\ 网关
        DNS1=8.8.8.8              \\ DNS
        DEFROUTE="yes"
        IPV4_FAILURE_FATAL="no"
        IPV6INIT="yes"
        IPV6_AUTOCONF="yes"
        IPV6_DEFROUTE="yes"
        IPV6_FAILURE_FATAL="no"
        IPV6_ADDR_GEN_MODE="stable-privacy"
        NAME="ens33"
        UUID="e9f80c94-a517-42a1-a465-1611e83849ec" \\ 设备的唯一标识
        DEVICE="ens33"                               \\ 此配置文件应用到的设备
        ONBOOT="yes"                                  \\ 在系统引导时是否激活此设备
    # systemctl restart network
    
    网卡配置多个ip地址
        # cp /etc/sysconfig/network-scripts/ifcfg-ens33{,:0}
        # vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
            NAME="ens33:0"          \\ 这些为必改项目
            DEVICE="ens33:0"         \\ 需删除UUID


2. ssh修改端口号
   # vim /etc/ssh/sshd_config
       Port 22
       Port 65522
   # systemctl restart sshd
   # ss -tnl


3. 关闭selinux
   # vim /etc/sysconfig/selinux
       SELINUX=disabled            \\ 永久关闭 需要重启
   # getenforce                     \\ 查询状态
   # setenforce 0                    \\ 临时关闭


4. parted 分区操作
    # parted -l       \\ 查看所有分区
    # parted           \\ 进入
        print devices   \\ 显示所有硬盘设备
        select /dev/sdb  \\ 选择某一硬盘
        p                 \\ 查看分区状态
        mkpart             \\ 创建分区
            start 
            end -1           \\ 到最后
        rm 4                  \\ 删除分区4


5. mkfs 格式化 建立文件系统
    ls -l /sbin/mkfs.*          \\ 可以查看到所有支持的格式 实际就是调用这些文件
    mkfs -V                      \\ 显示版本信息
    mkfs.ext4 /dev/sdb4           \\ 把该设备格式化成ext4文件系统
        .vfat                      \\ vfat就是fat32
        .msdos                      \\ msdos就是fat16


6. 如何使用光盘/U盘当做本地yum仓库
    # mount /dev/cdrom /media/cdrom      \\ 挂载光盘至某目录 如/media/cdrom
    # vim /etc/yum.repos.d/lo.repo        \\ 创建配置文件
        [baselo]
        name=CentOS 7 Release 7.1.1503
        baseurl=file:///cdrom                \\ cdrom 下面有 repodata目录 所以指向
        gpgcheck=0
        enabled=1


7. 修改时间与时区
    # ntpdate 0.asia.pool.ntp.org     \\ 网络同步时间 如不好使 可手动修改
    # date -R                          \\ 查看时间 与时区
    # date -s "2020-1-20 10:01:50"      \\ 修改时间 为
    # hwclock                            \\ 查看硬件时间
    # hwclock -w                          \\ 将软件时间写入到硬件时间 避免重启失效
    # tzselect                             \\ 修改时区 选择对应数字 Asia 亚洲 


8. Linux 硬盘 安装
    ❶. 使用UltraISO制作USB启动盘
        a 文件-->打开-->选择要安装的镜像
        b 启动-->写入硬盘映象
        c 选择U盘-->写入方式一般为USB-HDD+ 点击写入
    ❷. 在 Install CentOS 7 上按e 
        把hd:与quiet之间的字符都删除,变成下面这样,其实就添加了/dev/sdb4,sdb4就是U盘的分区号 之后 按 Ctrl+ x重启
            vmlinuz initrd=ini trd.img inst.stage2=hd:/dev/sdb4 queit
        如果启动不了 可以等到有命令行出现
            # ls
            # cd dev
            # ls             \\ 可以查看到U盘的盘符是哪一个 回去再添加上就可以了


9. Https证书申请流程
    使用 godaddy 申请证书
        # (umask 077; openssl genrsa -out www.ssyy99.com.key 2048)
        # openssl req -new -key www.ssyy99.com.key -out www.ssyy99.com.csr -days 730     \\ 拿到csr复制到godaddy官网
            CN Beijing Beijing ssyy99 OMD www.ssyy99.com ssyy99@google.com

    使用免费证书申请流程
        https://freessl.cn
            证书类型 RSA
            验证类型 文件验证
            CSR生成  浏览器生成

    添加到nginx文件验证                          \\ 对于DNS验证 添加 @ tet 记录即可
            location / {                         \\ 对于强制跳转的加如下代码  在80端口下添加注释掉原来的rewrite
                rewrite ^/(.*) https://$server_name$1 permanent;
            }
            location /.well-known/pki-validation {       \\ 对于不是强制跳转 加以下代码即可
                charset utf-8;
                alias /data/;                              \\ godaddy.html 或要验证的文件 复制到此目录下
                sendfile on;
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
            }
        # /usr/local/sbin/nginx -t
        # /usr/local/sbin/nginx -s reload          \\     证书:*.crt   私钥: *.key

    godaddy 验证步骤 https://sg.godaddy.com/zh/help/html-dns-7452


10. IIS 部署证书流程
      Linux
        # yum install openssl
        # rz cs.tskefu.com.key cs.tskefu.com.crt                      \\ 需生成 .pfx文件 密码123456即可
        # openssl pkcs12 -export -out cs.tskefu.com.pfx -inkey cs.tskefu.com.key -in cs.tskefu.com.crt

      Windows
        ① 把pfx文件复制到证书目录下 D:\zrpfx
        ② 打开IIS应用池 SERVER-02 --> 服务器证书 --> 导入
        ③ 打开www.online.com主页 --> 右键编辑绑定 --> 编辑/添加 --> 选择要使用的证书
        
    注:
        ❶ 此key文件为linux格式 否则会报错 可以使用把key复制到vim编辑另存即可


11. 关于mysql数据库密码
    ❶. 修改数据库root密码
        mysql> use mysql                                                       \\ 选择数据库
        mysql> update user set password=password("123456") where user="root";   \\ 修改root密码
        mysql> flush privileges;                                                 \\ 设置密码后需刷新授权

    ❷. 忘记数据库root密码
        # vim /etc/mysql/my.cnf             \\ 编辑主配置文件 
            skip-grant-tables                \\ 免密码登录 下次登录不需要密码
        # systemctl restart mysqld            \\ 重启数据库 之后可以修改root密码


12. Youtube 视频下载
    # wget https://yt-dl.org/downloads/latest/youtube-dl -O/usr/local/bin/youtube-dl       \\ 下载软件
    # chmod a+rx /usr/local/bin/youtube-dl              \\ 给执行权限
    # youtube-dl -F https://www.youtube.com/             \\ -F 查看视频的清晰度  要下载的Youtube的视频链接 
    # youtube-dl -f 18 https://www.youtube.com/           \\ -f 编号为18清晰度的视频  不加选项为下载源码


13. 使用find命令查找文件的时候报错
    # find / -name aaa                   \\ 报错 find: ‘/run/user/1000/gvfs’: Permission denied   
    # umount /run/user/1000/gvfs          \\ 解决
    # rm -rf /run/user/1000/gvfs


14. 解决VMware Workstation 两台 windowns 之间网络不通的问题
    控制面板 --> 系统与安全 --> windows defender 防火墙 --> 高级设置 --> 公用配置文件 
    --> windows defender 防火墙属性 --> 公用配置文件 --> 入站连接 --> 允许


15. 宝塔

    宝塔安装
        # wget http://download.bt.cn/install/install_6.0.sh
        # chmod +x install_6.0.sh
        # ./install_6.0.sh
        # bt                                \\ 宝塔面板 命令行 文件在 /etc/init.d/bt
        # bt restart
        # bt stop
        # bt reload

    卸载
        # /etc/init.d/bt stop 
        # chkconfig --del bt
        # rm -f /etc/init.d/bt
        # rm -rf /www/server/panel 

    宝塔配置文件
        # vim www/server/panel/data/admin_path.pl     \\ 设置安全 端口
            /4084ae67
        # rm www/server/panel/data/admin_path.pl        \\ 关闭安全入口 删除此文件即可
        # vim /www/server/panel/data/port.pl             \\ 修改宝塔端口
            8888
        # cat /tmp/panelBoot.pl                            \\ 日志
        # vim /www/server/panel/tools.py                    \\ 面板配置文件

        链接后面加上/soft  /files这样即可轻松越过强制绑定

    备份数据
        注意 PHP mysql nginx apache 版本
        sz /www/wwwroot                  \\ 网址目录
        sz /www/server/panel/vhost        \\ 网址配置文件
        sz /www/server/panel/data          \\ 主要备份default.db  宝塔面板数据文件
        # ./mysql_bak.sh                    \\ 备份mysql数据库 注意mysql版本 5.5   5.7不互通   

        推送 到服务器安装rsync
            # vim /etc/rsyncd.conf
                uid  = www
                gid  = www
                port = 63873
                use chroot  = no
                max connections = 10
                hosts allow = 192.168.10.10
                lock file = /var/run/rsync.lock
                log file  = /var/log/rsyncd.log
                ignore errors
                [cp_web]
                path = /data/www
                read only = no

            # groupadd www
            # useradd -g www www
            # chown -R www.www /data/wwwroot
            # rsync --daemon
            # ss -tnl 
            # pkill rsync 
            # iptables -A INPUT 4 -p tcp --dport 63873 -j ACCEPT 

            # rsync -avzP --port=63873 /www/wwwroot/ www@192.168.10.11::cp_web         \\ 推送到目标
        
    还原数据
        rz /www/wwwroot                        \\ 网址目录
        rz /www/server/panel/vhost              \\ 网址配置文件
        rz /www/server/panel/data/default.db     \\ 使用Navicat修改宝塔数据库 此文件存放宝塔面板的信息
        # ./mysql_re.sh                           \\ 还原mysql数据 注意测试

    修改面板数据
        使用navicat 导出sites domain databases表格
        sites  表格k列设置id 
        domain 表格G列设置id I列=VLOOKUP(B2,sites.xlsx!$A$2:$K$153,11,1) 替换id 和pid列 删除G I 列保存
        databases 表格J列设置id L列=VLOOKUP(B2,sites.xlsx!$A$2:$K$153,11,1 ) 替换id和pid列 删除J L列保存
        sites  替换id列 删除k列保存

    宝塔数据面板 sqlite数据库  /www/server/panel/data/default.db
        sites      网站 
            domain    网站-->域名管理的端口  pid要与sites表的 id 对应
        firewall   安全           
        databases  数据库
        users      登陆密码
        crontab    计划任务
     
    宝塔 问题
        1. 一些网站会提示 php短标签(short_open_tag)功能才能运行!
            # vim /www/server/php/56/etc/php.ini
                short_open_tag = Off





shell_常用脚本.sh

#!/bin/bash
# 基础脚本
##### 1. 同时读取两个脚本 ##############
#同时读取两个文件进行循环
exec 3<"1.txt"
exec 4<"2.txt"

while read line1<&3 && read line2<&4
do
        echo $line1 $line2
EOF
done


###### 2. 检测某一端口是否存活 ############
# 每1分钟检测一次800端口是否存活 自动重新启动vpn手机端服务
# 添加开启启动 echo "nohup /data/shell/shadowsocksr_status.sh &" >> /etc/rc.local
# 手动启动 nohup /data/shell/shadowsocksr_status.sh &
# 2020_12_14_T
while :
do
lsof -i:800 &>/dev/null
if [ $? -eq 0 ]; then
	echo -e "\e[1;35mshadowsocksr is open\e[0m"
else
	echo -e "\e[1;31mshadowsocksr is close\e[0m"
	{
	python /usr/local/shadowsocksr-3.2.1/server.py &
	} &
	echo -e "\e[1;33mshadowsocksr is rsetart\e[0m"
	
fi
sleep 60s
done


##### 3. ping01 脚本 ##########################
# 此脚本会 ping /data/shell/a.txt 里面的所有网址 会循环ping 多线程
# nohup /data/shell/ping.sh >/data/shell/nohup.out 2>&1 &    \\ 后台执行 ping.sh的打印信息会输出到指定目录下的nohup.out中
# 添加开机启动 /etc/profile.d/pings.sh  --> #!/bin/bash   nohup /data/shell/ping.sh >/data/shell/nohup.out 2>&1 &
# killall ping.sh 停止脚本 killall 的包是psmisc 可以 yum install psmisc安装
for ((n = 1;n >0;n++))
do
while read IP
do 
    { 
    ping $IP -c2 -s1 2>&1 1>>/dev/null && echo -e $IP is "\033[32;49;1malive\033[39;49;0m" || echo -e $IP is "\033[31;49;1mdown\033[39;49;0m" 
    } & 
done < /data/shell/a.txt
wait 
done


##### 4. ping02 脚本 ##############################
##### 检测局域网内所有的ip是否在线 多线程 ######
for i in $(seq 1 254)
do
    {
    IP="192.168.10.$i"
    ping $IP -c2 -s1 2>&1 1>>/dev/null && echo -e $IP is "\033[32;49;1malive\033[39;49;0m" || echo -e $IP is "\033[31;49;1mdown\033[39;49;0m" 
    } &
done

wait

echo "所有ip检测完毕"


##### 5. 检测nginx是否存活 重启nginx ###########
# 检测nginx 是否存活
# 运行脚本使用此命令后台 nohup /data/shell/nginx_status.sh &
# 添加开机启动 echo "nohup /data/shell/nginx_status.sh &" >> /etc/rc.local
# 2020_11_03_teo
while :
do
ss -tnl | grep ":80" &>/dev/null
if [ $? -eq 0 ]; then
	echo -e "\e[1;35mnginx is open\e[0m"
else
	echo -e "\e[1;31mnginx is close\e[0m"
	systemctl restart nginx
	echo -e "\e[1;33mnginx is rsetart\e[0m"
	
fi
sleep 10s
done


##### 6. 批量添加防火区规则 #######################
# 批量添加删除防火墙规则 端口存放在 同目录下的ipt.txt内 
while read line
do
iptables -D IN_public_allow -p tcp --dport $line -m conntrack --ctstate  NEW,UNTRACKED -j ACCEPT
iptables -D IN_public_allow -p udp --dport $line -m conntrack --ctstate  NEW,UNTRACKED -j ACCEPT
done < ipt.txt


##### 7. 脚本跳板机 ###########################
# 脚本跳机

trap "" HUP INT OUIT TSTP
web1=192.168.10.10
web2=192.168.10.11
clear

while :
do
cat <<-EOF
+-----------------------------------+
|       This is a jumpserver        |
|       1. web1		     |
|       2. web2                     |
|       3. mysql1                   |
|       4. mysql2                   |
+-----------------------------------+
EOF

echo -en "\e[1;32minput number: \e[0m"
read num
case "$num" in
1)
	ssh jump@$web1
	;; 
2)
	ssh jump@$web2
	;;
3)
	ssh alice@$mysql1
	;;
4)
	ssh alice@$mysql2
	;;
"")
	;;
*)
	echo "error"
esac

done


##### 8. 禁止海外ip访问 添加白名单####################
#防火墙 添加ip白名单 可以限制国外的ip访问
#国外ip汇总在 ip段所有国家.zip 地址 https://www.ssyy99.com/download/ip段所有国家.zip
#先合并ip cat *.zone > white_ip.zone
iptables -F
iptables -X
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

while read ip
do
	
	iptables -A INPUT -s $ip -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
	echo $i
	let i++

done < white_ip.zone
wait

#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
echo "iptables 已添加所有要允许的ip"


##### 9. 批量下载脚本 #################################
#!/bin/bash
#批量下载脚本
# url格式为   即可 保存到 a.txt
# https://basicenglishspeaking.com/wp-content/uploads/2016/audio/ce/E-26.mp3
# https://basicenglishspeaking.com/wp-content/uploads/2016/audio/ce/E-27.mp3
mydir=`pwd`
while read line
do
{
    if [ -n "$line" ]
    then
        cd $mydir
        url=$(echo "$line" | tr -d '\r')
        picdir=$(echo $url | sed -r 's/http:\/\///g')
        picname=$(echo ${picdir##*/})
        picpath=$(echo ${picdir%/*})
        mkdir -p $picpath
        cd $picpath
        wget -O $picname `echo $url`
    fi
}
done < a.txt
exit 0


##### 10. 自动检测证书是否到期 ###########################
# 检测https证书有效期
# 使用Telegram通知证书少于10天的网址
# Telegram需要申请机器人 具体请参阅zabbix 文档有关telegram的讲解
# 复制到/data/shell/目录下 mkdir -p /data/shell/https_list 创建域名文件
# a.txt 被检测的网址放到里面即可
# www.baidu.com 
# www.qq.com
# crontab -e 里面添加 0 1 * * * /data/shell/check_https.sh &  \\ 每天1点检测
Token='1354261576:AAHrlPtKslxFNyh-Zgx8me7STc3_rPNqvDI'
ChatID='-325911383'
source /etc/profile

while read line; do
    echo "====================================================================================="

    echo "当前检测的域名:" $line
    end_time=$(echo | timeout 1 openssl s_client -servername $line -connect $line:443 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | awk -F '=' '{print $2}' )
    ([ $? -ne 0 ] || [[ $end_time == '' ]]) # &&  exit 10

    end_times=`date -d "$end_time" +%s `
    current_times=`date -d "$(date -u '+%b %d %T %Y GMT') " +%s `

    let left_time=$end_times-$current_times
    days=`expr $left_time / 86400`
    echo "剩余天数: " $days

    if [ $days -lt 10 ] ; then
        curl -X GET "https://api.telegram.org/bot$Token/sendMessage" -d "chat_id=$ChatID &text=$line的证书还剩 $days 天"
    fi

    [ $days -lt 10 ] && echo "https 证书有效期少于10天,存在风险" 
done < /data/shell/a.txt


##### 11. 备份mysql数据库 ##################################
# 此脚本为数据库自动备份脚本 可以配合# crontab -e定时任务
# Basic configuration: datestamp e.g. YYYYMMDD
# 创建文件的时间
DATE=$(date +"%Y%m%d")
BACKUP_DIR="/data/backup/mysql"
MYSQL_USER="root"
MYSQL_PASSWORD='123456'
MYSQL=/usr/local/mysql/bin/mysql
MYSQLDUMP=/usr/local/mysql/bin/mysqldump
# 除了哪些数据库不备份 剩余都会备份
SKIPDATABASES="Database|information_schema|performance_schema|mysql|test"
# 删除以前数据的天数
RETENTION=60
mkdir -p $BACKUP_DIR/$DATE
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

for db in $databases; do
echo $db
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"
done

find $BACKUP_DIR/* -mtime +$RETENTION -delete


##### 服务器 迁移所有用到的脚本 ################################
##### 服务器 迁移所有用到的脚本 ################################
##### 服务器 迁移所有用到的脚本 ################################
#!/bin/bash

##### 20. 删除目录 ###################
while read line
do
chattr -i ./$line/.user.ini
rm -rf $line
done < a.txt


##### 21. 打压缩包 ##################
while read line
do
  tar zcvf /data/$line.tar.gz $line
done < a.txt


##### 22. 解压缩包 ##################
while read line
do
	tar zxvf $line.tar.gz
done < a.txt


##### 23. 拉取文件 ##################
sshpass -p 123456 rsync -avzP  -e 'ssh -p 65522' root@192.168.10.10:/data/  /data/
sshpass -p 123456 rsync -avzP  -e 'ssh -p 65522' root@192.168.10.10:/data/  /data/
sshpass -p 123456 rsync -avzP  -e 'ssh -p 65522' root@192.168.10.10:/data/  /data/


##### 24. 比较文件 ##################
while read line
do
	sed -i "/$line/d" a.txt
done < c.txt


##### 25. 修改mysql密码 #############
#/bin/bash
#mysql数据库批量修改数据库密码
while read line
do
mysql -uroot -p123456 <<EOF
update mysql.user set authentication_string=password('4N7pHGdwyahEZDYD') where user='$line';

EOF
done < a.txt


##### 26. mysql 备份01 全库备份 #################
# 备份mysql数据库 每一个库单独备份 单是不备份系统数据库 备份目录为 /data/mysql_bak
# 需要加入 mysql 用户名 和 密码
echo "Dump mysql databases..."

DB_USER=root
DB_PASSWORD=123456
DB_PATH=/data/mysql_bak
mkdir -p $DB_PATH

DB_LIST=$(echo "show databases;" | mysql -u$DB_USER -p$DB_PASSWORD)
for db in ${DB_LIST}
do
  if [ $db != "Database" ] && [ $db != "mysql" ] &&
      [ $db != "phpmyadmin" ] && [ $db != "information_schema" ] &&
      [ $db != "performance_schema" ]; then
    echo "  backup "$db
    mysqldump -u$DB_USER -p$DB_PASSWORD --databases $db --lock-all-tables --master-data=2 > $DB_PATH/$db.sql
  fi
done


##### 27. mysql 备份02 指定数据库备份 ################
#!/bin/sh
# 导出mysql数据库
while read line
do
    mysqldump -uroot -p123456 --databases $line --lock-all-tables --master-data=2 > /data/mysql_bak/$line.sql
done < a.txt


##### 28. mysql 还原 指定目录下的sql文件 ##################
# 还原mysql数据库 还原目录为/data/mysql_bak/ 下的所有数据库
# 需要添加 mysql用户名 密码
DB_USER=root
DB_PASSWORD=123456
DB_PATH=/data/mysql_bak
DB_LIST=$(ls $DB_PATH)

for db in ${DB_LIST}

do
    mysql -u$DB_USER -p$DB_PASSWORD < $DB_PATH/$db

done


##### 29. mysql数据库创建用户名及密码并授权################
#!/bin/bash
#同时读取两个文件进行循环
#1.txt存放用户名 2.txt存放密码  这里用户名和数据库名名是同一个
exec 3<"1.txt"
exec 4<"2.txt"
while read line1<&3 && read line2<&4
do
mysql -uroot -p19e9aa229f551984 <<EOF
        grant all privileges on $line1.* to $line1@'localhost' identified by '$line2';
EOF
done


##### 30. mysql 修改字段 ################
#修改mysql 中多个数据库 同名的表格中的字段内容
exec 3<"1.txt"
exec 4<"2.txt"
while read line1<&3 && read line2<&4
do
mysql -S -uroot -p123456 <<EOF
use $line1;
update wp_options set option_value = '$line2' where option_id = 1;
update wp_options set option_value = '$line2' where option_id = 2;

EOF
done


##### 31. 获取wordpress数据库用户名密码 ################
#!/bin/sh
# 获取 wordpress 数据库的名字和用户名及密码
# 一般数据库名和用户名为同一个 如不同 打开注释
while read line
do
#       grep DB_NAME $line/wp-config.php | awk -F "'" '{print $4}'
        grep DB_USER $line/wp-config.php | awk -F "'" '{print $4}'
done < a.txt
echo
while read line
do
        grep DB_PASSWORD $line/wp-config.php | awk -F "'" '{print $4}'
done < a.txt




##### 40. 检测 图片木马 ##################
#!/bin/bash
# 检测图片木马
#需要传递检测文件类型,检测目录,输出目录。
# shell命令通过find 查看图片中是否包含木马
# 木马特征需要根据实际情况进行更新
#支持类型:jpg gif png jpeg
#使用格式说明:./findpic.sh 类型 图片目录 xdd保存目录
#输出的日志文件被保存在 xdd目录下的 findpiclog.log文件中
#使用方法 ./a.sh gif /data0/test ./xdd
#使用方法 ./a.sh jpg /data0/test ./xdd
#使用方法 ./a.sh jpge /data0/test ./xdd
#使用方法 ./a.sh png /data0/test ./xdd
# 会在当前目录生成 xdd 目录 下面有 日志文件 有木马的图片名字及路径
# shel字符串替换
#echo ${test/\//\\}
EXT="*.jpg"
iMulu=./
OMulu=./xdd
if [ -n "$1" ]  #如果$1即参数1不为空,又即存在参数1   
   then
EXT="*.$1" # 使用引号来使#被转义
fi
if [ -n "$2" ]  #如果$2即参数1不为空,又即存在参数1   
then
   iMulu="$2" # 使用引号来使#被转义
fi
if [ -n "$3" ]  #如果$3即参数1不为空,又即存在参数1   
   then
   OMulu="$3" # 使用引号来使#被转义
fi
mkdir -p $iMulu
mkdir -p $OMulu
myfunc()
{
        for x in $(find $iMulu -name "$EXT")
        do
                if test -f $x 
then
#echo "$x" >> mm.log
mkdir -p $(dirname $OMulu/${x})
/usr/bin/xxd $x >$OMulu/${x/\./_}.xdd
fi
                if test -d $x
then
                        cd "$x";
 myfunc;
                        cd ..
                fi
        done
}
myfunc
#查找webshell
Mulu=$OMulu
logFile=$OMulu/findpiclog.log
EXT="*.xdd"
echo -ne '\n\n\n\n\n' >> $logFile
echo "---eval----$Mulu  " >> $logFile
find $Mulu -name "$EXT" |xargs grep "eval" >> $logFile
#增加一句话木马的变形查找
echo "---eval 一句话木马  变形查找----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "$\w*();"  >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---shell_exec----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "shell_exec" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---execute----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "execute" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---request----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "request" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---%----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "%>" >> $logFile
echo -ne '\n\n\n\n\n' >> $logFile
echo "---base64_decode----" >> $logFile
find $Mulu -name "$EXT" |xargs grep "base64_decode" >> $logFile
echo -ne '\n#=end\n\n\n\n' >> $logFile


##### 41. 读取两个文件循环 批量修改文件 ##################
#!/bin/bash
# 读取两个文件循环 批量修改文件
# 可实现读取前5行输出到第一个文件中 再次5行输出到第二个文件中 
# 由于网站不识别utf-8编码 可先使用iconv转码 转成gbk

web_dir=/home/www/wwwroot/
iconv -f utf-8 -t gbk url.txt > url_gbk.txt

while read line1
do
    echo >> $web_dir$line1/data/flink.conf
    y=1

    while read line2
    do
        if [ $y -le 5 ];then
            let y++
        else
            sed -i '1,5d' url_gbk.txt
            break 1
        fi
            echo "$line2" >> $web_dir$line1/data/flink.conf
    done < url_gbk.txt

done < web.txt

echo > url.txt
rm -f url_gbk.txt


##### 42. 检测域名是否可以注册01 ##################
#!/bin/bash
# 检测域名是否可以注册 注释的地方为多线成检测 多线成多了服务器会响应不过来
#fileSrc=$1
file_dir=/data
mkdir -p $file_dir
echo > $file_dir/register.txt
echo -e "\e[1;35m检测开始时间为:\e[0m"
echo -e "\e[1;35m`date`\e[0m"
#
###### 此为多线程控制数量 #############################################################
#thread=10 # 定义多线程的数量
#tmp_fifofile=$tmp_dir/$$.fifo  # $$ 当前pid 命名的一个文件
#mkfifo $tmp_fifofile # mkfifo 创建个命名管道 就是临时存储的地方
#exec 8<> $tmp_fifofile # 打开 此文件 给他描述符8
#rm $tmp_fifofile # 删除此描述符 但不影响8这个描述符的使用
#
#for i in `seq $thread` # 循环 加进去 一堆回车 
#do
#    echo >&8  # &8为文件描述符8  往此文件扔进去 500 个回车符
#done
## read -u8    # -u为读取描述符 8为描述符的编号 read 为读取文件 读到在循环 读不到等着
## echo >&8    # 换回去一个 回车符 给8的描述符 这两条为写在下面的命令
#####################################################################################
#
while read line
do
#  read -u8    # -u为读取描述符 8为描述符的编号 read 为读取文件 读到在循环 读不到等着
sleep 0.01
#  {
  result=$(whois $line | grep "No match"|wc -l)
  if [ $result -eq 1 ];then
     echo -e "\e[1;32m$line 可以注册\e[0m"
     echo $line >> $file_dir/register.txt
  fi

  if [ $result -eq 0 ];then
     echo -e "\e[1;31m$line 已经存在\e[0m"
  fi
#  echo >&8    # 还回去一个 回车符 给8的描述符 这两条为写在下面的命令
#} &

done<$file_dir/find.txt

wait

echo -e "\e[1;35m检测结束时间为:\e[0m"
echo -e "\e[1;35m`date`\e[0m"


##### 43. 检测域名是否可以注册02 不如01好用##################
#!/bin/sh
tmp_dir=/data/aaaaa
file_dir=/data
mkdir -p $tmp_dir

##### 为多线程控制数量 #############################################################
thread=10 # 定义多线程的数量
tmp_fifofile=$tmp_dir/$$.fifo  # $$ 当前pid 命名的一个文件
mkfifo $tmp_fifofile # mkfifo 创建个命名管道 就是临时存储的地方
exec 8<> $tmp_fifofile # 打开 此文件 给他描述符8
rm $tmp_fifofile # 删除此描述符 但不影响8这个描述符的使用

for i in `seq $thread` # 循环 加进去 一堆回车 
do
    echo >&8  # &8为文件描述符8  往此文件扔进去 500 个回车符
done
# read -u8    # -u为读取描述符 8为描述符的编号 read 为读取文件 读到在循环 读不到等着
# echo >&8    # 换回去一个 回车符 给8的描述符 这两条为写在下面的命令
####################################################################################

while read line
do
    read -u 8 #
    {
    y=0

    for i in `seq 10`
    do
        sleep 1
        curl http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=$line &> $tmp_dir/$line.txt
        grep 211 $tmp_dir/$line.txt &> /dev/null
        if [ $? -eq 0 ];then
                y=1
                break;
        fi
    done

    if [ $y -eq 1 ];then
        echo -e "\e[1;31m$line 已经存在\e[0m"
    else
        echo -e "\e[1;32m$line 可以注册\e[0m"
        echo $line >> $file_dir/register.txt
    fi
    rm -rf $tmp_dir/$line.txt
    echo >&8 #
} &
done < $file_dir/test_url.txt
wait
rm -rf $tmp_dir
echo -e "\e[1;35m全部检测完成\e[0m"


##### 44. 检测域名是否备案##################
#!/bin/bash
# 加入md5效验 修改 则 不执行脚本
file_dir=/data
file=adflk
md=f91d5fd007e9375a6b6a287ebbcd1ed3
mkdir -p $file_dir
echo > $file_dir/register.txt
echo -e "\e[1;35m检测开始时间为:\e[0m"
echo -e "\e[1;35m`date`\e[0m"
s() {
. ./.$file.sh
}
cat <<-EOF > .$file.sh
while read line
do
#sleep 0.5
  result=\$(curl -s https://v1.alapi.cn/api/icp?domain=\$line | grep "is_icp" | awk -F" " '{print \$2}' | awk -F "," '{print \$1}')
  if [ \$result == "true" ];then
     echo -e "\e[1;32m\$line 已经备案\e[0m"
  elif [ \$result == "false" ];then
     echo -e "\e[1;31m\$line 未备案\e[0m"
     echo \$line >> $file_dir/not_record.txt
  else
     echo -e "\e[1;33m\$line 检测超时\e[0m"
  fi
done<$file_dir/record.txt
rm -f ./.$file.sh
EOF
m=$(md5sum .adflk.sh | awk -F" " '{print $1}')
if [ $md == $m ];then
s
else
:
fi
echo -e "\e[1;35m检测结束时间为:\e[0m"
echo -e "\e[1;35m`date`\e[0m"


##### 45. apache 批量创建网址01 ##################
#!/bin/bash
# 批量创建网站  apache 没有数据库 已加入md5验证
# mysqldump -uroot -p --databases dedecmsv57utf8sp2 --lock-all-tables --master-data=2 > 1.sql
TEMPLATE=asopreol.com
file_dir=/data
file=adflk
md=b336ce697905c69d26ef6aabcf3ec9c3
mkdir -p $file_dir
s() {
. ./.$file.sh
}
cat <<-EOF > .$file.sh
while read line
do
if [ -d /www/wwwroot/\$line ];then
        echo -e "\e[1;31m\$line 网站已经存在...未创建 \u5973\u795e\u0048\u0061\u007a\u0065\u006c \e[0m"
        continue
fi
if [ -f /www/server/panel/vhost/apache/\$line.conf ];then
        echo -e "\e[1;31m\$line 配置文件已经存在...未创建 \u5973\u795e\u0048\u0061\u007a\u0065\u006c \e[0m"
        continue
fi
cp -a /data/\$TEMPLATE /www/wwwroot/\$line
sed -i "s/\$TEMPLATE/\$line/g" /www/wwwroot/\$line/.user.ini
cp -a /data/$TEMPLATE.conf /www/server/panel/vhost/apache/\$line.conf
touch /www/server/panel/vhost/rewrite/\$line.conf
sed -i "s/\$TEMPLATE/\$line/g" /www/server/panel/vhost/apache/\$line.conf
echo -e "\e[1;32m已经创建 \$line \u5973\u670b\u53cb\u0048\u0061\u007a\u0065\u006c\u771f\u6f02\u4eae \e[0m"
done < /data/url
/www/server/apache/bin/apachectl -t
if [ \$? -eq 0 ];then
        /www/server/apache/bin/apachectl restart
        else '配置文件有错误 请检查apache配置文件'
fi
rm -f ./.\$file.sh
EOF
m=$(md5sum .adflk.sh | awk -F" " '{print $1}')
if [ $md == $m ];then
s
else
:
fi

##### 46. apache 批量删除45创建的网站 ##################
#!/bin/bash
# 删除 create.sh 脚本 自动 创建的 网站
while read line
do
        chattr -i /www/wwwroot/$line/.user.ini
        rm -rvf /www/wwwroot/$line
        rm -rvf /www/server/panel/vhost/apache/$line.conf
        rm -rvf /www/server/panel/vhost/rewrite/$line.conf
        #echo "drop database $line;" | mysql -u$DB_USER -p$DB_PASSWORD
        echo "已经删除 $line 网站"
done < /data/del

##### 47. 自动登录jumpserver可自动登录两步认证 ##################
#!/bin/sh
# a.php 为获取google动态码的脚本 #php a.php
secret=ZUM6YNUG4WWYG66Q
user=teooo
ip=172.21.34.100
passwd=123456
port=2222
i=`php a.php`
echo $i
cat <<-EOF > .asdf.sh
#!/usr/bin/expect -f
set timeout 2
spawn ssh -p $port $user@$ip
expect "password" { send "$passwd\r" }
expect "MFA" { send "$i\\r" }
interact
EOF
chmod +x .asdf.sh
./.asdf.sh && rm -f ./.asdf.sh

##### 48. 域名是否被搜狗收录##################
#!/bin/bash
# 检测域名是否被搜狗收录
# 此脚本做了 毒鸡汤api 使用if 检测是否有参加 有如匹配到参数可以跳过毒鸡汤的输出
# if [ ! $1 ]  对$1 取反判读  如果$1没有数值为假 取反就为真执行里面的代码
file_dir=/data
api=https://api.btstu.cn/sgics/api.php?domain=
dujitang=https://api.btstu.cn/yan/api.php?charset=utf-8
i=$1

mkdir -p $file_dir
echo > $file_dir/register.txt
#echo -e "\e[1;35m检测开始时间为:\e[0m"
#echo -e "\e[1;35m`date`\e[0m"
while read line
do
sleep 0.02
  result=$(curl -s $api$line | grep "num"|wc -l)
  if [ $result -eq 1 ];then
     echo -e "\e[1;32m$line 已被搜狗收录\e[0m"
  fi

  if [ $result -eq 0 ];then
     echo -e "\e[1;31m$line 未被搜狗收录\e[0m"
     echo $line >> $file_dir/register.txt
  fi

  if [ ! $1 ];then
      duji=$(curl -s $dujitang)
      echo -e "\e[1;36m$duji\e[0m"
      continue
  fi

  if [ $1 == 1 ];then
        continue
  fi

  duji=$(curl -s $dujitang)
  echo -e "\e[1;36m$duji\e[0m"

done<$file_dir/sougou.txt

wait

#echo -e "\e[1;35m检测结束时间为:\e[0m"
#echo -e "\e[1;35m`date`\e[0m"