ใช้ Apache ในฐานะผู้ใช้อื่น


10

เมื่อฉันเรียกใช้ps -efHคำสั่งไปยังรายการออกทั้งหมดกระบวนการที่ฉันสามารถดู Apache ทำงานเป็นและดูเหมือนว่าจะมีกระบวนการย่อยทำงานได้root www-dataนี่คือข้อความที่ตัดตอนมา:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

ฉันสามารถทำให้ Apache และกระบวนการย่อยทั้งหมดทำงานเป็นผู้ใช้อื่นได้apache2d:apache2dหรือไม่? ถ้าเป็นเช่นนั้นได้อย่างไร ฉันอ่านบางที่ว่าการตั้งค่านี้สามารถพบได้ใน/etc/apache2/httpd.confแต่ดูเหมือนว่าไฟล์ที่ว่างเปล่า? สามารถทำได้โดยการเปลี่ยนเจ้าของและกลุ่มของ/etc/init.d/apache2สคริปต์แล้วตั้งค่าการตั้งค่าสถานะ setuid?

คำตอบ:


21

Apache จะต้องรันเป็น root ในขั้นต้นเพื่อผูกเข้ากับพอร์ต 80 หากคุณไม่เรียกใช้ในฐานะ root ในขั้นต้นคุณจะไม่สามารถผูกกับพอร์ต 80 ได้หากคุณต้องการผูกกับพอร์ตที่สูงกว่า 1024 คุณสามารถทำได้ มิฉะนั้นไม่ต้องกังวลกับการรูต นั่นคือกระบวนการ Apache หลักและไม่ให้บริการการร้องขอใด ๆ มันจะวางไข่กระบวนการเด็กและปล่อยสิทธิพิเศษสำหรับการจัดการคำขอ

ในการเปลี่ยนผู้ใช้ Apache ให้ตั้งค่าUserและGroupพารามิเตอร์ใน Apache config ของคุณ


ขอโทษที่ต้องพูดนอกเรื่อง แต่ฉันสังเกตเห็นว่า haproxy สามารถทำงานได้เป็น haproxy (ไม่เหมือนรูท) และเชื่อมพอร์ต tcp 80 สิ่งนี้บรรลุผลอย่างไร การตรัสรู้ใด ๆ
kiiwii

1
มันไม่ได้ โปรเซสสามารถผูกเข้ากับพอร์ตที่ต่ำกว่า 1024 ได้ถ้ามันมีสิทธิ์พิเศษสำหรับผู้ใช้ ดังนั้น haproxy จึงเริ่มต้นด้วยสิทธิ์รูทและการดรอป (อาจ) หรือรูทของ setuid (ไม่น่าเป็นไปได้)
bahamat

คุณไม่จำเป็นต้องเรียกใช้ในฐานะรูทคุณเพียงต้องอนุญาตให้ผู้ใช้ 'apache' เข้าถึงพอร์ตที่ถูก จำกัด (เช่นที่ต่ำกว่า 1024) คำตอบนี้อธิบายถึงวิธีการใช้ 'authbind' ในการทำเช่นนั้น: superuser.com/questions/710253/…
สัตว์ 451

4

@bahamat อธิบายได้ค่อนข้างดี แต่ฉันจะเพิ่มรายละเอียดอีกหน่อย

ในระหว่างการดำเนินการตามปกติกระบวนการ apache ที่เป็นเจ้าของรูทจะไม่ทำการดำเนินการใด ๆ นอกเหนือจากการฟังพอร์ต 80 และส่งต่อการเชื่อมต่อขาเข้าไปยังชายด์ (อย่างปลอดภัยไม่มีสิทธิพิเศษในฐานะwww-dataผู้ใช้)

ตำแหน่งของไฟล์กำหนดค่าหลักจะขึ้นอยู่กับตัวเลือกเวลารวบรวมและแตกต่างกันไปตามการกระจาย แต่/etc/apache2/apache2.confเป็นการคาดเดาที่ดี

นอกจากนี้หากคุณกำลังตั้งค่าระบบเว็บโฮสติ้งผู้ใช้หลายคนคุณอาจต้องการตรวจสอบSuExec และ fcgidเพื่อให้กระบวนการ apache ของผู้ใช้เว็บโฮสติ้งแต่ละรายทำงานตามที่ผู้ใช้กล่าว - ดังนั้นหากผู้ใช้คนหนึ่งละเลยความปลอดภัย ผู้ใช้จะไม่ได้รับผลกระทบ


3

ใน Ubuntu /etc/apache2/envvarsอย่างน้อยการตั้งค่าสำหรับการนี้อยู่ใน ปรับแต่งเหล่านั้นจากนั้นรีสตาร์ท apache และคุณออกและทำงาน


ขอบคุณสิ่งนี้ช่วยฉันได้! ฉันกำลังตั้งค่ากล่องอูบุนตูคนจรจัดและด้วยเหตุผลบางอย่าง /etc/apache2/httpd.conf ไม่ได้ถูกใช้เพื่อโหลดผู้ใช้และกลุ่ม envars ดูเหมือนจะหลอกลวง!
เกร็ก

2

นอกจากนี้ตรวจสอบApache2 ITK MPM

มันใช้เธรด Apache ที่ได้รับมอบหมายuid/ gid, นี่ให้คุณใช้mod_phpต่อไป ไม่มากchmod/ chownฯลฯ


Upvoting สำหรับmpm_itkซึ่งคือการปรับปรุงที่สำคัญกว่า suexec / fcgid
Shadur

0

Mac OSX:

สิ่งที่ใช้ได้ผลสำหรับฉันคือไปสู่ไฟล์กำหนดค่า apache

/etc/apache2/httpd.conf

ในไฟล์นี้ฉันได้ค้นหาผู้ใช้หรือกลุ่ม

และชนเข้ากับ:

User _www
Group _www

ฉันได้เปลี่ยนเป็นสิ่งที่ผู้ใช้ / กลุ่มที่ฉันต้องการ (ในกรณีของฉันเป็นผู้ใช้ / กลุ่มที่เป็นเจ้าของไฟล์เว็บแอปของฉันซึ่งคุณสามารถดูได้และสิ่งนี้คุณสามารถตรวจสอบได้โดยใช้ 'ls -l' ที่เรียบง่าย คำสั่ง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.