在海内事情交卸犹如家常便饭,有数据显示员工做事于公司的均匀韶光,个中80后均匀是3年韶光,90后均匀为2~2.5,95后约半年~1.5年。如此频繁地改换事情不仅仅是员工自身问题,公司用人单位也存在一定问题,这里就不谈论了。
在早期管理学还未在中国遍及的时候,50/60/70后沿用了自古以来的老旧的管理思想,搞仁制和驭人术那套,如今已经是2022年了,管理学已经非常成熟,大学有专门管理课,社会上有专业的管理培训,但仍有大量公司在采取中式管理,且管理层搞得不亦乐乎,并未有改变的想法。
海内公司存在的问题:

以是在事情中,事情交卸是不可避免的,无论是用人单位找到你,还是你主动应聘岗位,事情交卸都是一项极具寻衅的事情,俗称“擦屁股”,我们若何做好事情交卸呢?
事情交卸过程任何事情交卸都会丢失80%内容,交卸者只能接管20%的事情内容。
丢失的内容有可能是交卸者没有想到,交卸者故意遮盖,交卸者故意挖坑,交卸者说了但是接管者没听懂或忘却了,总之事情不可能达到 100% 的交卸。
尤其是海内企业和雇员紧张的劳动关系,险些大部分的事情交卸都不太顺利。
同时离职员工去下家公司也同样面临严厉寻衅的事情交卸过程,彷佛这是一个无解的去世循环。
纵然是我们口中常说的大厂也存在上述问题。
事情交卸过程中可能碰着的问题:
没有足够的书面资料口头只给你说一次交卸者故意遮盖信息交卸者故意给你挖坑交卸者不主动、敷衍、不合营没有给你足够的韶光学习、理解、接管你不问,对方不会主动给你讲你能做的是只管即便得到更多交卸文档,很多事你要先想到,主动问对方,交卸者没有任务和责任帮你,他想尽快甩锅走人,你只能求菩萨保佑它跟用人带单位没有轇轕。
这导致很多时候事情交卸要靠我们自己,同时我们离职的时候也会用这些办法对付吸收我们事情的人,呵呵!
!
!
以技能事情交卸为例,如何快速摸清系统,节制各系统模块之间的关系呢?
互联网入口都有哪些:
网站入口手机App入口小程序/"大众号/第三方入口TCP/UDP Socket 入口域名检讨利用 nslookup/dig 等工具检讨域名
A 记录,主机解析MX 记录,邮件交流记录TXT 记录,一些特定做事AAAA 记录,IPv6 主机解析NS 记录然后在上岸的DNS管理界面查漏补缺,这里重点是 MX 记录,很多时候会忽略,导致邮件做事不能用。
IP地址检讨网站入口常日是域名或IP地址,例如我的域名是 www.netkiller.cn,利用 ping 工具查看其IP地址
[root@netkiller ~]# ping www.netkiller.cn
手机App链接的API地址须要抓包工具
网络设备备份配置文件上岸网络设备,备份配置文件,然后剖析网络拓扑,如果有交卸文档,就按照文档核对 vlan和每个路由器和交流机端口功能。
Cisco 网络设备利用 show running-config 查看配置文件
Router#show running-configRouter#show startup-config
H3C 网络设备利用 display current-configuration 查看配置文件
[WA2220E-AG]display current-configuration# version 5.20, Release 1110P01# sysname WA2220E-AG# domain default enable system# telnet server enable# port-security enable#vlan 1#radius scheme system#domain system access-limit disable state active idle-cut disable self-service-url disable
Juniper 网络设备,利用 get config 查看配置文件
[root@netkiller ~]# ssh neo@192.168.1.1neo@192.168.3.1's password:Remote Management Consolefirewall-> get configTotal Config size 17376:set clock ntpset clock timezone 7set vrouter trust-vr sharableset vrouter "untrust-vr"exitset vrouter "trust-vr"unset auto-route-exportexit.........exitset vrouter "untrust-vr"exitset vrouter "trust-vr"exitfirewall->
这些网络设备如何利用,请参考《Netkiller Network 书信》
绘制网络拓扑图险些90%(可以我说少了)公司,在IT这块的管理十分混乱,走进机房,网线乱如麻,你根本不知道那根网线链接了什么设备,我们须要先理清重点设备的链接拓扑图。
这里以 H3C 为例,其他设备操作办法大同小异,下面是找到接口对等设备的IP地址
<H3C>display arp interface GE1/0/32 Type: S-Static D-Dynamic O-Openflow R-Rule M-Multiport I-InvalidIP address MAC address VLAN/VSI name Interface Aging Type172.16.200.75 b07b-2523-5326 200 GE1/0/32 501 D
通过 mac 地址找接口
<H3C>display arp all | include 6227-d242-269e172.16.0.68 6227-d242-269e 10 GE1/0/3 1085 D
通过 ip 地址找接口
<H3C>display arp all | include 172.16.200.102172.16.200.102 001e-67fa-df92 200 GE1/0/36 282 D
做事器系统检讨
当我们知道做事器IP地址之后就可以登录做事器了
[root@netkiller ~]# ssh root@www.netkiller.cn
上岸做事器之后首先快速检讨是否有安全问题
检讨用户权限[root@netkiller ~]# cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinsystemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologinsystemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologintss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologinpolkitd:x:998:996:User for polkitd:/:/sbin/nologinunbound:x:997:993:Unbound DNS resolver:/etc/unbound:/sbin/nologinlibstoragemgmt:x:996:992:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologinsetroubleshoot:x:995:991::/var/lib/setroubleshoot:/sbin/nologincockpit-ws:x:994:990:User for cockpit web service:/nonexisting:/sbin/nologincockpit-wsinstance:x:993:989:User for cockpit-ws instances:/nonexisting:/sbin/nologinsssd:x:992:988:User for sssd:/:/sbin/nologinchrony:x:991:987::/var/lib/chrony:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologintcpdump:x:72:72::/:/sbin/nologinnscd:x:28:28:NSCD Daemon:/:/sbin/nologinpostfix:x:89:89::/var/spool/postfix:/sbin/nologindocker:x:986:986:Container Administrator:/home/docker:/bin/bashgit:x:1000:1000::/home/git:/bin/bashcaddy:x:985:984:Caddy web server:/var/lib/caddy:/sbin/nologinnginx:x:984:983:Nginx web server:/var/lib/nginx:/sbin/nologin
常日除了 root 用户,小于1000的UID的用户 SHELL 该当是 /sbin/nologin
重点检讨拥有 shell 权限的用户,非必要全部改为 /sbin/nologin
[root@netkiller ~]# cat /etc/passwd | grep bashroot:x:0:0:root:/root:/bin/bashdocker:x:986:986:Container Administrator:/home/docker:/bin/bashgit:x:1000:1000::/home/git:/bin/bash
检讨用户是否激活,并设置密码
[root@netkiller ~]# cat /etc/shadowroot:$6$XyW4o/lZWdu$VsjNYW8nVcE63cWwAxLxBe5s22vt4hQCOivzxo5RQ3rGbcBkfWnc/ATiy073D7/aIHQaDZplIJWz51s4Pzkn0.:19173:0:99999:7:::bin::18505:0:99999:7:::daemon::18505:0:99999:7:::adm::18505:0:99999:7:::lp::18505:0:99999:7:::sync::18505:0:99999:7:::shutdown::18505:0:99999:7:::halt::18505:0:99999:7:::mail::18505:0:99999:7:::operator::18505:0:99999:7:::games::18505:0:99999:7:::ftp::18505:0:99999:7:::nobody::18505:0:99999:7:::dbus:!!:19136::::::systemd-coredump:!!:19136::::::systemd-resolve:!!:19136::::::tss:!!:19136::::::polkitd:!!:19136::::::unbound:!!:19136::::::libstoragemgmt:!!:19136::::::setroubleshoot:!!:19136::::::cockpit-ws:!!:19136::::::cockpit-wsinstance:!!:19136::::::sssd:!!:19136::::::chrony:!!:19136::::::sshd:!!:19136::::::tcpdump:!!:19136::::::nscd:!!:19136::::::postfix:!!:19136::::::docker:$6$6.KJvlfezlr7q09N$Xo83rIqChY0sLrvyCGnNYqPpCsREk1h1En7eNwZBV9sjN6XVOO9xgjuKGn..tAhElYK1SLI6mvZa6pxsCcuqb/:19177:0:99999:7:::git:$6$EcduJ7Z1HAZWhRPN$wyG7OOpQaw84FgvAsXBPUKr.dZWEDIaWhMKeoEuNRvpfzvoeKo4gei028lSCm./nAvFqRpos/2Ng4ARHR5FRj.:19173:0:99999:7:::caddy:!!:19177::::::nginx:!!:19192::::::
!! 和 是未设置密码,该用户无法上岸系统,$6$ 表示该用户有密码
这三个用户是有密码的
[root@netkiller ~]# cat /etc/shadow | grep '\$6\$'root:$6$XyW4o/lZWdu$VsjNYW8nVcE63cWwAxLxBe5s22vt4hQCOivzxo5RQ3rGbcBkfWnc/ATiy073D7/aIHQaDZplIJWz51s4Pzkn0.:19173:0:99999:7:::docker:$6$6.KJvlfezlr7q09N$Xo83rIqChY0sLrvyCGnNYqPpCsREk1h1En7eNwZBV9sjN6XVOO9xgjuKGn..tAhElYK1SLI6mvZa6pxsCcuqb/:19177:0:99999:7:::git:$6$EcduJ7Z1HAZWhRPN$wyG7OOpQaw84FgvAsXBPUKr.dZWEDIaWhMKeoEuNRvpfzvoeKo4gei028lSCm./nAvFqRpos/2Ng4ARHR5FRj.:19173:0:99999:7:::
锁定/解锁用户
创造可疑用户,我们可以先把它锁掉,让他上岸不了。利用 passwd -l 给用户加锁,-u 解锁。
[root@netkiller ~]# passwd --helpUsage: passwd [OPTION...] <accountName> -k, --keep-tokens keep non-expired authentication tokens -d, --delete delete the password for the named account (root only); also removes password lock if any -l, --lock lock the password for the named account (root only) -u, --unlock unlock the password for the named account (root only) -e, --expire expire the password for the named account (root only) -f, --force force operation -x, --maximum=DAYS maximum password lifetime (root only) -n, --minimum=DAYS minimum password lifetime (root only) -w, --warning=DAYS number of days warning users receives before password expiration (root only) -i, --inactive=DAYS number of days after password expiration when an account becomes disabled (root only) -S, --status report password status on the named account (root only) --stdin read new tokens from stdin (root only)Help options: -?, --help Show this help message --usage Display brief usage message
例如我们要禁止 git 用户上岸系统
[root@netkiller ~]# passwd -l gitLocking password for user git.passwd: Success
规复 git 用户上岸权限
[root@netkiller ~]# passwd -u gitUnlocking password for user git.passwd: Success
实际的加锁与解锁的过程便是在 shadow 文件中,密码前面增加 !! 符号。
[root@netkiller ~]# passwd -l gitLocking password for user git.passwd: Success[root@netkiller ~]# cat /etc/shadow | grep 'git'git:!!$6$EcduJ7Z1HAZWhRPN$wyG7OOpQaw84FgvAsXBPUKr.dZWEDIaWhMKeoEuNRvpfzvoeKo4gei028lSCm./nAvFqRpos/2Ng4ARHR5FRj.:19173:0:99999:7:::[root@netkiller ~]# passwd -u gitUnlocking password for user git.passwd: Success[root@netkiller ~]# cat /etc/shadow | grep 'git'git:$6$EcduJ7Z1HAZWhRPN$wyG7OOpQaw84FgvAsXBPUKr.dZWEDIaWhMKeoEuNRvpfzvoeKo4gei028lSCm./nAvFqRpos/2Ng4ARHR5FRj.:19173:0:99999:7:::
检讨端口
造孽进入做事器必须某种做事端口,我们确认用户安全后,接下来要做的便是扫描端口,看看做事器上开了哪些端口。
[root@netkiller ~]# dnf install -y nmap
nmap 利用方法请看我的《Netkiller Linux 书信》本文只教方法论。
[root@netkiller ~]# nmap www.netkiller.cnStarting Nmap 7.70 ( https://nmap.org ) at 2022-07-23 16:23 CSTNmap scan report for chat.netkiller.cn (8.219.73.35)Host is up (0.00041s latency).Not shown: 993 filtered portsPORT STATE SERVICE22/tcp open ssh80/tcp open http443/tcp open https3389/tcp closed ms-wbt-server8000/tcp closed http-alt8080/tcp closed http-proxy9000/tcp closed cslistenerNmap done: 1 IP address (1 host up) scanned in 25.40 seconds
通过端口找进程,可以利用 ss 和 netstat 两个工具完成
[root@netkiller ~]# netstat -antup|grep 80tcp 0 0 172.22.119.108:20507 100.103.15.60:80 ESTABLISHED 1490/AliYunDun tcp6 0 0 :::80 ::: LISTEN 1629762/caddy [root@netkiller ~]# ss -lntpState Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0: users:(("sshd",pid=1189,fd=5)) LISTEN 0 1024 127.0.0.1:2019 0.0.0.0: users:(("caddy",pid=1629762,fd=3)) LISTEN 0 1024 :80 : users:(("caddy",pid=1629762,fd=8)) LISTEN 0 1024 :443 : users:(("caddy",pid=1629762,fd=7))
这里可以看到 80 端口是 1629762 进程监听的,该进程是 caddy 它是一个 web 做事器
通过进程找进程ID
[root@netkiller ~]# pgrep caddy1629762
检讨进程
Linux 系统进程带有中括号的是内核进程,除此之外都须要逐一排查
[root@netkiller ~]# ps ax | grep '\[' 2 ? S 0:01 [kthreadd] 3 ? I< 0:00 [rcu_gp] 4 ? I< 0:00 [rcu_par_gp] 6 ? I< 0:00 [kworker/0:0H-events_highpri] 9 ? I< 0:00 [mm_percpu_wq] 10 ? S 0:00 [rcu_tasks_rude_] 11 ? S 0:00 [rcu_tasks_trace] 12 ? S 0:01 [ksoftirqd/0] 13 ? I 9:14 [rcu_sched] 14 ? S 0:00 [migration/0] 15 ? S 0:00 [watchdog/0] 16 ? S 0:00 [cpuhp/0] 17 ? S 0:00 [cpuhp/1] 18 ? S 0:00 [watchdog/1] 19 ? S 0:00 [migration/1] 20 ? S 0:00 [ksoftirqd/1] 22 ? I< 0:00 [kworker/1:0H-events_highpri] 23 ? S 0:00 [cpuhp/2] 24 ? S 0:01 [watchdog/2] 25 ? S 0:00 [migration/2] 26 ? S 0:00 [ksoftirqd/2] 28 ? I< 0:00 [kworker/2:0H-events_highpri] 29 ? S 0:00 [cpuhp/3] 30 ? S 0:01 [watchdog/3] 31 ? S 0:00 [migration/3] 32 ? S 0:00 [ksoftirqd/3] 34 ? I< 0:00 [kworker/3:0H-events_highpri] 35 ? S 0:00 [cpuhp/4] 36 ? S 0:01 [watchdog/4] 37 ? S 0:00 [migration/4] 38 ? S 0:00 [ksoftirqd/4] 40 ? I< 0:00 [kworker/4:0H-events_highpri] 41 ? S 0:00 [cpuhp/5] 42 ? S 0:01 [watchdog/5] 43 ? S 0:00 [migration/5] 44 ? S 0:00 [ksoftirqd/5] 46 ? I< 0:00 [kworker/5:0H-events_highpri] 47 ? S 0:00 [cpuhp/6] 48 ? S 0:01 [watchdog/6] 49 ? S 0:00 [migration/6] 50 ? S 0:00 [ksoftirqd/6] 52 ? I< 0:00 [kworker/6:0H-events_highpri] 53 ? S 0:00 [cpuhp/7] 54 ? S 0:02 [watchdog/7] 55 ? S 0:00 [migration/7] 56 ? S 0:00 [ksoftirqd/7] 58 ? I< 0:00 [kworker/7:0H-events_highpri] 67 ? S 0:00 [kdevtmpfs] 68 ? I< 0:00 [netns] 69 ? S 0:00 [kauditd] 70 ? S 0:01 [khungtaskd] 71 ? S 0:00 [oom_reaper] 72 ? I< 0:00 [writeback] 73 ? S 0:00 [kcompactd0] 74 ? SN 0:00 [ksmd] 75 ? SN 0:18 [khugepaged] 76 ? I< 0:00 [crypto] 77 ? I< 0:00 [kintegrityd] 78 ? I< 0:00 [kblockd] 79 ? I< 0:00 [blkcg_punt_bio] 80 ? I< 0:00 [tpm_dev_wq] 81 ? I< 0:00 [md] 82 ? I< 0:00 [edac-poller] 83 ? S 0:00 [watchdogd] 84 ? I< 0:01 [kworker/0:1H-kblockd] 118 ? S 0:00 [kswapd0] 224 ? I< 0:00 [kthrotld] 225 ? I< 0:00 [acpi_thermal_pm] 226 ? I< 0:00 [kmpath_rdacd] 227 ? I< 0:00 [kaluad] 229 ? I< 0:02 [kworker/4:1H-kblockd] 230 ? I< 0:00 [ipv6_addrconf] 232 ? I< 0:00 [kstrp] 313 ? I< 0:01 [kworker/5:1H-kblockd] 319 ? I< 0:01 [kworker/2:1H-kblockd] 347 ? I< 0:14 [kworker/7:1H-xfs-log/vda1] 350 ? I< 0:01 [kworker/3:1H-kblockd] 355 ? I< 0:01 [kworker/1:1H-kblockd] 361 ? I< 0:01 [kworker/6:1H-kblockd] 501 ? I< 0:00 [ata_sff] 502 ? S 0:00 [scsi_eh_0] 503 ? I< 0:00 [scsi_tmf_0] 504 ? S 0:00 [scsi_eh_1] 505 ? I< 0:00 [scsi_tmf_1] 533 ? I< 0:00 [xfsalloc] 535 ? I< 0:00 [xfs_mru_cache] 536 ? I< 0:00 [xfs-buf/vda1] 537 ? I< 0:00 [xfs-conv/vda1] 538 ? I< 0:00 [xfs-cil/vda1] 539 ? I< 0:00 [xfs-reclaim/vda] 540 ? I< 0:00 [xfs-blockgc/vda] 542 ? I< 0:00 [xfs-log/vda1] 543 ? S 2:57 [xfsaild/vda1] 880 ? I< 0:00 [nfit]1636473 ? I 0:01 [kworker/5:2-events_power_efficient]1636635 ? I 0:07 [kworker/7:0-events]1636884 ? I 0:00 [kworker/6:0-events]1636886 ? I 0:00 [kworker/2:3-events]1637134 ? I 0:00 [kworker/1:0-events]1637224 ? I 0:00 [kworker/2:0]1637273 ? I 0:00 [kworker/0:3-mm_percpu_wq]1637275 ? I 0:00 [kworker/u16:0-events_unbound]1637290 ? I 0:00 [kworker/6:2-mm_percpu_wq]1637344 ? I 0:00 [kworker/1:1]1637352 ? Ss 0:00 sshd: root [priv]1637362 ? I 0:00 [kworker/0:2-events]1637501 ? I 0:00 [kworker/4:1-events]1637953 ? I 0:00 [kworker/3:0-cgroup_pidlist_destroy]1637956 ? I< 0:00 [ib-comp-wq]1637957 ? I< 0:00 [kworker/u17:0]1637958 ? I< 0:00 [ib-comp-unb-wq]1637960 ? I< 0:00 [ib_mcast]1637961 ? I< 0:00 [ib_nl_sa_wq]1637965 ? I 0:00 [kworker/5:0]1637976 ? I 0:00 [kworker/4:0-xfs-sync/vda1]1637979 ? I 0:00 [kworker/7:2]1637981 ? I 0:00 [kworker/3:3-cgroup_destroy]1637986 ? I 0:00 [kworker/u16:1-events_unbound]1638007 pts/0 S+ 0:00 grep --color=auto \[
利用 grep -v 打消所有内核进程,这样看着舒畅一些。
[root@netkiller ~]# ps ax | grep -v '\[' PID TTY STAT TIME COMMAND 1 ? Ss 3:08 /usr/lib/systemd/systemd --switched-root --system --deserialize 17 649 ? Ss 0:21 /usr/lib/systemd/systemd-journald 681 ? Ss 0:02 /usr/lib/systemd/systemd-udevd 711 ? S<sl 0:04 /sbin/auditd 716 ? S< 0:01 /usr/sbin/sedispatch 759 ? Ss 0:03 /usr/bin/lsmd -d 769 ? Ss 0:00 /usr/sbin/smartd -n -q never 770 ? Ssl 0:01 /usr/lib/polkit-1/polkitd --no-debug 779 ? Ss 0:14 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 788 ? Ss 0:00 /usr/sbin/mcelog --ignorenodev --daemon --foreground 794 ? S 0:08 /usr/sbin/chronyd 974 ? Ss 0:08 /usr/lib/systemd/systemd-logind 1023 ? Ssl 1:03 /usr/sbin/NetworkManager --no-daemon 1027 ? Ssl 76:19 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P 1189 ? Ss 0:01 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@openssh.com,aes128-ctr,aes128-cbc -oMACs=hmac-sha2-256-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha1,umac-128@openssh.com,hmac-sha2-512 -oGSSAPIKexAlgorithms=gss-curve25519-sha256-,gss-nistp256-sha256-,gss-group14-sha256-,gss-group16-sha512-,gss-gex-sha1-,gss-group14-sha1- -oKexAlgorithms=curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1 -oHostKeyAlgorithms=ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com -oPubkeyAcceptedKeyTypes=ecdsa-sha2-nistp256,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-256-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-512-cert-v01@openssh.com,ssh-rsa,ssh-rsa-cert-v01@openssh.com -oCASignatureAlgorithms=ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519,rsa-sha2-256,rsa-sha2-512,ssh-rsa 1201 ? Ss 0:00 /usr/sbin/atd -f 1233 tty1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux 1234 ttyS0 Ss+ 0:00 /sbin/agetty -o -p -- \u --keep-baud 115200,38400,9600 ttyS0 vt220 1461 ? S<sl 22:04 /usr/local/aegis/aegis_update/AliYunDunUpdate 1490 ? S<sl 412:12 /usr/local/aegis/aegis_client/aegis_11_25/AliYunDun 1652 ? Ss 0:02 /usr/sbin/crond -n 1702 ? Ssl 1:25 /usr/sbin/rsyslogd -n 4186 ? Ssl 35:58 /usr/bin/containerd 4200 ? Ssl 26:56 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 221773 ? Ss 0:01 /usr/sbin/sssd -i --logger=files 221775 ? S 0:09 /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files 221776 ? S 3:32 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files 298641 ? Ssl 31:55 /usr/local/share/aliyun-assist/2.2.3.309/aliyun-service 298799 ? Ssl 5:34 /usr/local/share/assist-daemon/assist_daemon1629762 ? Ssl 0:23 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile1637356 ? Ss 0:00 /usr/lib/systemd/systemd --user1637358 ? S 0:00 (sd-pam)1637366 ? S 0:00 sshd: root@pts/01637367 pts/0 Ss 0:00 -bash1638004 pts/0 R+ 0:00 ps ax
对付可疑进程一律找到它所在位置,先kill掉,然后去掉可实行权限,归档备份。
例如我们对 caddy 下手,首先查看进程位置 /usr/bin/caddy
[root@netkiller ~]# ps ax |grep caddy1629762 ? Ssl 0:23 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile1637983 pts/0 S+ 0:00 grep --color=auto caddy
看看是否有系统启动做事
systemctl stop caddysystemctl disable caddy
现在就禁用了,如果这个程序是手工安装没有systemd,我们就须要 chmod -x /usr/bin/caddy
以上是 caddy 为例,其他做事也都如此。
检讨配置文件确认做事器利用的是什么操作系统,然后用这个版本安装一个干净的环境,在新做事器和当前要检讨的做事器上分别实行下面命令
[root@netkiller ~]# find /etc/ > etc.lst[root@netkiller ~]# find /usr/etc/ > usr.etc.lst[root@netkiller ~]# find /usr/local/etc/ > usr.etc.lst
然后利用文件比较工具比较文件列表,差异的部分,便是新增的文件。你也可以讲两个做事器的 etc 目录复制出来,利用工具比较他们的差异。
容器的检讨目前许多公司都在利用 Docker / Kubernetes 支配系统,实在容器并非安全,在容器镜像中藏点私货是非常随意马虎的,Docker 官方供应了安全扫描工具
[root@netkiller ~]# docker scanDocker Scan relies upon access to Snyk, a third party provider, do you consent to proceed using Snyk? (y/N)
我们安装物理机所用的系统常日是辞官网下载,很多容器的制作并为利用官方镜像,同时会做 md5sum 校验,所以是安全的。容器镜像安全更多是来自无序的继续,经由多次继续我们不知道里面做了那些变革,以是选择根本镜像非常主要。
[root@netkiller ~]# cat Dockerfile | grep FROMFROM nginx:latest
如果不是官方镜像,须要格外把稳
云安全检讨云平台常日网络分成WLAN和LAN两个部分,有些平台WLAN 是挂载到 eth0 上,有些平台云主机只有内网IP,WLAN是映射到内网IP上。
采取的手段跟上面一样,扫描端口,检讨安全组规则,弹性IP和SLB策略。
原则是,WLAN外网只许可通过特定端口例如80/443,剩下所有做事在LAN上通信。
事情交卸期间,只开放80/443端口,完成交卸后,并做了安全排查之后,逐渐开放须要的端口,建议限定来源IP地址,例如只许可从办公室访问。
系统备份以上检讨的所有项的配置文件都须要备份一份,以防万一,这个万一存在很多不愿定性成分,你懂的
绘制网络和做事器/容器拓扑图利用visio等软件绘制网络和做事器/容器拓扑图
支配运作机制这个步骤是搞清楚代码从开拓莅临盆环境是怎么支配的,如果利用了CI/CD技能,就从持续集成和支配动手看,可以一览无余。如果是手工支配,要亲力亲为自己做一遍,同时将CI/CD就此机会做起来。
举一个例子,比如有一个项目教 api.netkiller.cn
代码库中找到这个项目
编译和打包目前海内最主流搭配是前端 node 后端 java,当然也有少量项目利用 PHP、Python和Go,总体大同小异。
如果是 node.js 项目常日是 webpack 无非便是下面两步
npm install --registry=https://registry.npm.taobao.orgnpm run build:prod
Java 项目
mvn clean package
搞清楚配置文件
前端 NodeJS 项目配置常日只链接后端,配置涉及较少,相对随意马虎节制。
Java 项目配置文件放在 src/main/resources/ 中 Springboot 项目配置文件是 src/main/resources/application.yml,Springcloud 的配置文件是 src/main/resources/bootstrap.yml
也有利用 application.properties 和 bootstrap.properties
我们既要检讨配置文件中都链接了那些做事,还要检讨配置是否合理,例如链接池的最大链接数量,链接超时时间等等。
如果利用配置中央,须要进入配置中央查看配置文件
绘制业务关系拓扑图走一遍业务逻辑,从域名进入网站到数据保存到数据,这中间经由了那些做事,他们的调用关系是什么,画一张图,让你一目了然。
如果有链路追踪能让你更快完成这步事情,如果没有,这也是未来要做的事情,这时就须要结合各种配置文件,或者讯问各种干系部门和职员来完成这个拓扑图。
备份备份代码备份配置文件将备份过程放在CI/CD过程中,让备份自动化
接手代码程序猿常常自嘲是粪海狂蛆!
陈年的粪缸,经由发酵、沉淀、分解已经没有屎尿的味道,你千万别去动它。
海内大部分项目都是均匀三年履历的开拓人写的,同时90后均匀不到两年就会换事情,你别期望代码质量有多高,你别更别期望问同事能得到答案。
常态是,大部分情形下,只要修正代码就产生新bug!
延伸阅读《程序猿说的「优化」是什么意思?》
代码审查只是一句口号历来如此,很多团队都说在做,实际情形你懂的。但是此时一些对外的做事真的有必要做一次 code review,我的职业生涯中,曾经碰着曩昔职职员埋后门的情形。
经由前面的做事器排查,通过SSH上岸做事器搞毁坏的可能性是极小的,更多的漏洞是代码漏洞和业务漏洞。
代码扫描利用代码扫描工具,例如 SonarQube 扫描lib和引用第三方包的安全漏洞,及时升级第三方包,修复存在安全的代码。
如果你期待代码扫描能帮你找出业务漏洞,纯属扯淡,我们利用代码扫描更多是创造 pom.xml 中引用第三方库已知的 CVE 漏洞。
紧缩技能栈接手代码之后,紧张办理的是能让它事情起来,然后动手优化代码,绝大多数人的思维是加法思维,他们会利用许多技能来完成一件事,这是缺点的。
精确的做法是利用一种技能完成所有事情。