不灭的焱

革命尚未成功,同志仍须努力 下载Java21

作者:AlbertWen  添加时间:2026-06-22 12:15:20  修改时间:2026-06-29 06:29:01  分类:04.运维体系  编辑

osTicket 上线生产环境,建议至少做下面这些安全设置。你可以把它当成一份 上线安全检查清单

一、安装后必须立刻处理

1. 删除 setup 安装目录

安装完成后,必须删除:

rm -rf /path/to/osticket/setup

例如:

rm -rf /www/wwwroot/helpdesk/upload/setup

osTicket 安装后如果检测到 setup 目录存在,会提示为了安全原因删除安装目录。官方论坛也长期强调安装/升级后要删除 setup 目录。(forum.osticket.com)

2. 锁定 ost-config.php 权限

配置文件位置一般是:

/path/to/osticket/include/ost-config.php

设置为不可写:

chmod 644 /path/to/osticket/include/ost-config.php

更严格一点可以:

chmod 640 /path/to/osticket/include/ost-config.php

如果你的 Web 用户是 www

chown root:www /path/to/osticket/include/ost-config.php
chmod 640 /path/to/osticket/include/ost-config.php

安装阶段 osTicket 需要写入 ost-config.php,安装完成后应移除写权限;官方安装文档也明确提到安装器需要写入 include/ost-config.php。(docs.osticket.com)

3. 不要把 osTicket 目录设成 777

很多人为了图省事会这样做:

chmod -R 777 /www/wwwroot/helpdesk

这个非常危险。

建议:

find /www/wwwroot/helpdesk -type d -exec chmod 755 {} \;
find /www/wwwroot/helpdesk -type f -exec chmod 644 {} \;

对确实需要写入的目录单独授权,例如附件目录、缓存目录。

二、版本安全:必须保持最新版

目前已经有多个 osTicket 相关漏洞记录。例如 NVD 记录显示,osTicket 1.18.x 低于 1.18.3、1.17.x 低于 1.17.7 存在任意文件读取漏洞,攻击者可通过工单 PDF 导出相关链路读取服务器敏感文件。(NVD)

另外,NVD 也记录了 osTicket <= 1.17.5tickets.php 搜索功能中存在 SQL 注入漏洞,认证用户可通过特定参数组合触发。(NVD)

所以建议:

生产环境建议版本:
osTicket 1.18.3 或更新版本
PHP 8.2 / 8.3 / 8.4
MySQL 5.7 / 8.0

升级策略:

1. 先备份数据库
2. 备份整个 osTicket 目录
3. 测试环境升级验证
4. 再生产环境升级
5. 升级后删除 setup 目录
6. 检查 ost-config.php 权限

三、Web 服务器安全设置

1. 强制 HTTPS

工单系统里会有员工信息、客户问题、附件、账号密码线索、服务器截图等敏感内容,必须启用 HTTPS。

Nginx 示例:

server {
    listen 80;
    server_name helpdesk.example.com;
    return 301 https://$host$request_uri;
}

HTTPS 站点里增加:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

2. 禁止访问敏感目录和文件

Nginx 建议加:

location ~* /(include|setup|scp/include|api/include)/ {
    deny all;
}

location ~* \.(sql|bak|old|backup|zip|tar|gz|rar|7z|log|ini|env|conf)$ {
    deny all;
}

location ~* /(ost-config\.php|\.git|\.svn|\.env) {
    deny all;
}

如果你部署在子目录,例如:

https://example.com/osticket/

也要确保对应 location 生效。

3. 后台路径限制访问

osTicket 员工后台默认路径一般是:

/scp/

建议至少做一层限制。

方案 A:只允许公司 IP 访问后台

location ^~ /scp/ {
    allow 你的公司出口IP;
    deny all;

    try_files $uri $uri/ /scp/index.php?$query_string;
}

如果你们有 VPN,可以要求运维人员先连 VPN,再访问后台。

方案 B:加一层 Basic Auth

location ^~ /scp/ {
    auth_basic "Restricted";
    auth_basic_user_file /www/server/pass/.osticket_scp;

    try_files $uri $uri/ /scp/index.php?$query_string;
}

四、PHP 安全设置

编辑对应 PHP 版本的 php.ini

1. 关闭危险函数

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source

注意:不要盲目关闭太多函数,避免影响插件或邮件功能。生产环境建议先在测试环境验证。

2. 关闭错误显示

display_errors = Off
log_errors = On
error_log = /var/log/php/osticket_error.log

否则 PHP 报错可能暴露服务器路径、SQL 信息、配置路径。

3. 限制上传大小

upload_max_filesize = 20M
post_max_size = 25M
max_file_uploads = 10

同时在 osTicket 后台设置附件大小限制。osTicket 后台有工单附件设置,官方论坛也提到需要检查 Admin Panel → Settings → Tickets → Ticket Attachment Settings → Maximum File Size。(forum.osticket.com)

4. 设置会话 Cookie 安全参数

session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
session.cookie_samesite = Lax

如果你强制 HTTPS,session.cookie_secure = 1 应开启。

五、osTicket 后台安全设置

进入:

Admin Panel

重点检查这些位置。

1. 开启员工 2FA

建议安装并启用官方 2FA 插件:

Admin Panel → Manage → Plugins

osTicket 官方文档说明,Two Factor Authentication 插件可以让 Agent 使用手机认证器 App 生成 6 位验证码完成登录。(docs.osticket.com)

建议策略:

管理员:必须开启 2FA
运维人员:必须开启 2FA
普通处理人员:建议开启 2FA
外部用户:如需 2FA,可考虑 OAuth2 登录方案

2. 启用密码策略插件

建议启用:

Password Management Policies

官方文档说明该插件允许管理员为 Agents 和 Users 强制设置自定义密码要求。(docs.osticket.com)

推荐密码策略:

最小长度:12 位
必须包含:大小写字母、数字、特殊字符
禁止使用弱密码
密码有效期:90 - 180 天
连续输错锁定:5 次
锁定时间:15 - 30 分钟

3. 最小权限分配

不要所有人都给管理员权限。

建议角色划分:

角色 权限建议
超级管理员 只给 1 - 2 人
系统管理员 负责系统配置、插件、邮件
运维处理人 只能处理所属部门/团队工单
普通员工 只能提交和查看自己的工单
外部用户 严格限制可见范围

原则:

能不给管理员权限,就不给管理员权限。
能按部门隔离,就不要全局可见。
能只读,就不要给编辑。

4. 关闭不必要的注册入口

如果 osTicket 只给公司内部员工使用,建议:

关闭公开注册
关闭匿名提交,或限制为内部邮箱域名

更推荐:

只允许企业邮箱用户提交工单
只允许内网 / VPN / 企业微信入口访问

5. 限制 API Key

如果你启用了 osTicket API:

Admin Panel → Manage → API Keys

建议:

不用就关闭 API
API Key 只绑定固定服务器 IP
不要在前端页面暴露 API Key
定期轮换 API Key
删除无用 API Key

六、附件安全设置

osTicket 的附件通常包含截图、日志、Excel、合同、账号信息等,是高风险区域。

1. 限制允许上传的文件类型

建议允许:

jpg,jpeg,png,pdf,doc,docx,xls,xlsx,txt,log,zip

慎重允许:

html,js,php,exe,bat,sh,jar,war

建议禁止:

php,phtml,php5,phar,exe,bat,cmd,sh,js,html,svg

特别是:

php
phtml
phar

不要允许上传。

2. 附件目录不要放在 Web 可直接访问目录

如果你使用 “Attachments on the Filesystem” 插件,官方文档说明该插件可将附件存到文件系统目录,而不是数据库。(docs.osticket.com)

建议附件目录放到 Web 根目录外:

/data/osticket-attachments

不要放在:

/www/wwwroot/helpdesk/attachments

推荐权限:

mkdir -p /data/osticket-attachments
chown -R www:www /data/osticket-attachments
chmod -R 750 /data/osticket-attachments

如果必须放在 Web 目录内,Nginx 必须禁止直接访问:

location ^~ /attachments/ {
    deny all;
}

3. 增加病毒扫描

如果公司内部会上传大量附件,建议加:

ClamAV
文件类型检测
附件大小限制
压缩包深度限制

可落地方案:

上传附件 → osTicket 保存 → 定时任务扫描附件目录 → 发现风险文件 → 标记/隔离/通知管理员

七、数据库安全

1. 单独创建数据库账号

不要用 root 连接 osTicket。

CREATE DATABASE osticket DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'osticket_user'@'localhost' IDENTIFIED BY '强密码';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP
ON osticket.*
TO 'osticket_user'@'localhost';

