Score:1

ความเป็นเจ้าของไฟล์ Apache และ envvars

ธง lk

ฉันใช้อูบุนตู 20.04 ฉันได้แก้ไข /etc/apache2/envvars เพื่อเปลี่ยนผู้ใช้เรียกใช้เป็น ผู้ใช้ก: ส่งออก APACHE_RUN_USER=userA

เมื่อฉันวิ่ง สคริปต์ PHP นี้จาก W3 Schools ในการอัปโหลดไฟล์ การอัปโหลดจะทำงาน - แต่เจ้าของไฟล์ไม่ใช่ ผู้ใช้ก อย่างที่ฉันตั้งใจ มันยังคงอยู่ www-ข้อมูล.

ยัง: sudo apache2ctl -S รายงาน ผู้ใช้: name="userA" id=1002ตามที่ตั้งค่าไว้ใน envvars

เหตุใดจึงไม่ www-ข้อมูล เป็นเจ้าของไฟล์ ไม่ใช่ ผู้ใช้ก? อะไรคือตัวกำหนดความเป็นเจ้าของไฟล์? FWIW สิทธิ์ของไดเร็กทอรีที่มีการอัปโหลดไฟล์ 774และความเป็นเจ้าของคือ userA:www-ข้อมูล. "ตั้งค่า UID" และ/หรือ "ตั้งค่า GID" ในไดเร็กทอรีก็ไม่มีผลกระทบเช่นกัน

หากฉันลากและวางไฟล์ในไดเร็กทอรีด้วย WinSCP (โดยใช้ ssh) ความเป็นเจ้าของคือ userA:ผู้ใช้เอ (ใช่, ผู้ใช้ก เป็นสมาชิกของทั้ง ผู้ใช้ก กลุ่มและ www-ข้อมูล กลุ่ม). ถ้าฉันตั้งค่า GID และลากและวาง เจ้าของคือ userA:www-ข้อมูล.

