作者: 启鑫

  • LLM 的双重含义

    什么是LLM?它为什么有不同的意思?

    你可能在不同的场合听到过“LLM”这个词,但它的意思可能让你有点混淆。其实,LLM在不同的领域有不同的含义,今天我们就来聊聊它到底是什么意思,为什么它会有这么多不同的解释。

    LLM:法学硕士

    首先,LLM 在法学界是非常常见的缩写,它代表的是“法学硕士”(Master of Laws)。如果你知道有些人去大学读法律,学完之后可能拿到一个叫做“法学硕士”的学位,这个学位就叫做LLM。它是专门给那些已经获得法学本科学位的人,进一步深造的学位。

    举个例子:你读完法律本科后,决定继续学习法律,专攻某一方面的知识,比如国际法、商法等,这时候你就可以去申请法学硕士(LLM)学位。这种学位通常在一些国家很有用,能够帮助你在法律界获得更好的职位。

    所以,在法学领域,LLM 就是法学硕士的意思。

    LLM:大语言模型

    在人工智能(AI)领域,LLM有着完全不同的含义。在AI里,LLM代表的是“大语言模型”(Large Language Model)。这是一种专门用来处理语言的人工智能技术。它能够读懂和生成自然语言,比如你和智能助手对话,智能助手能理解你的问题并给出回答,这背后就可能是一个大语言模型在工作。

    这些大语言模型是通过大量的数据训练出来的,比如从互联网上抓取各种文章、书籍、对话记录等内容,它们学会了语言的规则和结构。所以,当你输入一句话,它就能根据学到的知识给你一个合适的回答。比如,像GPT-3GPT-4就是知名的大语言模型。

    简单来说,LLM 在AI领域是指用来做语言处理的强大程序,它可以帮助人们更好地理解、生成和使用语言。

    为什么LLM有两种不同的意思?

    那为什么“LLM”这个词会有两种完全不同的意思呢?其实这就是因为不同的领域使用这个缩写的时候,它们有各自的传统和需求。

    1. 法学界的历史 在法学界,LLM 作为法学硕士学位的缩写已经存在很久了,很多国家的法学院都习惯使用这个缩写。因此,当我们提到“LLM”时,大家首先会想到的是法学硕士。
    2. AI技术的快速发展 在人工智能领域,随着技术的发展,新的术语和缩写不断涌现。LLM 这个缩写被用来代表“大语言模型”,是因为这种技术需要处理大量的语言数据,而“LLM”也正好符合这个概念。

    由于两者的应用场景完全不同,虽然它们用的是同一个缩写,但人们根据讨论的上下文可以很容易区分是指哪个意思。

    如何避免混淆?

    虽然LLM在法学和AI领域有不同的含义,但只要你理解了它们各自的背景,基本上就不容易混淆了。这里有几个简单的方法帮助你区分它们:

    • 如果你在讨论法律、律师、法学教育等话题,LLM指的肯定是“法学硕士”。比如,你听到有人说“他刚刚拿到LLM学位”,那肯定是在说他获得了法学硕士学位。
    • 如果你在谈论人工智能、机器学习、语言处理等技术话题,LLM指的就是“大语言模型”。比如,当有人提到“这个AI是基于LLM构建的”,那肯定是在说它是使用了大语言模型来处理语言。

  • Linux发行版在日常使用与业务需求的最佳选择

    关于如何在日常使用和业务应用中选择合适的Linux发行版的实用指南。文章详细分析了不同Linux发行版的特性、优势以及适用场景,以便能够根据自身需求做出选择。

    一、日常使用(个人用户、开发者)

    适用于普通用户、开发者、开源爱好者等,关注易用性、社区支持、桌面体验和软件生态

    1. 适合桌面用户

    • Ubuntu(桌面版)
      • 优势:安装简单,默认支持大量硬件,应用商店丰富,长期支持(LTS)版本可用。强大的社区支持,丰富的文档。
      • 适用场景:办公、日常上网、影音娱乐、开发环境(VS Code、Docker、PyCharm等)。
      • 缺点:默认启用 Snap,有时会影响软件加载速度。
    • Linux Mint
      • 优势:基于 Ubuntu,界面类似 Windows,适合新手,默认带有更多开箱即用的软件。对老旧硬件兼容性更好。
      • 适用场景:替代 Windows 或 macOS,稳定性好,轻量级硬件支持更友好。
      • 缺点:社区活跃度略低于 Ubuntu。
    • Fedora Workstation
      • 优势:采用 GNOME 桌面,支持最新的 Linux 技术(如 Wayland、PipeWire),开发者友好,拥有较新的软件包。
      • 适用场景:开发者、喜欢尝鲜的人。
      • 缺点:生命周期较短(6 个月一次大更新)。
    • Manjaro
      • 优势:基于 Arch,安装方便,提供滚动更新但更稳定,拥有 AUR(Arch User Repository),软件资源丰富。
      • 适用场景:希望使用 Arch 但不想手动配置的用户。
      • 缺点:部分更新可能导致系统不稳定。
    • Elementary OS
      • 优势:注重美观和简洁,界面类似 macOS,用户体验良好。
      • 适用场景:追求美观和易用性的用户。
      • 缺点:软件生态相对较小。
    • Pop!_OS
      • 优势:由 System76 开发,对游戏和开发支持良好,特别是对NVIDIA显卡支持优化。
      • 适用场景:游戏玩家,开发者,特别是深度学习开发者。
      • 缺点:相对较新的发行版,社区规模小于Ubuntu。

    2. 适合开发者

    • Ubuntu(LTS)
      • 适合大多数开发环境(Python、Node.js、Go、Docker、Kubernetes)。
      • 强大的社区支持,问题易解决。
    • Debian
      • 更稳定,适合需要长期运行的开发环境(服务器、容器化部署)。
      • 默认仓库软件较旧,可手动添加 backports 或使用 Testing 版。
    • Arch Linux
      • 适合高级用户,完全定制化,提供最新的软件版本和内核。
      • 适合构建极简、个性化的开发环境。
    • openSUSE Tumbleweed
      • 优势:滚动更新模型,提供最新的开发工具和库,YaST 管理工具强大。
      • 适用场景:追求最新软件的开发者。
      • 缺点:滚动更新可能带来不稳定性。

    二、业务使用(服务器、企业、生产环境)

    适用于服务器、数据中心、云计算、企业内部系统等,关注稳定性、安全性、长期支持、软件兼容性

    1. 企业服务器

    • Ubuntu Server(LTS)
      • 适合云计算(支持 AWS、Azure、GCP)、容器化部署(Docker、K8s)。
      • 5 年 LTS + 可选 10 年扩展支持(Ubuntu Pro)。
    • Debian
      • 以稳定著称,适用于 Web 服务器、数据库等长期运行的应用。
      • 软件更新相对较慢,但非常可靠。
    • Rocky Linux / AlmaLinux
      • RHEL(Red Hat Enterprise Linux)的完全兼容替代品,适用于企业生产环境。
      • 长期支持,适用于需要稳定性的企业服务器。
    • Red Hat Enterprise Linux(RHEL)
      • 适用于企业级业务,提供商业支持(Red Hat 订阅)。
      • 大规模生产环境、企业 IT 部门使用较多。
    • Oracle Linux
      • 优势:与Oracle产品兼容性好,适合运行Oracle数据库等。
      • 适用场景:运行Oracle相关业务的企业。
      • 缺点:相对RHEL,社区规模较小。

    2. 高性能计算 / 数据中心

    • SUSE Linux Enterprise Server(SLES)
      • 适用于 SAP、大型企业应用,专注于企业级可靠性。
    • Amazon Linux
      • AWS 官方 Linux 发行版,针对 AWS 进行了优化,适用于云计算。

    3. 容器 / 云计算 / DevOps

    • Ubuntu Server
      • 适用于 Docker、Kubernetes,支持 cloud-init,兼容 AWS/GCP/Azure。
    • Debian
      • 轻量级,适用于自定义容器环境,基础镜像占用较小。
    • RHEL / Rocky Linux / AlmaLinux
      • 适用于企业级 Kubernetes 部署(如 OpenShift)。
    • Flatcar Container Linux
      • 专为容器化工作负载设计(类似于已停更的 CoreOS)。

    4. 嵌入式 / 轻量级服务器

    • Alpine Linux
      • 体积小,安全性高,适用于容器和嵌入式设备。
    • Raspberry Pi OS
      • 适用于树莓派、物联网(IoT)项目。
    • NixOS
      • 优势:声明式配置,可重复构建,适合构建高度定制化的嵌入式系统。
      • 适用场景:需要高度定制化和可重复构建的嵌入式系统。
      • 缺点:学习曲线陡峭。
  • Docker安装Nextcloud

    Nextcloud 是一款开源的私有云存储服务,通过 Docker 部署 Nextcloud 可以快速搭建私有云存储服务,适用于个人和小型团队使用。

    1. 创建工作目录

    在服务器上创建一个专门用于存放 Nextcloud 数据的目录,并进入该目录:

    mkdir nextcloud && cd nextcloud

    2. 编写 docker-compose.yml 配置文件

    创建 docker-compose.yml 文件,并填入以下内容:

    services:
      db:
        image: postgres
        restart: always
        volumes:
          - db:/var/lib/postgresql/data
        environment:
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
    
      app:
        image: nextcloud
        restart: always
        ports:
          - 8080:80
        volumes:
          - nextcloud:/var/www/html
        environment:
          - POSTGRES_HOST=db
          - POSTGRES_DB=nextcloud
          - POSTGRES_USER=nextcloud
          - POSTGRES_PASSWORD=nextcloud
        depends_on:
          - db
    
      cron:
        image: nextcloud
        restart: always
        volumes:
          - nextcloud:/var/www/html
        entrypoint: /cron.sh
        depends_on:
          - db
    
    volumes:
      db:
      nextcloud:

    2.1 说明

    • 数据库服务 (db): 使用 PostgreSQL 作为 Nextcloud 的数据库存储。
    • Nextcloud 应用 (app): 主要的 Nextcloud 服务,映射端口 8080
    • 定时任务 (cron): 运行 Nextcloud 的定期任务,如清理临时文件、维护数据库等。
    • 数据卷 (volumes): db 用于存储数据库数据,nextcloud 用于存储 Nextcloud 相关文件。

    3. 启动 Nextcloud

    使用 docker compose 命令启动 Nextcloud 容器:

    docker compose up -d

    4. 访问 Nextcloud

    在浏览器中打开以下地址访问 Nextcloud 界面:

    http://<服务器IP>:8080

    首次访问时,需要创建管理员账号并完成初始化。

  • Docker安装Stirling-PDF

    Stirling-PDF 是一款基于 Docker 容器的开源 PDF 处理工具,专为OCR设计,能够将扫描的 PDF 文件中的图像或文字转换为可编辑的文本。通过集成 Tesseract OCR 引擎,Stirling-PDF 使得用户能够轻松提取 PDF 文件中的文字,无论是扫描文档、图像还是其他类型的图文混合内容。

    该工具提供了一个简洁的 Web 界面,用户可以上传 PDF 文件进行批量处理、OCR 识别和文本提取。它支持多语言识别,适用于不同语言的 OCR 数据包,能够帮助用户处理多种语言的文档。

    1. 创建 stirling-pdf 目录并进入

    首先,我们需要在你的服务器上创建一个新的目录来存放相关文件,并进入该目录。

    mkdir stirling-pdf && cd stirling-pdf

    2. 下载 Tesseract OCR 库

    Stirling-PDF 使用 Tesseract OCR 库进行文字识别。因此,我们需要下载其相关的语言数据。

    git clone https://github.com/tesseract-ocr/tessdata.git

    3. 创建 docker-compose.yml 文件

    创建 docker-compose.yml 文件,以便使用 Docker Compose 部署 Stirling-PDF 服务。

    stirling-pdf 目录下,创建并编辑 docker-compose.yml 文件:

    services:
      stirling-pdf:
        restart: always
        image: frooodle/s-pdf:latest
        ports:
          - '8080:8080'  # 映射容器内的 8080 端口到宿主机的 8080 端口
        volumes:
          - ./tessdata:/usr/share/tessdata
          - ./extraConfigs:/configs
          - ./customFiles:/customFiles/
          - ./logs:/logs/
        environment:
          - DOCKER_ENABLE_SECURITY=false
          - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
          - LANGS=en_GB

    4. 启动 Stirling-PDF

    创建完 docker-compose.yml 文件后,可以使用以下命令启动 Stirling-PDF 服务:

    docker compose up -d

    该命令会自动下载所需的 Docker 镜像并启动容器。启动完成后,Stirling-PDF 服务将开始运行。

    5. 使用浏览器访问 Stirling-PDF

    启动成功后,你可以在浏览器中通过以下地址访问 Stirling-PDF:

    http://<IP>:8080
    • 替换 <IP> 为你的服务器的 IP 地址,你就可以在浏览器中访问并使用 Stirling-PDF 进行 PDF 文件的处理了。
  • 如何从 Git 历史中彻底删除误上传的敏感信息

    如果你不小心提交了包含敏感信息(如 API 密钥、数据库密码)的 .env 文件到 Git 仓库,需要 彻底删除 这个文件及其历史记录,以防泄露。以下是完整的处理步骤。

    1. 立即更改敏感信息

    重要! .env 文件中的密码和密钥可能已经泄露,立即更改相关凭据,如:

    • 数据库密码
    • API 密钥
    • OAuth 令牌
    • SSH 私钥

    2. 确保 .env 文件不会再被提交

    .env 添加到 .gitignore,防止再次提交:

    echo ".env" >> .gitignore
    git add .gitignore
    git commit -m "Add .env to .gitignore"

    3. 从 Git 历史中删除 .env 文件

    推荐方式:使用 git filter-repo

    git filter-repo 是 Git 官方推荐的工具,速度快且更安全。

    3.1 安装 git filter-repo

    如果尚未安装,可以运行:

    pip install git-filter-repo

    3.2 彻底删除 .env 文件

    在 Git 仓库根目录运行:

    git filter-repo --path .env --invert-paths

    参数解析:

    • --path .env:指定要删除的文件
    • --invert-paths:删除所有提交中 .env 文件的历史记录

    4. 验证 .env 是否彻底删除

    检查 .env 是否仍在历史记录中:

    git log -- .env
    git log -S"你的敏感信息"

    如果没有返回任何记录,说明 .env 文件及其历史已经删除。

    5. 强制推送到远程仓库

    由于改写了 Git 历史,必须使用 --force 强制推送:

    git push origin main --force

    注意:

    • 所有协作者 需要重新克隆仓库,否则 git pull 会失败。
    • 确保 .env 不会再提交(参考步骤 2)。

    6. 清理本地和远程的旧引用

    如果 .env 可能出现在其他分支,确保所有分支都清理干净:

    git push origin --all --force

    7. 确保 .env 在远程仓库中消失

    前往 GitHub / GitLab 仓库,检查 .env 是否仍然可见:

    • 如果仍然存在,可能是缓存未清除,联系托管平台的技术支持要求彻底清除。

    8. 预防未来类似问题

    • 使用 .gitignore 确保敏感文件不会进入 Git 版本控制
    • 使用环境变量管理工具(如 dotenv)存储敏感数据
    • 定期检查 Git 提交,避免误提交敏感信息:
    git log -p | grep "API_KEY"

    重要提醒

    • 备份代码:执行 git filter-repo 之前,建议 备份仓库,以防误删。
    • 通知协作者:如果有其他人参与该仓库开发,他们需要重新克隆仓库,否则会遇到同步问题。
    • 合规性问题:如果泄露的是 用户数据,请考虑是否需要上报安全事件
    • 对于 GitHub 仓库:如果 .env 仍然可见,可以尝试 GitHub API 请求删除缓存或联系 GitHub 支持。
    • 对于 GitLab:使用 git gc --prune=now 清理本地仓库,并在 GitLab 管理面板中触发仓库垃圾回收。
    • 企业环境:如果 Git 服务器由企业管理可与管理员协商执行全局清理。
  • Windows系统恶意域名连接事件分析与响应

    事件概述

    在防火墙监控中检测到一台内部 Windows 主机(通过其 IP 地址识别)发起了对一个或多个恶意域名的网络连接。这可能表明该主机已受到恶意软件感染,需要立即进行排查和处理。

    1. 识别恶意请求来源

    1.1. 检查防火墙日志

    • 在防火墙管理界面中,找到相关的日志记录,确定:
      • 访问的恶意域名
      • 访问的时间
      • 发起请求的设备 IP
      • 访问的协议(如 HTTP、HTTPS、DNS 等)
      • 源端口和目标端口

    1.2. 在 Windows 设备上检查 DNS 解析历史

    在受感染的 Windows 设备上,使用以下命令查看 DNS 缓存:

    ipconfig /displaydns

    查找是否存在恶意域名,并记录相关条目。同时,检查 DNS 服务器的指向,是否被篡改。

    1.3. 查找相关进程

    使用以下命令查看当前连接的域名和进程:

    Get-NetTCPConnection -State Established | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess | Format-Table -AutoSize

    找到与恶意域名相关的 IP 地址,并记录对应的进程 ID(PID)。

    然后使用:

    Get-Process -Id <PID> -IncludeUserName

    查看是哪个进程在发起恶意请求,并查看进程的用户名,来判断是否是异常进程。

    1.4. windows事件日志分析

    • 打开事件查看器,检查“Windows 日志”下的“应用程序”、“安全”和“系统”日志。
    • 重点关注以下事件:
      • 异常的登录尝试(安全日志)。
      • 应用程序错误或崩溃(应用程序日志)。
      • 系统错误或警告(系统日志)。
      • 查找与恶意软件活动相关的事件,例如:
        • 可疑的进程启动或终止。
        • 异常的文件访问或修改。
        • 网络连接错误。

    1.5. 使用wireshark抓包分析

    • 在受感染主机上安装 Wireshark,捕获网络流量。
    • 使用过滤器(例如,dns.qry.name contains "malicious-domain.com")来查找与恶意域名相关的流量。
    • 分析流量中的数据包,查找恶意软件的通信模式和数据内容。
    • 重点关注以下信息:
      • 恶意软件使用的协议和端口。
      • 恶意软件通信的 IP 地址和域名。
      • 恶意软件传输的数据内容。

    2. 终止并分析恶意进程

    2.1. 终止可疑进程

    • 当发现感染的进程是系统进程时:
      • 仔细核对:使用Process Explorer等工具,查看进程的详细信息。
      • 数字签名验证:检查系统进程的数字签名。
      • 资源占用异常:监控系统进程的CPU、内存和网络占用情况。
      • 网络连接异常:通过netstat,wireshark等工具,确认系统进程的网络链接,是否链接了可疑的IP或者域名。
      • 隔离网络:立即将受感染的主机从网络中隔离。
      • 安全模式扫描:重启计算机进入安全模式,进行全面扫描。
      • 系统文件检查器(SFC):使用sfc /scannow命令扫描并修复受损的系统文件。
      • DISM工具:使用DISM工具,对系统镜像进行修复。
      • 系统还原:尝试回滚到感染前的状态。
      • 分析恶意软件:提取可疑的系统进程文件进行恶意软件分析。
      • 考虑重装系统:如果以上方法无效,考虑重装系统。
    • 找到可疑进程后,可以手动终止:
    Stop-Process -Id <PID> -Force

    或者在任务管理器中找到对应进程并结束任务。在终止前,使用工具进行进程的快照。

    2.2. 分析进程启动项

    使用以下命令检查进程是否在开机启动:

    Get-CimInstance Win32_StartupCommand | Select-Object Name, Command, Location

    如果发现恶意进程,手动删除启动项,或者使用 msconfig 检查启动项。同时检查服务列表,是否有可疑服务在运行。

    3. 查找恶意文件

    3.1. 检查系统文件

    使用 Windows Defender 进行完整扫描:

    Start-MpScan -ScanType FullScan

    或者使用 ClamAV(适用于 Windows 版本)进行手动扫描:

    clamscan.exe -r C:\ --bell --remove

    同时可以使用其他的杀毒软件进行辅助查杀

    3.2. 使用 Autoruns 检查隐藏启动项

    下载 Autoruns,运行后检查是否有恶意程序在系统启动时运行。尤其关注隐藏的启动项和服务。

    3.3. 检查 Hosts 文件

    打开 Hosts 文件:

    notepad C:\Windows\System32\drivers\etc\hosts

    删除所有与恶意域名相关的可疑条目。检查是否有异常的指向。

    4. 阻止恶意域名

    在本地防火墙或 Windows Defender 中阻止恶意域名:

    New-NetFirewallRule -DisplayName "Block Malicious Domain" -Direction Outbound -Action Block -RemoteAddress <恶意IP>

    或者在 Hosts 文件中将恶意域名指向本地:

    127.0.0.1 malicious-domain.com

    同时,在企业环境中,需要在边界防火墙,IDS/IPS 等设备中添加封禁策略。

    5. 排查后门和持久化机制

    5.1. 检查计划任务

    Get-ScheduledTask | Where-Object {$_.TaskName -match "malware"}

    删除任何可疑任务:

    Unregister-ScheduledTask -TaskName "<TaskName>" -Confirm:$false

    5.2. 检查注册表

    查看注册表启动项:

    reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run

    删除可疑项:

    reg delete HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v "<恶意项>" /f

    同时,检查其他的注册表启动项,例如 RunOnce,RunServices 等。

    5.3 检查网络连接

    通过 netstat 命令,检查异常网络连接。

    netstat -ano

    6. 进行系统修复

    如果感染严重,可以执行以下操作:

    1. 系统还原:回滚到之前的快照
    2. 重装 Windows:如果找不到恶意软件的来源,建议重装系统
    3. 更改密码:如果怀疑凭据被窃取,建议更改相关账户密码
    4. 隔离受感染主机:将受感染主机从网络中隔离,防止横向传播。
    5. 分析恶意软件样本:如果可能,提取恶意软件样本进行分析,了解其行为和目的。
    6. 更新安全补丁:确保系统和应用程序都安装了最新的安全补丁。
    7. 全网安全扫描:对网络中的其他主机进行安全扫描,确保没有其他主机受到感染。
    8. 备份重要数据:在重装系统前,尽可能的备份重要数据。