写点什么

测试使用 ChatGPT 开发 shell 脚本

作者:瀛洲骇客
  • 2023-03-10
    北京
  • 本文字数:2321 字

    阅读完需:约 8 分钟

测试使用ChatGPT开发shell脚本

1.简介

最近 ChatGPT 大火,这个产品是由 OpenAI 开发的大型语言模型。可以回答关于各种话题的问题并提供相关的信息和见解。ChatGPT 被训练了数百亿次,涵盖了广泛的领域,从历史、科学、技术、文化到流行文化、娱乐和时事等。

听说 ChatGPT 可以干掉程序员,作为一种自然语言处理模型,ChatGPT 可以生成文本,但不是真正的代码。他提供一些关于编程的建议和指导,但不能编写真正的代码或者运行程序。下面我们就来测试一下我们能否使用 ChatGPT 写一个我们想要的 shell 脚本。

2.测试

今天测试就用 ChatGPT 开发一个 Liunx 基线检查脚本。

使用 vi 在 liunx 中复制这段脚本创建一个脚本文件,看一下效果。(脚本记得 chmod 添加执行权限)

执行看下效果:

可以看到检查项主要有:

#!/bin/bash
echo "Started Linux System Baseline Check"
# Check system uptime 系统运行时间echo -n "System Uptime: "uptime
# Check number of users logged inecho -n "Number of users logged in: " 登录用户数who | wc -l
# Check available disk spaceecho -n "Disk space: " 硬盘使用信息df -h
# Check memory usageecho -n "Memory usage: " 内存使用率free -h
# Check top 5 processes by memory usageecho -n "Top 5 processes by memory usage: " 使用内存最多的5个程序ps -eo pmem,pid,user,args | sort -k 1 -r | head -6
echo "Finished Linux System Baseline Check"
复制代码

这显然不能满足我们的要求,连端口开放信息都没有

让我自己合并,不智能,让他合并一下

去系统上粘贴运行一下,已经可以检查敏感端口了

再添加一个异常用户登录的检查,这次果然成长了,chatGPT 先把当前的要检查的脚本列出来,然后自己合并脚本了,点赞!

再运行一下,已经可以检查登录用户了

接下来再添加一些其他的检查项:

  • 检查长期不登录用户

  • 检查密码有效期

  • 系统关键目录权限

生成的脚本较长的话中间会有终端的可能会中断,需要重新生成

最后让脚本把注释改完中文,添加分割线。

最后看一下这个脚本吧

#!/bin/bash
echo "开始 Linux 系统基线,弱口令,以及未激活用户帐户检查"
# 检查系统正常运行时间echo -n "系统正常运行时间: "uptimeecho "-------------------------------"
# 检查已登录用户数echo -n "已登录用户数: "who | wc -lecho "-------------------------------"
# 检查可用磁盘空间echo -n "磁盘空间: "df -hecho "-------------------------------"
# 检查内存使用情况echo -n "内存使用情况: "free -hecho "-------------------------------"
# 检查内存使用最多的前 5 个进程echo -n "内存使用最多的前 5 个进程: "ps -eo pmem,pid,user,args | sort -k 1 -r | head -6echo "-------------------------------"
# 检查高风险开放端口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 已开放!" fidoneecho "-------------------------------"
# 检查意外的用户登录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" fidoneecho "-------------------------------"
# 检查弱密码echo "检查弱密码..."password_file='/etc/shadow'weak_passwords=(123456 password 123456789 12345678 12345 qwerty abc123 111111 1234567)while IFS=: read -r username hash rest; do for password in "${weak_passwords[@]}"; do encrypted_password=$(echo -n "$password" | openssl passwd -6 -stdin) if [[ "$hash" == "$encrypted_password" ]]; then echo "用户 $username 有一个弱密码: $password" break fi donedone echo "-------------------------------"
# 检查不活动的用户帐户echo "检查不活动的用户帐户..."inactive_period=90today=$(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" fidoneecho "-------------------------------" echo "完成了 Linux 系统基线检查"
复制代码

3.总结

当然,chatgpt 还有很多问题,比如生成较长的脚本的时候经常会卡住,经常会让你重新请求或者重新登录,再比如脚本里一些字段没有判空会造成执行失败,但总体来说,如果让他完成确定的单个需求,速度和代码质量还真的可以。

发布于: 刚刚阅读数: 3
用户头像

瀛洲骇客

关注

还未添加个人签名 2018-04-30 加入

从事多年SOC/SIEM开发工作; 一个有趣的人;

评论

发布
暂无评论
测试使用ChatGPT开发shell脚本_ChatGPT_瀛洲骇客_InfoQ写作社区