SuperAPI AI 工具集

linux-admin

部署与运维

查看项目

更新于 10-15 15:21

技能介绍

用途

linux-admin 是一个面向生产环境的 Linux 系统管理技能,覆盖 shell 脚本编写、systemd 服务管理、网络调试与安全加固。它把每台 Linux 系统视为生产资产:配置显式化、变更可审计、安全从起步就是约束条件,而非事后补救。它面向需要在编写部署脚本、排查网络问题和加固新服务器之间自如切换的工程师。

触发场景

在以下情况触发该技能:

  • 编写或调试 bash 脚本(尤其是运行于 CI、cron 或生产环境的脚本)
  • 创建或修改 systemd 的 service、timer、socket 或 target 单元
  • 配置或审计 SSH 守护进程设置与访问控制
  • 调试网络问题(路由、DNS、防火墙、端口连通性)
  • 设置或修改 iptables/nftables/ufw 防火墙规则
  • 管理文件权限、属主、ACL 或 setuid/setgid 位
  • 监控或调查运行中的进程(CPU、内存、打开文件、系统调用)
  • 设置 cron 任务或计划任务
  • 管理磁盘空间、日志轮转或文件系统挂载

不适用于:容器编排细节(Kubernetes 网络、Docker Compose 配置),应使用 Docker/K8s 技能;云厂商 IAM、VPC 路由或托管服务配置属于云平台范畴,而非操作系统层面的 Linux 管理。

核心原则

  • 最小权限原则:每个进程、用户和服务都应以所需最小权限运行,使用专用服务账号(而非 root),按需限制文件权限,定期审计 sudo 规则。
  • 自动化可重复任务:命令运行两次就应脚本化,脚本应幂等——重复运行产生相同结果,脚本纳入版本控制。
  • 记录一切重要事件:结构化日志、审计日志(auditd)与 systemd journal 是事件响应的安全网,记录认证事件、特权提升与配置变更;日志轮转可防止磁盘耗尽。
  • 尽可能使用不可变服务器:优先从已知良好的镜像重建服务器,而非就地打补丁;使用配置管理(Ansible、cloud-init)声明式定义状态。
  • 在预发环境测试:每个脚本、服务单元和防火墙规则变更都应先在非生产环境验证;使用 --dry-run、bash -n、iptables --check 在应用前校验。

主要能力

文件权限

Linux 权限分三层(属主、属组、其他)与三个位(读、写、执行),八进制是权威表示法。常用模式:chmod 600(私钥,仅属主读写)、chmod 644(配置,属主读写、其他只读)、chmod 755(可执行文件)、chmod 700(目录,仅属主可进入)。特殊位:setuid(4xxx)使可执行文件以文件属主身份运行,对脚本危险;setgid(2xxx)使目录中新文件继承属组,适合共享目录;sticky(1xxx)使目录中仅文件属主可删除文件(如 /tmp)。

进程管理

关键信号:SIGTERM(15)礼貌关闭,进程应清理;SIGKILL(9)立即杀死,内核强制、不可阻塞;SIGHUP(1)重载配置;SIGINT(2)中断(Ctrl+C);SIGUSR1/2(10/12)由应用定义。niceness 从 -20(最高优先级)到 19(最低),后台任务用 nice -n 10 cmd,运行中的进程用 renice 调整。

systemd 单元层级

  • Target(分组):multi-user.target、network.target
  • Service(.service):长期守护进程、oneshot 任务
  • Timer(.timer):计划执行(替代 cron)
  • Socket(.socket):套接字激活的服务
  • Mount(.mount):由 systemd 管理的文件系统挂载
  • Path(.path):文件系统变更触发

依赖指令:Requires=(硬依赖)、Wants=(软依赖)、After=(仅排序)。等待网络连通性的正确方式是 After=network-online.target。

网络栈

关键工具及角色:ip addr / ip link(L2/L3,接口状态、IP 地址、路由)、ip route(L3,路由表查看与管理)、ss -tulpn(L4,监听端口、套接字状态、所属进程)、iptables -L -n -v(L3/L4,防火墙规则、包计数)、dig / resolvectl(DNS,名称解析调试)、traceroute / mtr(L3,路径追踪、逐跳延迟)、tcpdump(L2-L7,深度抓包检查)。

