ฉันจะเขียนได้อย่างไร งานที่ต้องทำเพื่อเรียกใช้สคริปต์ 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 }}
?
อัปเดต: เดอะ กลายเป็น
ฟังก์ชันการทำงานดูเหมือนจะทำงานได้อย่างถูกต้องในขณะนี้