删除滴滴云服务器自带的探针

我发现我可以做成一个系列了,删除xxx云服务器探针系列。先前的几篇链接在这里:

滴滴云上也有自家的探针,同样首先来看一下服务器有哪些进程,系统为 Ubuntu 16.04.6 LTS:

pstree -a

可以查到与几个不明的进程,

systemd
  |-accounts-daemon
  |   |-{gdbus}
  |   `-{gmain}
  |-acpid
  |-agetty --keep-baud 115200 38400 9600 ttyS0 vt220
  |-agetty --noclear tty1 linux
  |-atd -f
  |-client                     # 流氓探针在此 卸载了
  |   |-client -type=agent
  |   |   |-php_scanner
  |   |   `-18*[{client}]
  |   `-10*[{client}]
  | ...
  | ...
  | ...
  |-irqbalance --pid=/var/run/irqbalance.pid  # 优化中断分配(可以卸载),自动迁移中断保持中断的平衡,同时会考虑到省电因素等等。 但是在实时系统中会导致中断自动漂移,对性能造成不稳定因素。
  |-iscsid
  |-iscsid
  |-lvmetad -f
  |-lxcfs /var/lib/lxcfs/
  |   `-10*[{lxcfs}]
  |-monitor-agent # 不知道是个什么神奇的东西,大概率也是探针。卸载了
  |   `-10*[{monitor-agent}]
  |-polkitd --no-debug  # 系统层级权限控制(可以卸载)
  |   |-{gdbus}
  |   `-{gmain}
  |-rsyslogd -n
  |   |-{in:imklog}
  |   |-{in:imuxsock}
  |   `-{rs:main Q:Reg}
  |-sga        # 不知道是个什么神奇的东西,大概率也是探针。卸载了
  |   `-5*[{sga}]
  |-sgd        # 不知道是个什么神奇的东西,大概率也是探针。卸载了
  |   `-8*[{sgd}]
  |-systemd-udevd
  `-unattended-upgr /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal     # Debian Linux 自动更新,卸载了
      `-{gmain}

整理了需要卸载这个几个组件,以下命令均需要root权限运行:

  • unattended-upgr

    apt-get remove unattended-upgrades apt-listchanges
    
  • Agent

    这个东西是真流氓。。。。官方都不提供卸载命令:https://help.didiyun.com/hc/kb/article/1136020/

    通过ps aux 可以查到它的具体命令:

    image-20200731235828737

    把pid最小的那个kill掉

    kill -9 7302
    

    我发现我自己没法kill掉。如果直接 mv,也不行,系统会不断报错:

    ERROR: ld.so: object '/usr/local/gundam/gundam_client/preload/$LIB/gundam_preload.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
    

    但是,因为我已经remove掉了,找不回来了。。。所以,就是每敲一个命令行,都会给弹出这样的错误。

  • irqbalance

    apt-get purge --auto-remove -y irqbalance
    
  • polkitd

    systemctl disable polkit.service
    systemctl stop polkit.service
    
  • monitor-agent

    继续用mv的方式不允许启动。
    

最后实在没办法了,由于滴滴使用的也是kvm架构,我DD安装了社区的镜像。可以参考我这篇文章:VPS 一键安装纯净 Debian Ubuntu CentOS


linux 路由表 - zqixiao_09

原文:Linux 网络协议栈开发番外篇(五)—— Linux路由表详解 有改动。

目录:

  • 路由表查看
  • 路由类型
  • 静态路由配置
  • 内核设置

查看 Linux 内核路由表

使用下面的 route 命令可以查看 Linux 内核路由表。

# route
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0

route 命令的输出项说明

输出项 说明
Destination 目标网段或者主机
Gateway 网关地址,”*” 表示目标是本主机所属的网络,不需要路由
Genmask 网络掩码
Flags 标记。一些可能的标记如下:
  U — 路由是活动的
  H — 目标是一个主机
  G — 路由指向网关
  R — 恢复动态路由产生的表项
  D — 由路由的后台程序动态地安装
  M — 由路由的后台程序修改
  ! — 拒绝路由
Metric 路由距离,到达指定网络所需的中转数(linux 内核中没有使用)
Ref 路由项引用次数(linux 内核中没有使用)
Use 此路由项被路由软件查找的次数
Iface 该路由表项对应的输出接口

3 种路由类型

主机路由

主机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。例如,在下面的示例中,本地主机通过IP地址192.168.1.1的路由器到达IP地址为10.0.0.10的主机。(单个主机)

Destination    Gateway       Genmask        Flags     Metric    Ref    Use    Iface
-----------    -------     -------            -----     ------    ---    ---    -----
10.0.0.10     192.168.1.1    255.255.255.255   UH       0    0      0    eth0

网络路由

网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。(一个网段

Destination    Gateway       Genmask      Flags    Metric    Ref     Use    Iface
-----------    -------     -------         -----    -----   ---    ---    -----
192.19.12     192.168.1.1    255.255.255.0      UN      0       0     0    eth0

默认路由

当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器。

Destination    Gateway       Genmask    Flags     Metric    Ref    Use    Iface
-----------    -------     ------- -----      ------    ---    ---    -----
default       192.168.1.1     0.0.0.0    UG       0        0     0    eth0

配置静态路由

route 命令

设置和查看路由表都可以用 route 命令,设置内核路由表的命令格式是:

# route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

其中:

  • add : 添加一条路由规则
  • del : 删除一条路由规则
  • -net : 目的地址是一个网络
  • -host : 目的地址是一个主机
  • target : 目的网络或主机
  • netmask : 目的地址的网络掩码
  • gw : 路由数据包通过的网关
  • dev : 为路由指定的网络接口

route 命令使用举例

添加到主机的路由

# route add -host 192.168.1.2 dev eth0:0
# route add -host 10.20.30.148 gw 10.20.30.40

添加到网络的路由

# route add -net 10.20.30.40 netmask 255.255.255.248 eth0
# route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route add -net 192.168.1.0/24 eth1

添加默认路由

# route add default gw 192.168.1.1

删除路由

# route del -host 192.168.1.2 dev eth0:0
# route del -host 10.20.30.148 gw 10.20.30.40
# route del -net 10.20.30.40 netmask 255.255.255.248 eth0
# route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41
# route del -net 192.168.1.0/24 eth1
# route del default gw 192.168.1.1

设置包转发

在 CentOS 中默认的内核配置已经包含了路由功能,但默认并没有在系统启动时启用此功能。开启 Linux的路由功能可以通过调整内核的网络参数来实现。要配置和调整内核参数可以使用 sysctl 命令。例如:要开启 Linux内核的数据包转发功能可以使用如下的命令。

# sysctl -w net.ipv4.ip_forward=1

这样设置之后,当前系统就能实现包转发,但下次启动计算机时将失效。为了使在下次启动计算机时仍然有效,需要将下面的行写入配置文件/etc/sysctl.conf。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1

用户还可以使用如下的命令查看当前系统是否支持包转发。

# sysctl  net.ipv4.ip_forward

新时代运维高考题 - About Computers

挺有趣的题目,原文: https://zhuanlan.zhihu.com/p/163623062

本考试为闭卷考试,总分 120 分,考试时间 120 分钟。答题卡必须使用中性笔或黑色墨水的钢笔填写,答在试卷上的答案视为无效。考试期间允许使用游标卡尺。

选择题(10 分)

  1. 在 CentOS 6 默认安装下,以下哪个配置文件不能实现 iptables 开机自动导入配置? A. /etc/sysconfig/iptables B. /etc/rc.local C. /etc/iptables/rules.v4 D. /etc/network/if-up.d/
  2. 在 YAML 中,哪个国家的 ISO 3166 二字母代码必须加引号? A. 智利 B. 挪威 C. 新西兰 D. 特克斯和凯科斯群岛
  3. 以下哪种是 OpenLDAP 支持的 replication 模式? A. CopyMode B. PushMode C. MirrorMode D. PullMode
  4. 阿里云用于控制子用户权限的功能被称为: A. ROM B. RAM C. SSD D. NVME
  5. 在下列哪种 Docker 网络下,容器不能和主机通信? A. host B. bridge C. macvlan D. overlay

填空题(10 分)

  1. Oracle JRE 下用来设置支持的 TLS 协议版本的参数是:( )
  2. 写出任意三种 StrongSwan 在 IKEv2 模式下支持的 cipher suite:( )
  3. 如果要让 Nginx 的访问日志输出格式和 Apache 的默认日志格式一致,log_format 应当设为:( )
  4. HPE 服务器的 Advanced ECC 模式可以检查出单个 DIMM 上的( )bit 内存问题,修复( )bit 内存问题。这个模式下的实际可用内存大小是 Mirrored Memory with Advanced ECC 模式的( )。
  5. Python 可以使用内置的( )或( )库来调用第三方命令。

编程题(30 分)

  1. 编写 Ansible playbook 实现 Ubuntu 20.04 服务器自动加入 Active Directory 域,允许域管理员以 sudo 身份执行任意命令(无需再次输入登录密码),并且域用户可以使用 kerberos 认证方式从 SSH 登录服务器。(10 分)

  2. 你有公司服务器的 root 权限,并且对公司怀恨在心已久,想要在从公司离职之前破坏 CentOS 8 服务器上的数据。请使用 POSIX 兼容的 Shell 脚本写一个小程序,支持以下功能:

  • 开机启动
  • 以任意远程控制方式接收你离职的消息
  • 删除自身和所有自身产生的日志
  • 删除服务器上所有 Docker 容器和卷
  • 扫描全盘,删除服务器上所有 MySQL 数据库和数据库备份文件

(20 分)

简答题(70 分)

  1. 请写出 QEMU 从一个 raw 格式虚拟磁盘文件启动虚拟机的所有方法。(10 分)

  2. 已知服务器上现有一个病毒程序,你使用 ps 和 top 均无法看到此病毒进程。那么接下来你将如何查找该病毒程序的位置?请简述你的思路。(10 分)

  3. 随着网络技术的发展,网络的瓶颈已经逐渐不再是网卡和网线,而是 CPU、内存和基于中断的内核网络协议栈。为了充分利用 100Gbps 以上的高速网络,人类不断开创新技术以绕过这些瓶颈。请在这类技术中任选一个,说明:

    1)它以什么方式绕过了哪些网络传输过程中的瓶颈 2)它的部署成本和带来的性能提升 3)它对计算机系统和网络分别有哪些前提要求(20 分)

  4. 你是一家大型传统行业公司的运维部门领导,公司的主要业务都基于 Java 和 PHP 编写。开发部门的领导准备在公司推广使用 k8s。 1)使用 k8s 对运维部门会带来哪些好处和哪些坏处?(10 分) 2)公司非技术出身的领导团队对 k8s 仍持怀疑态度,从你和对方的专业角度出发,提出强有力的观点来打消对方的疑虑。(20 分)


删除华为云服务器自带的探针

不喜欢服务器上跑着不明的进程,年初入了几个华为云耀云服务器,这一篇记录如何卸载华为云服务器自带的系统探针,系统为Debian 10。

首先我们来看一下服务器有哪些进程:

pstree -a

可以查到与几个不明的进程,

systemd
  |-ModemManager --filter-policy=strict # 控制移动宽带设备和连接,管理上网卡,跑这个,有病?
  |   `-2*[{ModemManager}]
  |-NetworkManager --no-daemon    # 网络配置
  |   |-dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/dhclient-eth0.pid -lf...
  |   `-2*[{NetworkManager}]
  |-hostguard       # 目标进程,执行检测任务,全量扫描主机;实时监测主机的安全状态,并将收集的主机信息上报给云端防护中心。
  |   `-hostguard
  |       `-15*[{hostguard}]
  |-irqbalance --foreground  # 优化中断分配(可以卸载),自动迁移中断保持中断的平衡,同时会考虑到省电因素等等。 但是在实时系统中会导致中断自动漂移,对性能造成不稳定因素。
  |   `-{irqbalance}
  |-polkitd --no-debug    # 系统层级权限控制(可以卸载)
  |   `-2*[{polkitd}]
  |-rpcbind -f -w
  |-rsyslogd -n -iNONE
  |   `-3*[{rsyslogd}]
  |-systemd --user
  |   `-(sd-pam)
  |-systemd-journal
  |-systemd-logind
  |-systemd-udevd
  |-wpa_supplicant -u -s -O /run/wpa_supplicant  # 无线网络配置,不能卸载= =,卸载之后会因为无法配置网络而无法启动
  `-wrapper /CloudResetPwdUpdateAgent/bin/../conf/wrapper.confwrapper.syslog.ident=cloudResetPwdUpdateA
      |-java -Dorg.tanukisoftware.wrapper.WrapperSimpleApp.maxStartMainWait=40-Djava.libr
      |   `-14*[{java}]
      `-{wrapper}
     # 改密码的代理agent

