ฉันจะเขียนได้อย่างไร งานที่ต้องทำเพื่อเรียกใช้สคริปต์ PHP ในฐานะผู้ใช้รายที่สาม; ไม่ใช่ผู้ใช้รูทและไม่ใช่ผู้ใช้ที่เชื่อมต่อ แต่เป็นผู้ใช้ âwebserverâ?
โปรแกรมการดูแลระบบ NextCloud occตามเอกสาร ต้องเรียกใช้ในฐานะผู้ใช้เว็บเซิร์ฟเวอร์:
sudo -u www-data php occ
ในการเป็นผู้ใช้รายอื่นสำหรับการเรียกใช้คำสั่ง Ansible จะจัดเตรียม กลายเป็น คุณสมบัติ. เอกสาร Ansible อย่างเข้มงวด ไม่แนะนำให้พยายามเรียกใช้คำสั่งในฐานะผู้ใช้อื่นที่ไม่ใช่รูท:
ทุกอย่างเรียบร้อยดีหากไฟล์โมดูลถูกเรียกใช้งานโดยไม่ใช้ กลายเป็น, เมื่อ กลายเป็น_ผู้ใช้ เป็นรูท หรือเมื่อทำการเชื่อมต่อกับเครื่องระยะไกลเป็นรูท ในกรณีเหล่านี้ Ansible จะสร้างไฟล์โมดูลด้วยสิทธิ์ที่อนุญาตเฉพาะการอ่านโดยผู้ใช้และรูท หรืออนุญาตเฉพาะการอ่านโดยผู้ใช้ที่ไม่มีสิทธิ์เท่านั้นที่เปลี่ยนไปใช้
อย่างไรก็ตาม เมื่อทั้งผู้ใช้การเชื่อมต่อและ กลายเป็น_ผู้ใช้ ไม่มีสิทธิ์ ไฟล์โมดูลถูกเขียนเป็นผู้ใช้ที่ Ansible เชื่อมต่อเป็น (ไฟล์ ผู้ใช้ระยะไกล) แต่ไฟล์จำเป็นต้องอ่านได้โดยผู้ใช้ Ansible จึงถูกกำหนดให้เป็น
โดยใช้ กลายเป็น_ผู้ใช้ ให้กับผู้ใช้นั้น
ผู้ใช้การเชื่อมต่อมี ซูโด การอนุญาตให้เรียกใช้คำสั่งในฐานะผู้ใช้ที่สาม:
$ sudo -u www-ข้อมูล whoami
www-ข้อมูล
เมื่อฉันใช้ กลายเป็น_ผู้ใช้ ในงาน เพื่อรันคำสั่งในฐานะผู้ใช้นั้น:
- ชื่อ: "NextCloud: การกำหนดค่าอินสแตนซ์"
  กลายเป็น_ผู้ใช้: "{{ web_process_user }}"
  สั่งการ:
    ซม.: >-
        การบำรุงรักษา php "{{ apache_nextcloud_dir }}/occ":ติดตั้ง
            --ไม่มีปฏิสัมพันธ์
            ¦
อัปเดต: อืม มันได้ผล ฉันไม่รู้ว่ามีอะไรเปลี่ยนแปลง แต่ในการพยายามทำให้เกิดปัญหาอีกครั้ง มันก็หยุดลง
โดยใช้ เปลือก ด้วยความชัดเจน ซูโด การเรียกใช้ในฐานะผู้ใช้นั้น
เมื่อฉันกำหนดค่างาน Ansible ด้วย a เปลือก สั่งการ:
เชลล์: >-
    su '{{ web_process_user }}' --shell '/bin/bash' -c ' \
        php "{{ apache_nextcloud_dir }}/occ" â¦
Ansible บ่น:
[คำเตือน]: พิจารณาใช้ 'become', 'become_method' และ 'become_user' แทนการใช้ su
ฉันชอบที่จะทำอย่างนั้น ของแอนซิเบิ้ล กลายเป็น จะเป็นทางที่สละสลวยกว่านี้มาก เปลือก: ซู สับ.
แต่เมื่อใช้ กลายเป็นปัญหาที่อธิบายไว้ในเอกสารประกอบ Ansible เกิดขึ้น: โมดูลงานที่ส่งผ่านการเชื่อมต่อสำหรับการเรียกใช้คำสั่งนั้น ไม่ได้รับสิทธิ์ในการสร้างไฟล์ชั่วคราว
เอกสาร Ansible แนะนำให้:
- âใช้การวางท่อâ: ซึ่งสูญเสียข้อดีของระบบโมดูลงานเริ่มต้น
 
- âหลีกเลี่ยงการเป็นผู้ใช้ที่ไม่มีสิทธิพิเศษâ: ไม่ใช่ตัวเลือก เนื่องจาก
ผู้ใช้เว็บเซิร์ฟเวอร์ที่ไม่มีสิทธิพิเศษจำเป็นสำหรับการเรียกใช้คำสั่งนี้
อย่างถูกต้อง
 
ฉันควรทำอย่างไร สร้างงาน Ansible ที่วิ่ง php "{{ apache_nextcloud_dir }}/occ" ในฐานะผู้ใช้ที่สามที่ไม่มีสิทธิพิเศษ {{ web_process_user }}?
อัปเดต: เดอะ กลายเป็น ฟังก์ชันการทำงานดูเหมือนจะทำงานได้อย่างถูกต้องในขณะนี้