FLUSH PRIVILEGES;

如果安装完成后不需要结构变更,可以进一步收紧权限,但升级时可能需要 ALTERCREATE

2. 数据库不要暴露公网

MySQL 只监听本机或内网:

bind-address = 127.0.0.1

或:

bind-address = 内网IP

防火墙禁止公网访问 3306。

3. 定期备份并加密

建议:

每日全量备份数据库
每日备份附件目录
保留 7 天日备份
保留 4 周周备份
保留 6 个月月备份
备份文件加密
异地保存一份

示例:

mysqldump -u osticket_user -p osticket > /backup/osticket_$(date +%F).sql
tar -czf /backup/osticket_files_$(date +%F).tar.gz /data/osticket-attachments

八、邮件安全

osTicket 可以通过 IMAP/POP3 拉取邮件并通过 SMTP 发送邮件,官方文档说明可以配置 IMAP/POP3 用于抓取邮箱并创建工单,也可以配置 SMTP 发送邮件。(docs.osticket.com)

建议:

IMAP/SMTP 使用 SSL/TLS
不要使用个人邮箱作为系统邮箱
使用专门的工单邮箱,如 support@company.com
邮箱密码定期更换
如果邮箱平台支持,使用应用专用密码
限制邮箱登录 IP
开启邮箱登录告警

建议邮箱:

it-helpdesk@company.com
support@company.com

不要用:

admin@company.com
boss@company.com
个人邮箱

九、日志与审计

建议记录并定期检查:

登录失败日志
管理员操作日志
工单删除日志
附件上传日志
API 调用日志
邮件拉取失败日志
异常 PHP 错误日志
Nginx 访问日志
Nginx 错误日志

重点关注:

大量登录失败
大量 404/403
访问 /setup/
访问 /include/
上传 .php/.phtml/.phar 文件
异常访问 /scp/
异常 PDF 导出请求

Nginx 日志位置常见:

/www/wwwlogs/helpdesk.log
/www/wwwlogs/helpdesk.error.log

十、防暴力破解

1. Nginx 限速

limit_req_zone $binary_remote_addr zone=osticket_login:10m rate=5r/m;

location ~* /(scp/login.php|login.php) {
    limit_req zone=osticket_login burst=10 nodelay;
    include fastcgi_params;
}

2. Fail2ban

可以监控 Nginx 日志,对反复登录失败或频繁扫描的 IP 封禁。

建议封禁策略:

5 分钟内失败 5 次 → 封禁 30 分钟
1 小时内触发多次 → 封禁 24 小时

十一、推荐的生产安全架构

如果是公司内部 IT 工单系统,我建议这样部署:

员工/用户
   ↓ HTTPS
Nginx
   ↓ PHP-FPM
osTicket
   ↓ 本机/内网
MySQL
   ↓
附件目录 /data/osticket-attachments

进一步加强:

/scp 后台只允许公司内网/VPN访问
数据库不开放公网
附件目录不暴露 Web 访问
每日自动备份
管理员开启 2FA
系统保持 1.18.3+

十二、最小落地版安全清单

你可以先把下面这些做掉:

[ ] 升级到 osTicket 1.18.3 或更新版本
[ ] 删除 setup 目录
[ ] ost-config.php 设置为 640 或 644
[ ] Web 目录不要 777
[ ] 强制 HTTPS
[ ] 禁止访问 include、setup、.git、备份文件
[ ] /scp 后台限制 IP 或 VPN 访问
[ ] 管理员开启 2FA
[ ] 启用密码策略插件
[ ] 关闭不必要的公开注册
[ ] 限制附件类型和大小
[ ] 附件目录放到 Web 根目录外
[ ] MySQL 不开放公网
[ ] osTicket 不使用 root 数据库账号
[ ] 配置每日数据库和附件备份
[ ] 开启 Nginx/PHP/osTicket 日志
[ ] 定期检查漏洞并升级

我给你的优先级是:

第一优先级:删除 setup、锁配置文件、升级版本、强制 HTTPS
第二优先级:后台 IP 限制、2FA、密码策略、附件限制
第三优先级:日志审计、备份、Fail2ban、病毒扫描

对于你们公司内部推广使用 osTicket,我建议把 /scp/ 后台访问放到 内网/VPN 后面,这是最有效、最直接的安全措施。