整理了需要卸载这个几个组件,以下命令均需要root权限运行:

  • ModemManager

    systemctl |grep Modem
    systemctl stop ModemManager.service
    systemctl disable ModemManager.service
      
    apt-get purge --auto-remove -y modemmanager  
    
  • hostguard

    dpkg -P hostguard
    
  • irqbalance

    apt-get purge --auto-remove -y irqbalance
    
  • polkitd

    systemctl disable polkit.service
    systemctl stop polkit.service
    
  • CloudResetPwdUpdateAgent

    bash /CloudrResetPwdAgent/bin/cloudResetPwdAgent.script remove
    bash /CloudResetPwdUpdateAgent/bin/cloudResetPwdUpdateAgent.script remove
    rm -rf /CloudrResetPwdAgent
    rm -rf /CloudResetPwdUpdateAgent
    

shell 获取域名证书的过期时间

SSL 证书是有过期时间的,以前有介绍过 Let’s Encrypt,Let’s Encrypt 证书过期时间是90天,这篇文章记录我的证书过期时间检测脚本。

首先有一个文件记录域名信息 :

# domain_list.md

blog.kelu.org:443
cdn.kelu.org:443

然后同级目录下读取文件进行监控:

#!/bin/bash
script_dir=$( cd "$( dirname "$0"  )" && pwd )

readFile="${script_dir}/domain_list.md"
grep -v '^#' ${readFile} | while read line;do # 读取存储了需要监测的域名的文件
    domain=$(echo "${line}" | awk -F ':' '{print $1}')
    domain_port=$(echo "${line}" | awk -F ':' '{print $2}')

    # 使用openssl获取域名的证书情况,然后获取其中的到期时间
    END_TIME=$(echo | openssl s_client -servername ${domain}  -connect ${domain}:${domain_port} 2>/dev/null | openssl x509 -noout -dates |grep 'After'| awk -F '=' '{print $2}'| awk -F ' +' '{print $1,$2,$4 }' )
    END_TIME1=$(date +%s -d "$END_TIME") # 将日期转化为时间戳
    NOW_TIME=$(date +%s -d "$(date | awk -F ' +'  '{print $2,$3,$6}')") # 将当前的日期也转化为时间戳

    RST=$(($(($END_TIME1-$NOW_TIME))/(60*60*24))) # 到期时间减去目前时间再转化为天数

    echo "${RST}天 : ${domain}"

    if [ $RST -lt 30 ]; then
      # 一些告警的逻辑。。。
      /usr/bin/kelumail "${domain} 证书即将到期" "剩余${RST}天"
    fi
done

参考资料