无法让属于“用户”组的用户访问(至少阅读)项目。我已经阅读并尝试了我在互联网上找到的几个例子,似乎没有一个工作。

我现在需要的是:允许属于“用户”组的任何用户读取名为 MYPROJECT 的项目。我有这个,保存在/etc/rundeck 下名为 user.aclpolicy 的文件中。我已经等了 60+ 秒。我也试过重新启动 RunDeck。没有运气。

我不断得到:


description: application access to a project
  application: 'rundeck'
for:
  resource:
    - equals:
        kind: project
      deny: [create] # deny create of projects
    - equals:
        kind: system
      allow: [read] # allow read of system info
    - equals:
        kind: user
      deny: [admin] # allow modify user profiles
  project:
    - equals:
        name: 'MYPROJECT'
      allow: [read] # allow access
      deny: [import,export,configure,delete] # deny admin actions
  storage:
    - deny: [read,create,update,delete] # allow access for /keys/* storage content
by:
  group: user

上面的 YAML 有什么问题?我还检查了/var/lib/rundeck/exp/webapp/WEB-INF 下的 web.xml 以确保在那里注册了角色名称“用户”。

我的 realm.properties 包含这一行:
raka:greentooth60,user

我也试过这个。基本上复制“管理员”组的任何内容。为此,我还尝试将其直接放在 admin.aclpolicy 而不是单独的文件中。仍然没有运气。
description: User, all access.
context:
  project: '.*' # all projects
for:
  resource:
    - allow: '*' # allow read/create all kinds
  adhoc:
    - allow: '*' # allow read/running/killing adhoc jobs
  job:
    - allow: '*' # allow read/write/delete/run/kill of all jobs
  node:
    - allow: '*' # allow read/run for all nodes
by:
  group: user

RunDeck 版本:Rundeck 2.6.9-1 cafe bonbon indigo Tower 2016-08-03

这是 RunDeck (.deb) 的 debian 安装。我可以查看哪些日志文件来分析此类情况?

谢谢,
拉卡

最佳答案

RunDeck ACL可能违反直觉,并且需要一些时间才能习惯。为了获得可见性,尤其是在开始编写RunDeck ACL策略时,最好仅设置允许用户执行的操作,而不是拒绝访问。默认情况下,不允许任何内容,因此您只需要添加 allow 语句即可让用户访问资源。

RunDeck 需要“应用程序”上下文和“项目”上下文的 ACL 策略。您在应用程序上下文中指定对项目的 read 访问权限,并在项目上下文中按名称(在您的情况下 .* )访问所有作业,但您还需要授予对 read 资源类型 job 的访问权限,以便作业可见。请参阅下面的示例。

有用的日志

对于RunDeck的故障排除,我发现以下日志很有用:

tail -f /var/log/rundeck/{rundeck.log,service.log}

测试 ACL 策略

如果要针对 ACL 文件测试特定用户操作,可以使用与 RunDeck 一起安装的工具 rd-acl。例如,要测试 user 组的成员是否可以读取项目 restart some server 中的作业 MYPROJECT ,您可以执行以下操作:
rd-acl test -p 'MYPROJECT' -g user -c project -j 'restart some server' -a read

有关更多详细信息,请参阅 rd-acl manual

只读 ACL 示例

这是一个示例(在 Rundeck 2.6.9-1 上测试),它应该授予“用户”组中的任何人读取 RunDeck 服务器上所有内容的权限:
context:
  application: rundeck
description: "normal users will only have read permissions"
for:
  project:
    - match:
        name: '.*'
      allow: [read]
  system:
    - match:
        name: '.*'
      allow: [read]
by:
  group: user

---

context:
  project: '.*'
description: "normal users will only have read permissions"
for:
  resource:
    - equals:
        kind: 'node'
      allow: [read,refresh]
    - equals:
        kind: 'job'
      allow: [read]
    - equals:
        kind: 'event'
      allow: [read]
  job:
    - match:
        name: '.*'
      allow: [read]
  node:
    - match:
        nodename: '.*'
      allow: [read,refresh]
by:
  group: user

关于acl - RunDeck/ACL/自定义/用于非管理员组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40322365/

10-09 02:56