无法通过 external_auth SaltStack 通过位置参数限制 API 访问

问题描述 投票:0回答:2

我试图通过 pam 模块限制对特定 SLS 文件的调用

state.apply

external_auth:
  pam:
    myuser:
      - '@runner':
        - jobs.list_job
      - '*':
        - test.ping
        - 'state.apply':
          args:
           - 'path/to/sls'

当我通过 CherryPy API 调用 API 时,我得到 401。

curl http://sat_master/run -H 'content-type: application/json' \
-d [{"tgt":"target","arg":["path/to/sls"],"kwarg":{"pillar":{"foo1":"bar1","foo2":"bar2"}},"client":"local_async","fun":"state.apply","username":"myuser","password":"<passwrod>","eauth":"pam"}]

我也尝试过:

external_auth:
  pam:
    myuser:
      - '@runner':
        - jobs.list_job
      - '*':
        - test.ping
        - 'state.apply':
          args:
           - '.*'

external_auth:
  pam:
    myuser:
      - '@runner':
        - jobs.list_job
      - '*':
        - test.ping
        - 'state.apply':
          args:
           - '.*'
          kwargs:
           '.*' : '.*'

如果我不指定

args
,它会起作用:

external_auth:
  pam:
    myuser:
      - '@runner':
        - jobs.list_job
      - '*':
        - test.ping
        - state.apply

如何正确做?

cherrypy salt-stack
2个回答
1
投票

args
字段应该是函数对象的字段。 IE。 :

错误

'*':
  - state.apply:
    args:
     - 'path/to/sls'

JSON 等价物

{
  "*": [
    {
      "state.apply": null,
      "args": [
        "path/to/sls"
      ]
    }
  ]
}

'*':
  - state.apply:
      args:
        - 'path/to/sls'

JSON 等价物

{
  "*": [
    {
      "state.apply": {
        "args": [
          "path/to/sls"
        ]
      }
    }
  ]
}

0
投票

原因在于我们传递值或创建限制的方式。

例如,如果您需要为 cmd.run 创建限制并仅允许具有此参数的函数

arg:"shell=powershell"
arg:"[System.Convert]::ToBase64String($pwd.path)"

这就是我在 .conf 中需要的

对 yourUser 的限制,在所有目标中 - '*' 只允许 cmd.run 如果参数是 #1 shell=powershell 并且第二个值是技巧,这是一个接受值 [System.Convert] 的 redex 函数::ToBase64String($pwd.path)

如果我限制使用失败的值,则需要传递正则表达式 这是测试正则表达式的好工具 https://regex101.com/

external_auth:
  pam:
    yourUSer:
      - '*':
        - cmd.run:
            args:
              - 'shell=powershell'
              - '\[System\.Convert\]::ToBase64String\(\$pwd\.path\)'
curl --location 'https://master:8000' \
--header 'X-Auth-Token: YOURTOKE' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client=local' \
--data-urlencode 'tgt=targetID' \
--data-urlencode 'fun=cmd.run' \
--data-urlencode 'arg=shell=powershell' \
--data-urlencode 'arg=[System.Convert]::ToBase64String($pwd.path)'

© www.soinside.com 2019 - 2024. All rights reserved.