作者: 启鑫

  • VMware Workstation 配置虚拟机开机自动启动

    打开启动文件夹

    • 按 Win + R 组合键,输入 shell:startup 并回车。
    • 这将打开 Windows 的 启动 文件夹。

    创建批处理文件

    • 在 启动 文件夹内,右键选择 新建 > 文本文档。
    • 将文件命名为 start_vm.bat,并确保扩展名为 .bat(如果看不到扩展名,需要在文件资源管理器中启用 文件扩展名可见)。
    • 使用文本编辑器(如记事本)打开 start_vm.bat 文件,并输入以下内容:
    @echo off
    "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "D:\VM\Debian12-Docker\Debian12-Docker.vmx"
    • D:\VM\Debian12-Docker\Debian12-Docker.vmx 为你需要启动的虚拟机
    • 保存并关闭文件。

    测试自动启动

    • 双击 start_vm.bat 文件,确认虚拟机能正常启动。
    • 重新启动计算机,验证虚拟机是否随 Windows 开机自动运行。
  • 小米电视安装jellyfin

    Jellyfin是一个免费且开源的多媒体服务器软件。它旨在帮助用户管理和流式传输他们的个人媒体内容,如电影、电视节目、音乐和照片。以下是Jellyfin的一些关键特点:

    • 开源和免费:
      • Jellyfin是一个完全免费和开源的项目,这意味着用户可以自由地使用、修改和分发它。
    • 媒体管理:
      • 它允许用户组织和管理他们的媒体库,包括自动获取元数据、封面艺术和字幕。
    • 跨平台支持:
      • Jellyfin支持多种操作系统和设备,包括Windows、macOS、Linux、Android、iOS和智能电视。

    启用小米电视的ADB服务

    • 首先,您需要在小米电视上启用开发者选项和ADB调试。具体步骤可能因小米电视型号和系统版本而异,但通常包括:
      • 进入小米电视的“设置”菜单。
      • 找到“关于本机”或“我的电视”等选项,并多次点击“版本号”或类似选项,直到出现“您已处于开发者模式”的提示。
      • 返回“设置”菜单,找到“开发者选项”并进入。
      • 在“开发者选项”中,启用“ADB调试”和“允许安装未知来源应用”。
    • 确保您的电脑和小米电视连接到同一局域网。
    • 找到您小米电视的IP地址。您可以在小米电视的“设置”->“网络”中找到。

    ADB下载

    • 访问Android开发者官网下载ADB工具:
    • 请根据您的操作系统(Windows、macOS或Linux)下载相应的版本。
    • 下载完成后,解压缩文件并将adb.exe文件所在的目录添加到系统的环境变量中。

    jellyfin下载

    ADB连接和安装

    # adb连接小米电视的IP
    C:\Users\qixin\Downloads>adb connect 192.168.1.112
    already connected to 192.168.1.112:5555
    
    # 列出设备,需要电视adb授权同意
    C:\Users\qixin\Downloads>adb devices
    List of devices attached
    192.168.1.112:5555   unauthorized
    
    # 在小米电视上,允许来自电脑的ADB调试。
    # 再次列出设备
    C:\Users\qixin\Downloads>adb devices
    List of devices attached
    192.168.1.112:5555   device
    
    # 安装jellyfin
    C:\Users\qixin\Downloads>adb install jellyfin-androidtv-v0.18.4-release.apk
    Performing Streamed Install
    Success
    
    C:\Users\liqixin\Downloads>

    步骤详解:

    1. 连接ADB:
      • 使用adb connect 192.168.1.112命令连接到小米电视。将192.168.1.112替换为您的电视IP地址。
      • 第一次连接时,小米电视会弹出一个ADB调试授权提示,请选择“允许”。
    2. 验证连接:
      • 使用adb devices命令列出已连接的设备。如果显示device,则表示连接成功。如果显示unauthorized,说明电视没有允许电脑调试,请到电视上允许。
    3. 安装Jellyfin:
      • 使用adb install jellyfin-androidtv-v0.18.4-release.apk命令安装Jellyfin客户端。将jellyfin-androidtv-v0.18.4-release.apk替换为您下载的apk文件名。
      • 安装成功后,小米电视上会显示Jellyfin应用图标。

    注意事项:

    • 请确保您的电脑和小米电视处于同一局域网。
    • 在安装过程中,请保持网络连接稳定。
    • 如果遇到任何问题,请检查ADB和Jellyfin的安装步骤是否正确。
    • 小米电视的系统更新可能会影响ADB的连接,如果更新后无法连接,需要重新允许电脑调试。
  • AI驱动的供应链污染及其安全隐患分析

    随着人工智能(AI)的发展,越来越多的开发者和企业依赖AI生成代码、优化软件和提升生产力。然而,AI在供应链中的应用也带来了严重的安全隐患,攻击者可以利用AI技术污染软件供应链,导致个人用户、开发者和企业面临各种安全风险。

    1. 小白用户下载第三方AI插件,导致系统被植入恶意代码

    案例描述

    • 小白用户在非官方渠道下载了一款“智能办公插件”或AI图像生成工具的扩展插件,但插件内嵌了恶意代码。
    • 恶意代码可能包含远程控制程序、键盘记录器、勒索软件等。
    • 用户未经检查直接运行插件,导致系统被感染。

    安全隐患

    • 个人数据泄露,账号密码、支付信息被窃取。
    • 电脑被远程控制,成为“僵尸网络”一部分。
    • 重要文件被加密,要求支付赎金解锁。

    防范措施

    • 只从官方渠道下载软件和插件。
    • 使用安全软件扫描插件,避免恶意代码感染。
    • 在沙盒或虚拟机环境中测试插件,确保安全性。
    • 提高安全意识,不随意运行来源不明的脚本。

    2. AI生成的代码未经审查上线,导致安全漏洞

    案例描述

    • 开发者使用AI代码生成工具加速开发,但未进行充分的安全审查。
    • AI生成的代码可能包含SQL注入、XSS(跨站脚本攻击)或未授权访问等漏洞。
    • 攻击者利用这些漏洞入侵系统,造成数据泄露或服务宕机。

    安全隐患

    • 敏感数据泄露,可能导致企业声誉受损。
    • 服务器被入侵,影响系统稳定性。
    • 面临法律诉讼,造成经济损失。

    防范措施

    • 对AI生成的代码进行严格安全审查。
    • 使用静态代码分析工具检测安全漏洞。
    • 进行安全测试,模拟攻击场景。
    • 建立代码审查流程,确保代码质量和安全性。

    3. AI联网搜索的恶意代码被直接复制到生产环境

    案例描述

    • 小白程序员在开发过程中使用AI联网搜索写代码进行快速开发。
    • AI提供的代码中隐藏了恶意后门,但程序员未仔细审查。
    • 该代码被部署到生产环境,导致服务器被入侵。

    安全隐患

    • 服务器长期被攻击者控制,可能导致数据泄露。
    • 攻击者窃取企业机密信息,造成商业损失。
    • 可能面临合规性问题和法律风险。

    防范措施

    • 仅信任权威的代码来源,不随意复制粘贴。
    • 使用代码审查工具检测潜在风险。
    • 在测试环境中进行严格测试,确保安全性。
    • 限制AI代码生成工具的访问权限。

    4. AI优化的开源项目隐藏恶意代码

    案例描述

    • 攻击者利用AI生成开源代码并提交到流行项目。
    • 由于代码较复杂,维护者未深入审查直接合并。
    • 受影响的开源项目被广泛使用,导致大量系统受到攻击。

    安全隐患

    • 供应链污染,影响范围广泛。
    • 恶意代码可能导致远程控制或数据窃取。
    • 企业使用该代码后,面临重大安全威胁。

    防范措施

    • 对开源贡献代码进行严格审查。
    • 监控开源库的维护动态,避免使用可疑代码。
    • 采用SBOM(软件物料清单)追踪供应链依赖。

    5. AI优化的编译器或代码压缩工具被污染

    案例描述

    • 开发者使用AI驱动的编译器或压缩工具进行代码优化。
    • 由于工具被污染,编译后的代码被植入恶意逻辑。
    • 该代码最终进入生产环境,影响用户。

    安全隐患

    • 恶意代码难以察觉,长期潜伏。
    • 可能窃取用户数据或劫持API请求。
    • 影响多个企业或开发团队。

    防范措施

    • 仅使用经过安全审计的编译工具。
    • 代码生成后进行额外的安全检查。
    • 监测应用行为,防止异常代码执行。

    6. AI生成的伪造开源项目欺骗开发者

    案例描述

    • 攻击者利用AI生成完整的开源项目,提供详细文档和示例代码。
    • 该项目被宣传为“创新的开源解决方案”,吸引开发者使用。
    • 实际上,该项目隐藏后门,允许远程控制。

    安全隐患

    • 受信任的开源平台被污染,影响开发者社区。
    • 企业误用后门代码,导致数据泄露。
    • 供应链信任体系受损。

    防范措施

    • 避免轻信新兴开源项目,优先使用知名软件。
    • 检查开源库的维护历史,确保代码安全。
    • 对第三方依赖进行安全扫描。

    AI在提高开发效率的同时,也带来了前所未有的安全挑战。为防范AI驱动的供应链污染,需要开发者、企业和安全研究人员共同努力:

    • 小白用户 提高安全意识,不随意下载和运行不明来源的代码,尤其是AI生成的插件和工具。
    • 开发者 加强代码审查,避免误用AI生成的恶意代码。
    • 企业 对供应链安全进行全面管理,防止供应链攻击。

    AI的安全问题不容忽视,只有建立完善的安全机制,才能在享受AI带来的便利的同时,避免潜在的安全风险。

  • Windows 沙盒(Windows Sandbox)配置指南

    1. 什么是 Windows 沙盒?

    Windows 沙盒(Windows Sandbox)是一项轻量级的虚拟化功能,允许用户在一个隔离的环境中运行不受信任的应用程序,而不会影响主机系统。沙盒关闭后,所有更改都会丢失,确保系统的安全性。

    2. 配置 Windows 沙盒

    Windows 沙盒的配置文件使用 .wsb 扩展名,可以自定义多种参数,如内存、文件夹映射、网络访问等。

    3. 创建配置文件

    创建一个 .wsb 文件(例如 Path.wsb),并使用以下 XML 结构进行配置:

    <Configuration>
      <MemoryInMB>8192</MemoryInMB>
      <MappedFolders>
        <MappedFolder>
          <HostFolder>E:\sandbox</HostFolder>
          <SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads\ABC</SandboxFolder>
          <ReadOnly>false</ReadOnly>
        </MappedFolder>
      </MappedFolders>
      <LogonCommand>
        <Command>explorer.exe C:\Users\WDAGUtilityAccount\Downloads\ABC</Command>
      </LogonCommand>
    </Configuration>

    4. 配置说明

    4.1. 内存分配

    <MemoryInMB>8192</MemoryInMB>
    • 指定沙盒可用的内存大小(以 MB 为单位)。
    • 例如:8192 MB(即 8GB)。
    • 适当增加内存可以提高沙盒的性能。

    4.2. 文件夹映射

    <MappedFolders>
      <MappedFolder>
        <HostFolder>E:\sandbox</HostFolder>
        <SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads\ABC</SandboxFolder>
        <ReadOnly>false</ReadOnly>
      </MappedFolder>
    </MappedFolders>
    • HostFolder:指定主机系统上的文件夹(E:\sandbox)。
    • SandboxFolder:指定沙盒环境中的映射路径(C:\Users\WDAGUtilityAccount\Downloads\ABC)。
    • ReadOnly:设置是否为只读模式,false 表示可读可写,true 表示只读。

    4.3. 登录时自动执行的命令

    <LogonCommand>
      <Command>explorer.exe C:\Users\WDAGUtilityAccount\Downloads\ABC</Command>
    </LogonCommand>
    • 该命令在沙盒启动时自动执行。
    • 这里指定打开 Windows 资源管理器并定位到 C:\Users\WDAGUtilityAccount\Downloads\ABC。

    5. 运行 Windows 沙盒

    5.1. 启用 Windows 沙盒

    在运行 .wsb 文件之前,需要确保 Windows 沙盒功能已启用。

    1. 打开 Windows 设置 > 应用 > 可选功能。
    2. 在 Windows 特色功能 中,找到 Windows 沙盒,并勾选启用。
    3. 重新启动计算机以应用更改。

    5.2. 运行 .wsb 文件

    1. 双击 .wsb 文件即可启动 Windows 沙盒,并加载配置。
    2. 沙盒启动后,会自动映射 E:\sandbox 到沙盒中的 C:\Users\WDAGUtilityAccount\Downloads\ABC。
    3. 资源管理器会自动打开 C:\Users\WDAGUtilityAccount\Downloads\ABC 目录。
  • Windows拆分映像

    在从无法容纳 Windows 映像文件大小的介质安装 Windows 时,可将 Windows 映像 (.wim) 文件拆分为一组较小的 (.swm) 文件,例如:

    • DVD(标准单面 DVD 存储 4.7GB)。
    • 格式化为 FAT32 的 U 盘。 FAT32 是启动许多新式(基于 UEFI 的)PC 所必需的,但它最大文件大小为 4GB。 (解决方法:创建具有多个分区的 U 盘。)

    限制

    • 无法修改一组拆分映像 (.swm) 文件。
    • 只有在所有 .swm 文件都在同一文件夹中时,才支持应用拆分的映像 (.swm) 文件。 这意味着,对于 DVD 部署,需要先将文件复制到目标 PC,然后才能使用 Windows 安装程序或 DISM/Apply-Image,如本主题中所示。

    拆分文件

    • 装载 Windows 安装介质。
    • 将 sources\install.wim 复制到本地 PC。 以下示例使用 G:\sources\install.wim 作为所复制文件的位置。
    • 拆分 Windows 映像:
    Dism /Split-Image /ImageFile:G:\sources\install.wim /SWMFile:J:\sources\install.swm /FileSize:4000

    其中:

    • G:\sources\install.wim 是要拆分的映像文件的名称和位置。
    • J:\sources\install.swm 是拆分的 .swm 文件的目标名称和位置。 第一个拆分的 .swm 文件将会被命名为 install.swm。 接下来的文件的文件名会带有数字,例如,install2.swm 文件、install3.swm 文件,等等。
    • 4000 是每个要创建的拆分 .swm 文件的最大大小(以 MB 为单位)。
    • 现在,J:\sources 文件夹中有一组 install.swm 文件。
  • Debian12安装 Immich 进行自托管照片和视频

    Immich 是一个强大的自托管照片和视频管理解决方案,允许用户在自己的服务器上存储、管理和浏览照片,同时提供智能搜索、面部识别等 AI 功能,保护您的隐私。

    1. 介绍 Immich

    Immich 的主要功能

    • 自动备份:支持手机和桌面端自动同步照片和视频。
    • 智能搜索:基于 AI 的搜索和标签功能,快速查找照片。
    • 面部识别:自动识别照片中的人物并进行分类。
    • 隐私保护:完全自托管,确保数据不会泄露到第三方服务器。
    • 高效存储:支持增量备份和重复数据删除,优化存储空间。
    • 跨平台支持:支持 Android、iOS、Web 和桌面端访问。

    2. 安装 Docker 和 Docker Compose

    在 Linux 服务器上运行以下命令安装 Docker:

    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

    安装完成后,检查 Docker 版本:

    docker --version

    安装 Docker Compose:

    apt install -y docker-compose

    3. 下载 Immich 并配置环境变量

    3.1 创建 Immich 安装目录

    mkdir ./immich-app && cd ./immich-app

    3.2 下载官方 Docker Compose 文件

    # &nbsp;docker-compose.yml
    wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    
    # .env
    wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

    docker-compose.yml文件

    #
    # WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
    #
    # Make sure to use the docker-compose.yml of the current release:
    #
    # https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
    #
    # The compose file on main may not be compatible with the latest release.
    
    name: immich
    
    services:
      immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        # extends:
        #   file: hwaccel.transcoding.yml
        #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
        volumes:
          # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
          - ${UPLOAD_LOCATION}:/usr/src/app/upload
          - /etc/localtime:/etc/localtime:ro
        env_file:
          - .env
        ports:
          - '2283:2283'
        depends_on:
          - redis
          - database
        restart: always
        healthcheck:
          disable: false
    
      immich-machine-learning:
        container_name: immich_machine_learning
        # For hardware acceleration, add one of -[armnn, cuda, openvino] to the image tag.
        # Example tag: ${IMMICH_VERSION:-release}-cuda
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
        #   file: hwaccel.ml.yml
        #   service: cpu # set to one of [armnn, cuda, openvino, openvino-wsl] for accelerated inference - use the `-wsl` version for WSL2 where applicable
        volumes:
          - model-cache:/cache
        env_file:
          - .env
        restart: always
        healthcheck:
          disable: false
    
      redis:
        container_name: immich_redis
        image: docker.io/redis:6.2-alpine@sha256:148bb5411c184abd288d9aaed139c98123eeb8824c5d3fce03cf721db58066d8
        healthcheck:
          test: redis-cli ping || exit 1
        restart: always
    
      database:
        container_name: immich_postgres
        image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52
        environment:
          POSTGRES_PASSWORD: ${DB_PASSWORD}
          POSTGRES_USER: ${DB_USERNAME}
          POSTGRES_DB: ${DB_DATABASE_NAME}
          POSTGRES_INITDB_ARGS: '--data-checksums'
        volumes:
          # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
          - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
        healthcheck:
          test: >-
            pg_isready --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" || exit 1;
            Chksum="$$(psql --dbname="$${POSTGRES_DB}" --username="$${POSTGRES_USER}" --tuples-only --no-align
            --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')";
            echo "checksum failure count is $$Chksum";
            [ "$$Chksum" = '0' ] || exit 1
          interval: 5m
          start_interval: 30s
          start_period: 5m
        command: >-
          postgres
          -c shared_preload_libraries=vectors.so
          -c 'search_path="$$user", public, vectors'
          -c logging_collector=on
          -c max_wal_size=2GB
          -c shared_buffers=512MB
          -c wal_compression=on
        restart: always
    
    volumes:
      model-cache:

    .env文件

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich

    3.3 配置环境变量

    编辑 .env 文件:

    nano .env

    修改以下关键参数:

    # You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
    
    # The location where your uploaded files are stored
    UPLOAD_LOCATION=./library
    # The location where your database files are stored
    DB_DATA_LOCATION=./postgres
    
    # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
    # TZ=Etc/UTC
    
    # The Immich version to use. You can pin this to a specific version like "v1.71.0"
    IMMICH_VERSION=release
    
    # Connection secret for postgres. You should change it to a random password
    # Please use only the characters `A-Za-z0-9`, without special characters or spaces
    DB_PASSWORD=postgres
    
    # The values below this line do not need to be changed
    ###################################################################################
    DB_USERNAME=postgres
    DB_DATABASE_NAME=immich
    • 指定备份存储位置:
      • 请在UPLOAD_LOCATION中填写您希望存储备份文件的绝对路径。建议选择服务器上具有足够可用空间的新建目录,以确保备份顺利进行。
    • 设置数据库密码:
      • 强烈建议您修改DB_PASSWORD,为其设置一个自定义的强密码。由于PostgreSQL服务仅在本地Docker容器内运行,此密码用于本地身份验证。为避免Docker在解析密码时出现问题,请仅使用A-Za-z0-9范围内的字符。您可以使用pwgen等工具生成安全的随机密码。

    4. 启动 Immich

    运行 Docker Compose 启动 Immich

    在 docker-compose.yml 所在目录运行:

    docker compose up -d

    5. 访问 Immich Web 界面

    在浏览器中输入:

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

    首次访问时,需要注册一个管理员账户,登录后即可开始使用。