温馨提示×

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.confinformix 用户设置文件描述符上限,避免因资源限制导致服务异常。
    • 示例:
      • 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 表。
  • 步骤
    1. informix 用户登录并连接目标库(如 dbaccess sales -)。
    2. 创建数据库用户
      • CREATE USER app_read IDENTIFIED BY ‘StrongPass!’;
    3. 授予最小权限
      • GRANT CONNECT TO app_read;
      • GRANT SELECT ON sales.orders TO app_read;
    4. 如采用 NON-OS 用户映射(可选)
      • 按“认证方式”章节完成 allowed.surrogates、USERMAPPING 与缓存加载后,再创建用户与授权。
    5. 验证
      • 以 app_read 连接并仅执行查询;尝试 INSERT/UPDATE 应被拒绝。
    6. 审计与复核
      • 定期核查 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 组/用户具备必要权限。

0