ru flag
คุณเริ่มต้นกระบวนการ Apache ใหม่ทั้งหมดหรือไม่ (`sudo systemctl daemon-reload && sudo systemctl restart apache2.service`) หากคุณยังไม่ได้โหลด ก็จะไม่ได้โหลดทุกอย่างที่ 'ใหม่' และจะไม่รีสตาร์ทกระบวนการเพื่อรันเป็น `userA`
ru flag
ตรวจสอบเอาต์พุต `htop` และตั้งค่าเป็นรูปแบบ "tree" ในการตั้งค่า htop - ตรวจสอบว่ากระบวนการย่อยของ Apache ทำงานอย่างไร - `userA` หรือ `www-data` ด้วย
shortmort37 avatar
lk flag
ฉันหยุดมันโดยสิ้นเชิง - ฉันใช้วิธีรีบูตเครื่องใหม่ แต่ก็ไม่มีประโยชน์ แต่ฉันยังโพสต์สิ่งนี้ไปที่ StackOverflow พวกเขาแนะนำว่าฉันควรดูที่ php-fpm ซึ่งกำหนดสิทธิ์และความเป็นเจ้าของโดยไม่ขึ้นกับ apache: https://stackoverflow.com/questions/67892965/ubuntu-20-04-apache-file- ความเป็นเจ้าของและสภาพแวดล้อม
ru flag
คุณจะติดตั้ง PHP ได้อย่างไร? โดยปกติผู้คนจะใช้ PHP ที่รวมอยู่ใน Apache หากคุณตั้งค่า `php-fpm` ไว้ นั่นคือสิ่งที่เราจำเป็นต้องรู้ เพราะ FPM *ไม่ใช่* กลไก PHP เริ่มต้นใน Apache และไม่มีทางที่จะตัดสินได้ว่าคุณใช่หรือไม่ใช่ เว้นแต่คุณจะแบ่งปันการกำหนดค่าของคุณกับเรา
shortmort37 avatar
lk flag
@ThomasWard กระบวนการ apache ทั้งหมดกำลังทำงานในฐานะ userA (ยกเว้นกระบวนการหนึ่งในฐานะรูท) มีกระบวนการ www-data หลายกระบวนการที่ทำงานอยู่ ทั้งหมดเป็น www-data ในการใช้งาน phpBB ฉันมีโอกาสที่ฉันต้องสลับไปมาระหว่างเวอร์ชัน PHP ที่แตกต่างกันในสภาพแวดล้อมที่แตกต่างกัน ดังนั้นฉันจึงทำตามคำแนะนำที่แสดงไว้ที่นี่: https://devanswers.co/run-multiple-php-versions-on -อาปาเช่/
shortmort37 avatar
lk flag
ฉันยังใช้งานอูบุนตู บทความนี้ระบุว่า PHP ไม่ * ไม่ * มาพร้อมกับ apache: https://www.serverlab.ca/tutorials/linux/web-servers-linux/installing-php-for-apache-on-ubuntu/
ru flag
อืม ... ขึ้นอยู่กับว่าคุณติดตั้งอย่างไร Apache2 ไม่ได้มาพร้อมกับ Apache ตามค่าเริ่มต้น แต่คนส่วนใหญ่ติดตั้งปลั๊กอิน Apache PHP แทนที่จะใช้ php-fpm กับ Apache เพราะมันง่ายกว่า (ข้อเท็จจริงที่น่าสนุก: มันย้อนกลับไปที่คำสั่งที่ฉันทำขึ้นจาก "มันขึ้นอยู่กับว่าคุณติดตั้ง PHP อย่างไร")
shortmort37 avatar
lk flag
ให้เรา [ดำเนินการสนทนาต่อในการแชท](https://chat.stackexchange.com/rooms/126285/discussion-between-shortmort37-and-thomas-ward)
Score:1
ธง ru

ดังนั้นสิ่งนี้จะขึ้นอยู่กับวิธีที่คุณใช้ PHP เป็นอย่างมาก

มีสองวิธีทั่วไปในการดำเนินการนี้กับ Apache และแต่ละวิธีมีข้อควรพิจารณาที่แตกต่างกันในการแก้ไขปัญหานี้ด้วยสิทธิ์


ฝังตัว php.ini โมดูลใน Apache

นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุดในการทำให้ Apache ทำงานกับ PHP ได้ PHP ทำงานภายใน Apache และรันตามที่ผู้ใช้กำหนดค่า Apache

sudo apt ติดตั้ง libapache2-mod-php.ini
sudo a2enmod php
sudo systemctl รีสตาร์ท apache2.service

PHP เอฟพีเอ็ม

PHP FPM เป็นตัวเลือกอื่น - คุณจะติดตั้งไฟล์ php-fpm แพ็คเกจ แต่คุณจะต้องทำงานพิเศษกับ Apache เพื่อให้ใช้งานได้

sudo apt ติดตั้ง libapache2-mod-fcgid php-fpm

จากนั้นคุณต้องเปิดใช้งานโมดูล FCGId ใน Apache รวมถึงไฟล์ นามแฝง และ proxy_fcgi โมดูล:

sudo a2enmod การดำเนินการ fcgid นามแฝง proxy_fcgi

สำหรับ Ubuntu 20.04 PHP คือ 7.4 ดังนั้นคุณจะต้องเพิ่มสิ่งนี้ในการกำหนดค่าเซิร์ฟเวอร์ของคุณทุกที่ที่คุณใช้ php-fpm:

    <FilesMatch \.php$>
        # 2.4.10+ can proxy to unix socket
        SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost"
    </FilesMatch>

สิ่งนี้จะต้องอยู่ในตัวคุณ <VirtualHost ...> บล็อกทุกที่ที่คุณใช้ PHP

จากนั้นคุณต้องปรับ /etc/php/7.4/fpm/pool.d/www.conf เพื่อให้ผู้ใช้ที่คุณต้องการใช้ - มองหา ผู้ใช้ = www-ข้อมูล บรรทัดและปรับสิ่งนี้ให้เหมาะกับผู้ใช้ที่คุณต้องการ ฉันจะแสดงความคิดเห็นบรรทัดนี้แล้วใส่ผู้ใช้ของคุณกำหนดไว้ข้างใต้ แต่นั่นจะเปลี่ยนผู้ใช้ที่ใช้งานอยู่ php-fpm เพื่อให้อ่าน/เขียนด้วย


วิธีใดวิธีหนึ่งเหล่านี้จะแก้ไขผู้ใช้/กลุ่ม PHP ของคุณที่เขียน/สร้างไฟล์ด้วย - ขึ้นอยู่กับว่าคุณติดตั้ง PHP - Apache โมดูลฝังตัวหรือ FPM อย่างไร

shortmort37 avatar
lk flag
ขอบคุณ @ThomasWard ฉันชอบรัน PHP ภายใน Apache; ฉันได้พยายาม apt ลบ php-fpm (และล้างข้อมูล) แต่ดูเหมือนว่ายังทำงานอยู่ ความพยายามในการลบที่ตามมารายงานว่าไม่ได้ติดตั้ง ดังนั้นมันจึงน่าฉงน ฉันได้รีบูทแล้ว แต่ htop รายงานว่ากำลังทำงานอยู่ ไม่ว่าในกรณีใด: ฉันพยายามทำตามคำแนะนำ PHP ที่ฝังไว้ "sudo apt install libapache2-mod-php" เป็นไปอย่างราบรื่น แต่คำสั่ง a2enmod รายงานว่า "ข้อผิดพลาด: ไม่มีโมดูล php!" ตอนนี้ฉันสับสนไปหมดแล้ว
ru flag
`sudo apt purge 'php*-fpm'` อาจช่วยลบส่วนประกอบ FPM `php-fpm` เป็น metapackage ดึง `php7.4-fpm` บน Ubuntu ดังนั้นคุณต้องล้างข้อมูลในวงกว้างมากขึ้น หรือเพียงแค่ล้าง `php7.4-fpm`
shortmort37 avatar
lk flag
ถูกต้อง! การล้างข้อมูลนั้นกำจัด fpm ไม่ปรากฏใน htol อีกต่อไป ตอนนี้ทุกอย่างเรียบร้อยดี ขอบคุณมาก!

โพสต์คำตอบ

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