“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 11 天,点击查看活动详情”
1.过程
最近大火的ChatGPT号称可以干掉程序员,今天测试就用ChatGPT开发一个Liunx基线检查脚本。
使用vi在liunx中复制这段脚本创建一个脚本文件,看一下效果。(脚本记得chmod添加执行权限)
执行看下效果
可以看到检查项主要有:
这显然不能满足我们的要求,连端口开放信息都没有
他居然让我自己合并,不智能,让他合并一下
再去系统上粘贴运行一下,已经可以检查敏感端口了
再添加一个异常用户登录的检查,这次果然成长了,chatGPT先把当前的要检查的脚本列出来,然后自己合并脚本了,点赞!
再运行一下,已经可以检查登录用户了
接下来再添加一些其他的检查项:
检查长期不登录用户
检查密码有效期
系统关键目录权限
生成的脚本较长的话中间会有终端的可能会中断,需要重新生成
最后让脚本把注释改完中文,添加分割线。
最后看一下这个脚本吧。
#!/bin/bash
echo "开始 Linux 系统基线,弱口令,以及未激活用户帐户检查"
# 检查系统正常运行时间
echo -n "系统正常运行时间: "
uptime
echo "-------------------------------"
# 检查已登录用户数
echo -n "已登录用户数: "
who | wc -l
echo "-------------------------------"
# 检查可用磁盘空间
echo -n "磁盘空间: "
df -h
echo "-------------------------------"
# 检查内存使用情况
echo -n "内存使用情况: "
free -h
echo "-------------------------------"
# 检查内存使用最多的前 5 个进程
echo -n "内存使用最多的前 5 个进程: "
ps -eo pmem,pid,user,args | sort -k 1 -r | head -6
echo "-------------------------------"
# 检查高风险开放端口
echo "正在检查高风险开放端口..."
high_risk_ports=(21 22 23 25 53 80 110 443 1433)
for port in "${high_risk_ports[@]}"; do
if lsof -i :$port; then
echo "高风险端口 $port 已开放!"
fi
done
echo "-------------------------------"
# 检查意外的用户登录
echo "正在检查意外的用户登录..."
expected_users=(root admin user1)
logged_in_users=($(who | awk '{print $1}'))
for user in "${logged_in_users[@]}"; do
if [[ ! " ${expected_users[@]} " =~ " ${user} " ]]; then
echo "意外的用户登录: $user"
fi
done
echo "-------------------------------"
# 检查不活动的用户帐户
echo "检查不活动的用户帐户..."
inactive_period=90
today=$(date +%s)
for user in $(cut -d: -f1 /etc/shadow); do
last_login=$(lastlog -u $user | tail -1 | awk '{print $NF}')
if [[ $last_login == "Never" ]]; then
echo "用户 $user 从未登录过!"
else
last_login_seconds=$(date -d "$last_login" +%s)
if [ -n "$last_login_seconds" ]; then
if (( $today - $last_login_seconds >= $inactive_period*24*60*60 )); then
echo "用户 $user 已经不活动超过 $inactive_period 天!"
fi
else
echo "计算用户 $user 的最后一次登录时间失败"
fi
fi
done
echo "-------------------------------"
# 定义关键系统目录列表
critical_dirs=(/bin /sbin /usr/bin /usr/sbin /etc /boot /lib /lib64 /root)
# 遍历每个关键目录
for dir in "${critical_dirs[@]}"; do
# 获取该目录的权限
permissions=$(stat -c "%a" $dir)
# 检查权限是否过于宽松
if [ $permissions -gt 755 ]; then
echo "目录 $dir 的权限过于宽松:$permissions"
fi
done
echo "-------------------------------"
echo "完成了 Linux 系统基线检查"
2. 总结
当然,chatgpt还有很多问题,比如生成较长的脚本的时候经常会卡住,经常会让你重新请求或者重新登录,再比如脚本里一些字段没有判空会造成执行失败,但总体来说,如果让他完成确定的单个需求,速度和代码质量还真的可以。