温馨提示×

debian 定时器怎么设置安全策略

小樊
38
2025-12-28 13:18:01
栏目: 智能运维

Debian 定时器安全策略

一 权限与身份

  • 坚持最小权限:能用普通用户就不用 root;为任务创建专用系统用户(如 cronuser),并在 systemd 单元中用 User=Group= 指定运行身份。
  • 文件与目录权限:系统级 /etc/crontab/etc/cron.d/ 仅允许 root 编辑;脚本建议 chmod 700,仅属主可读执行;systemd 单元文件建议 644,属主 root
  • 一次性任务管控:如需 at,通过 /etc/at.allow/etc/at.deny 白名单/黑名单控制可使用用户。
  • 提权最小化:若必须提权,使用 sudoers 仅授权具体命令,避免在脚本内交互输入密码。

二 定时器的选择与配置

  • 优先选用 systemd 定时器(.timer + .service 拆分),具备依赖管理、日志集成与资源限制等优势。
  • 关键安全指令示例:
    • 超时控制:OnFailure=, OnTimeoutSec=30min,防止任务失控。
    • 失败重试:Restart=on-failure, RestartSec=5,提升容错。
    • 资源限制:CPUQuota=, MemoryLimit=, LimitCPU=, LimitMEMORY=,避免单个任务拖垮系统。
    • 依赖与环境:使用 After=network.target 等确保依赖就绪;在单元中用 Environment=PATH=… 固定环境,脚本内使用绝对路径调用命令。

三 日志与监控

  • 日志可追溯:
    • Cron 默认写入 /var/log/syslog,可用 grep CRON /var/log/syslog 查看。
    • systemd 使用 journalctl -u my-service.timer -f 实时查看定时器与任务日志。
  • 输出与告警:将任务 stdout/stderr 重定向到专用日志或经 logger 写入系统日志;结合关键字(如 error/failed)设置监控告警。

四 加固清单与快速示例

  • 加固清单

    • 定期审计:例行执行 crontab -l、审查 /etc/cron.d/ 与 systemd 单元;必要时备份配置。
    • 输入与脚本安全:不在定时任务中拼接未过滤输入;脚本需安全审查与签名校验,避免泄露凭据。
    • 系统加固:启用 自动安全更新(unattended-upgrades),保持 Debian 与软件包为最新。
    • 运行时隔离:为任务设置专用用户资源配额;必要时结合 AppArmor/SELinux 做强制访问控制。
  • 快速示例

    • systemd 定时器(推荐):创建最小权限任务并限制资源与超时
      1. 服务单元 /etc/systemd/system/backup.service
        [Unit]
        Description=安全备份任务
        After=network.target
        
        [Service]
        Type=oneshot
        User=backup
        Group=backup
        ExecStart=/usr/local/bin/do_backup.sh
        StandardOutput=journal
        StandardError=journal
        Environment="PATH=/usr/local/bin:/usr/bin:/bin"
        Restart=on-failure
        RestartSec=5
        CPUQuota=50%
        MemoryLimit=256M
        TimeoutStartSec=30min
        
      2. 定时器单元 /etc/systemd/system/backup.timer
        [Unit]
        Description=每天 02:00 执行备份
        
        [Timer]
        OnCalendar=daily
        Persistent=true
        
        [Install]
        WantedBy=timers.target
        
      3. 启用
        systemctl daemon-reload
        systemctl enable --now backup.timer
        journalctl -u backup.timer -f
        
    • Cron 最小加固示例(如必须使用 cron)
      # /etc/cron.d/backup
      SHELL=/bin/bash
      PATH=/usr/local/bin:/usr/bin:/bin
      0 2 * * * backup /usr/local/bin/do_backup.sh >> /var/log/backup.log 2>&1
      # 权限建议:chmod 600 /etc/cron.d/backup;脚本 chmod 700
      

0