使用方式

编写健壮的 bash 脚本

在每个非平凡脚本顶部使用安全三件套:

#!/usr/bin/env bash
set -euo pipefail
# -e: 遇错退出
# -u: 未设置变量视为错误
# -o pipefail: 管道中任一命令失败则管道失败

使用 trap 在退出时清理(覆盖成功、错误和信号),用 mktemp 创建安全的临时目录,带时间戳记录日志,并提供 dry-run 包装器。

创建 systemd 服务单元

service + timer 组合可替代 cron。服务单元中可加入安全加固项(NoNewPrivileges、ProtectSystem、ProtectHome、PrivateTmp 等),并通过 Restart=on-failure 与 RestartSec=60 在失败时重试。timer 使用 OnCalendar 定义计划、Persistent=true 在错过运行后立即补跑、RandomizedDelaySec 随机化启动以避免惊群。部署后执行 systemctl daemon-reload 与 systemctl enable --now,并用 systemctl status、systemctl list-timers、journalctl 检查。

配置 SSH 加固

在 /etc/ssh/sshd_config 中可设置:Protocol 2、PermitRootLogin no、PasswordAuthentication no、ChallengeResponseAuthentication no、X11Forwarding no、LoginGraceTime 30、MaxAuthTries 4、MaxSessions 10、AllowGroups sshusers admins,限制 Ciphers、MACs、KexAlgorithms 为现代算法,LogLevel VERBOSE,并通过 ClientAliveInterval 300 与 ClientAliveCountMax 3 设置空闲超时。重启前务必 sudo sshd -t 校验配置,重启后从新会话验证,确认前不要关闭现有 SSH 会话——损坏的 sshd 配置可能导致永久无法登录服务器。

管理磁盘空间

使用 df -hT 查看概览,du -h --max-depth=2 /var | sort -rh | head -10 查找大目录,find /var -type f -size +100M 查找大文件,journalctl --disk-usage 检查日志大小并用 --vacuum-size 或 --vacuum-time 截断。自定义日志轮转置于 /etc/logrotate.d/myapp,用 logrotate --debug 测试配置,logrotate --force 强制执行。

监控进程

使用 top -b -n 1 -o %CPU(批处理模式)或 htop(交互式);用 lsof -p 查看打开文件与网络连接,lsof -i :8080 查看端口占用;用 strace 追踪系统调用(-e trace=network 只看网络,-c 统计频率);通过 /proc/"$pid"/status 与 smaps_rollup 检查内存;用 ps aux | awk '$8 == "Z"' 检查僵尸进程;用 kill -TERM -PGID 杀死整个进程树。

常见问题与注意事项

  • set -e 在条件句中会静默吞掉退出码:if cmd; then 或 cmd || true 会绕过 set -e,若条件句内的关键命令失败需被检测,应显式检查退出码(rc=$?; if [[ $rc -ne 0 ]]; then)。
  • 重启 sshd 时配置无效会导致锁死:务必先 sshd -t 校验,重启后从新终端验证再关闭旧会话。
  • iptables 规则默认不跨重启持久化:需 iptables-save > /etc/iptables/rules.v4 并安装 iptables-persistent,或使用自动处理持久化的 ufw。
  • systemd 的 After= 仅排序、不是依赖:After=network.target 不保证网络已起,需要真实网络连接的服务应使用 After=network-online.target 搭配 Wants=network-online.target。
  • 删除文件被进程持有句柄时 du 与 df 不一致:用 lsof +L1 找到占用进程并重启或发信号释放句柄。

限制与参考

该技能在首次激活时会检查已安装的配套技能(通过 ls 查找多个 skills 目录),并与 frontmatter 中的 recommended_skills 字段比对,缺失时提示安装(npx skills add AbsolutelySkilled/AbsolutelySkilled --skill <name>),recommended_skills 为空或已全部安装时跳过。具体安全域与网络防火墙的详细指南存于 references/ 文件夹,仅在任务需要时加载以减少上下文消耗。