- 首页 >
- 问答 >
-
智能运维 >
- Ubuntu Informix如何进行权限控制
Ubuntu Informix如何进行权限控制
小樊
47
2025-11-23 10:45:01
Ubuntu 上 Informix 权限控制实践
一 权限控制分层与总体思路
- 在 Ubuntu 上,Informix 的权限控制通常分为两层:
- 操作系统层:确保 informix 运行账户、目录与文件的权限正确,避免“公共可写”等不安全状态,服务才能正常启动与安全运行。
- 数据库层:使用 数据库内部用户 或 操作系统用户映射 进行认证,并通过 GRANT/REVOKE 在数据库、表、列、角色等粒度上授权与回收权限。自 Informix 11.7 起支持非操作系统用户(NON-OS)及用户映射,便于集中账号管理与最小权限分配。
二 操作系统层安全与目录权限
- 运行账户与目录属主
- 使用专用系统账户(如 informix)运行数据库,避免以 root 直接运行。
- 将安装目录(如 /opt/informix)及子目录属主统一为 informix:informix,并设置安全权限,避免“其他用户可写”。
- 示例:
- sudo chown -R informix:informix /opt/informix
- sudo chmod -R 755 /opt/informix
- 关键目录的权限要求
- 实例目录若含“public write”会被判定为不安全(如权限 0777),应改为更严格权限(如 0755/0700)。
- 临时目录(如 /opt/informix/tmp)通常需要 770,否则可能报 “too secure” 无法创建临时文件。
- 示例:
- sudo chmod 770 /opt/informix/tmp
- 资源与稳定性(与安全间接相关)
- 通过 ulimit 与 /etc/security/limits.conf 为 informix 用户设置文件描述符上限,避免因资源限制导致服务异常。
- 示例:
- ulimit -n 4096
- 在 /etc/security/limits.conf 增加:informix soft nofile 4096;informix hard nofile 8192
- 说明
- 以上目录权限与资源限制是 Informix 在 Ubuntu 上稳定运行与通过安全校验的基础,错误的权限会直接导致实例初始化或运行失败。
三 数据库层认证与授权
- 认证方式
- 操作系统用户认证:直接使用服务器上已存在的 OS 用户 连接数据库(传统方式)。
- 非操作系统用户映射(NON-OS,自 11.7 起):通过用户映射减少系统账号数量,便于细粒度授权与审计。
- 配置 /etc/informix/allowed.surrogates:USERS:daemon
- 启用映射:onmode -wf USERMAPPING=ADMIN
- 加载缓存:onmode -cache surrogates
- 创建默认用户:CREATE DEFAULT USER WITH PROPERTIES USER daemon HOME “/home/gbase8t/users”;
- 创建数据库用户:CREATE USER ifxuser WITH PASSWORD ‘ifxuser’;
- 授权与回收(最小权限原则)
- 数据库级权限:CONNECT / RESOURCE / DBA
- 示例:GRANT CONNECT TO app_user;(仅连接与基础 DML)
- 表/列级权限:SELECT / INSERT / UPDATE / DELETE / REFERENCES / INDEX / ALTER / ALL
- 示例:GRANT SELECT, INSERT, UPDATE ON sales.orders TO app_user;
- 角色与批量授权
- 示例:
- CREATE ROLE sales_role;
- GRANT SELECT, INSERT, UPDATE, DELETE ON sales.* TO sales_role;
- GRANT sales_role TO app_user;
- 回收权限
- 示例:REVOKE SELECT, INSERT ON sales.orders FROM app_user;
- 慎用 PUBLIC:如非必要,避免 GRANT … TO PUBLIC,防止权限过度扩散。
- 密码与账户维护
- 使用 onspassword 修改数据库用户口令(需具备相应权限):
- onspassword -u username -p newpassword
- 权限查询
- 查询用户/权限信息可查询系统表(如 sysusers 等),结合业务审计定期核查高权限账户与 PUBLIC 授权。
四 快速上手示例
- 场景:为应用创建只读账号,仅能访问 sales 库下的 orders 表。
- 步骤
- 以 informix 用户登录并连接目标库(如 dbaccess sales -)。
- 创建数据库用户
- CREATE USER app_read IDENTIFIED BY ‘StrongPass!’;
- 授予最小权限
- GRANT CONNECT TO app_read;
- GRANT SELECT ON sales.orders TO app_read;
- 如采用 NON-OS 用户映射(可选)
- 按“认证方式”章节完成 allowed.surrogates、USERMAPPING 与缓存加载后,再创建用户与授权。
- 验证
- 以 app_read 连接并仅执行查询;尝试 INSERT/UPDATE 应被拒绝。
- 审计与复核
- 定期核查 sysusers 与相关系统表,确保无过度授权与 PUBLIC 授权滥用。
五 常见问题与排查要点
- 启动时报 “permissions 0777 include public write access”
- 说明目录存在“公共可写”,需改为 0755/0700 等更严格权限,并确保属主为 informix:informix。
- 报 “directory …/tmp is too secure (has mode 755, needs 770)”
- 将临时目录权限设为 770,保证实例进程可创建临时文件。
- 连接或初始化失败伴随 “path is not trusted”
- 检查目录权限与属主,移除“其他用户可写”,确保仅 informix 组/用户具备必要权限。