Score:1

เรียกใช้สคริปต์ NextCloud PHP âoccâ ในฐานะผู้ใช้เว็บเซิร์ฟเวอร์ บนการเชื่อมต่อแบบ Ansible

ธง co

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

อัปเดต: เดอะ กลายเป็น ฟังก์ชันการทำงานดูเหมือนจะทำงานได้อย่างถูกต้องในขณะนี้

solarchemist avatar
in flag
คุณสามารถหลีกเลี่ยงความยุ่งเหยิงทั้งหมดได้โดยตรวจสอบให้แน่ใจว่าได้ติดตั้ง `setfacl` บนเป้าหมายแล้ว (`apt install acl`) จากนั้นมันก็ใช้งานได้ อาจใช้งานไม่ได้กับโฮสต์ที่ใช้ระบบไฟล์โดยไม่รองรับ ACL แต่ฉันไม่เคยพบระบบดังกล่าวมาก่อน ดูส่วนนี้ในเอกสาร Ansible https://docs.ansible.com/ansible/latest/user_guide/become.html#risks-of-becoming-an-unprivileged-user
Score:0
ธง cz

มีสองวิธีที่ฉันรู้เพื่อจัดการกับปัญหานี้ สิ่งแรกที่คุณทราบอยู่แล้ว แต่ดูเหมือนว่าเอกสารประกอบจะไม่ได้สนใจสิ่งนี้ อย่างไรก็ตาม เอกสารจะบอกคุณอย่างชัดเจนว่าคุณต้องทำอะไรเพื่อให้มันใช้งานได้ ดังนั้นคุณควรอ่านอย่างละเอียดหากวิธีนี้ไม่สำเร็จในครั้งแรก

ดังนั้นคุณต้องทำสองสิ่ง:

  1. ชุด กลายเป็น_ผู้ใช้ ถึงผู้ใช้ที่ไม่มีสิทธิ์ (ที่นี่ www-ข้อมูล). การดำเนินการนี้จะทำให้ sudo ผู้ใช้นั้น ansible แทนที่จะเป็นรูท

  2. กำหนดค่า ซูโดเออร์ เพื่อให้คุณ ผู้ใช้ระยะไกล ถึง ซูโด ถึง www-ข้อมูล. ตัวอย่างเช่น หากคุณ ผู้ใช้ระยะไกล เป็น เข้าใจได้:

    ansible ALL=(www-data) NOPASSWD:ALL
    

    โปรดทราบว่าสิ่งนี้อาจเป็นทางเลือก เนื่องจากโดยทั่วไปแล้วจะมีการกำหนดค่า sudo เพื่อให้ผู้ใช้ ansible สามารถ sudo ให้กับผู้ใช้ใดก็ได้ เช่น:

    ansible ALL=(ALL) NOPASSWD:ALL
    

    หรือวางไว้ในกลุ่มที่ทำได้อยู่แล้ว


วิธีที่สองคือให้ Ansible เชื่อมต่อโดยตรงกับระบบระยะไกลในฐานะผู้ใช้ที่ต้องการ (ในที่นี้ www-ข้อมูล) และ ไม่ ซูโด คุณทำดังนี้:

  1. เพิ่มรหัสสาธารณะ ssh ของ Ansible ให้กับผู้ใช้ระยะไกล .ssh/authorized_keys.

  2. ชุด remote_user=www-ข้อมูล และ กลายเป็น = ไม่ สำหรับงาน บล็อก playbook บทบาท ฯลฯ ที่ต้องเรียกใช้ในฐานะผู้ใช้นี้

co flag
âกลัวไปจากเอกสารดังกล่าวâ â ค่อนข้างตรงกันข้าม เอกสารทำให้ฉัน * * * * * * * * เข้า * พยายามทำให้มันทำงาน แต่ตอนนี้ฉันได้อัปเดตคำถามด้วยความจริงที่ว่าฉันไม่สามารถสร้างปัญหาซ้ำได้ คุณลักษณะ `become' ที่แนะนำทำงานอย่างถูกต้องในขณะนี้ ขอบคุณสำหรับคำแนะนำ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา