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.5 在 tickets.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;
如果安装完成后不需要结构变更,可以进一步收紧权限,但升级时可能需要 ALTER、CREATE。
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 后面,这是最有效、最直接的安全措施。