如何禁止CKAN run命令启动时自动创建默认sysadmin用户
禁用CKAN默认sysadmin用户自动创建的可行方案
CKAN执行ckan run启动开发服务器时自动创建default系统管理员的逻辑,是内置的开发环境便利功能,触发前提是启动时检测到数据库内不存在任何拥有sysadmin权限的用户,可按以下方案处理:
- 优先方案:生产环境不要使用
ckan run启动服务ckan run调用的是Flask内置的单线程开发服务器,本身性能、安全性都达不到生产要求,只适合本地开发调试使用。你当前加载的是production.ini生产配置文件,应该换用Gunicorn、uWSGI这类生产级WSGI服务器托管CKAN服务,这类启动方式根本不会触发默认用户的自动创建逻辑,从根源上规避问题,也符合CKAN官方的生产部署规范。 - 临时调试场景:提前确认库内存在有效sysadmin账户
如果你只是临时用ckan run做调试,只要保证数据库里至少留存一个自己创建的有效sysadmin用户,就不会触发default用户的创建。不少人遇到删除default用户后重启又被重建的情况,本质是自己创建的管理员账户没有成功赋予sysadmin权限,启动时检测不到合法管理员才触发了重建逻辑。
执行以下命令可以检查当前实例下的所有sysadmin账户:
只要返回的列表里能看到你自己创建的专属管理员账户,再执行启动命令就不会生成default用户:ckan -c /etc/ckan/production.ini sysadmin listckan -c /etc/ckan/production.ini run --host 0.0.0.0 --port 5000 - 强定制方案(极度不推荐):修改源码屏蔽自动创建逻辑
如果你有特殊需求必须用ckan run启动,同时不想提前创建sysadmin,可以找到CKAN安装路径下的ckan/cli/run.py文件,注释掉启动时检查sysadmin、创建default用户的对应代码段即可。但这个方法会改动CKAN核心源码,后续版本升级时修改会被直接覆盖,维护成本极高,非极端必要不要使用。
安全提示:自动生成的
default用户默认密码和用户名一致,若服务暴露在公网会造成严重的未授权访问风险,生产环境禁止保留该默认账户,也禁止长期使用开发服务器对外提供服务。
内容的提问来源于stack exchange,提问作者javicond3
相关产品推荐
相关产品推荐

