AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1068972
Accepted
bignose
bignose
Asked: 2021-07-09 00:12:00 +0800 CST2021-07-09 00:12:00 +0800 CST 2021-07-09 00:12:00 +0800 CST

在 Ansible 连接上以网络服务器用户身份运行 NextCloud PHP 脚本“occ”

  • 772

如何编写Ansible 任务以作为第三用户运行 PHP 脚本;不是root用户也不是连接用户,而是“webserver”用户?

occ根据文档,NextCloud 管理程序必须以网络服务器用户身份运行:

sudo -u www-data php occ

为了成为运行命令的不同用户,Ansible 提供了该become功能。Ansible 文档强烈建议不要尝试以不同的非 root 用户身份运行命令:

如果模块文件在不使用的情况下执行,则一切都很好become,当become_user是 root 时,或者当与远程计算机的连接以 root 身份建立时。在这些情况下,Ansible 创建的模块文件的权限只允许用户和 root 读取,或者只允许切换到的非特权用户读取。

但是,当连接用户和become_user都是非特权用户时,模块文件被写入为 Ansible 连接的用户 (the remote_user),但该文件需要被 Ansible 设置为的用户可读。

用于become_user该用户

连接用户sudo有权作为第三个用户运行命令:

$ sudo -u www-data whoami
www-data

当我become_user在任务上使用时,以该用户身份运行命令:

- name: "NextCloud: Instance configuration"
  become_user: "{{ web_process_user }}"
  command:
    cmd: >-
        php "{{ apache_nextcloud_dir }}/occ" maintenance:install
            --no-interaction
            …

更新:嗯,它有效。我不知道发生了什么变化,但在尝试重现问题时,它停止了。

作为该用户使用shell显式sudo调用

当我使用命令配置 Ansible 任务时shell:

shell: >-
    su '{{ web_process_user }}' --shell '/bin/bash' -c ' \
        php "{{ apache_nextcloud_dir }}/occ" …

Ansible 抱怨:

[警告]:考虑使用 'become'、'become_method' 和 'become_user' 而不是运行 su

我很乐意这样做。Ansiblebecome将是一种比这种shell: suhack 更优雅的方式。

但是在使用 时become,会出现 Ansible 文档中描述的问题:通过连接发送的用于运行该命令的任务模块,无法获得创建其临时文件的权限。

Ansible 文档建议:

  • “使用流水线”:这失去了默认任务模块系统的优势。
  • “避免成为非特权用户”:不是一个选项,因为正确运行此命令需要非特权网络服务器用户。

我应该如何制作一个以非特权第三用户身份运行的 Ansible 任务?php "{{ apache_nextcloud_dir }}/occ" {{ web_process_user }}

更新:该become功能现在似乎可以正常工作。

nextcloud ansible
  • 1 1 个回答
  • 320 Views

1 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2021-07-09T07:15:10+08:002021-07-09T07:15:10+08:00

    我知道有两种方法可以处理这个问题。您已经知道的第一个,但似乎被文档吓跑了。但是,文档会准确地告诉您需要做什么才能使其正常工作,因此如果第一次没有成功,您应该仔细阅读。

    所以你需要做两件事:

    1. 设置become_user为非特权用户(此处为www-data)。这将导致ansible sudo 到该用户而不是root。

    2. 配置sudoers为允许您的remote_userto 。例如,如果您是:sudowww-dataremote_useransible

      ansible ALL=(www-data) NOPASSWD:ALL
      

      请注意,这可能是可选的,因为通常已经配置 sudo 以允许 ansible 用户对任何用户进行 sudo,例如:

      ansible ALL=(ALL) NOPASSWD:ALL
      

      或者把它放在一个已经可以做到这一点的组中。


    第二种方法是让 Ansible 作为所需用户(此处为www-data)而不是sudo 直接连接到远程系统。您可以按如下方式执行此操作:

    1. 将 Ansible 的 ssh 公钥添加到远程用户的.ssh/authorized_keys.

    2. 为需要以该用户身份运行的任务、块、剧本、角色等设置remote_user=www-data和。become=no

    • 0

相关问题

  • nextcloud - 服务器配置拒绝客户端:/usr/share/nextcloud

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve