ทำให้เป็นเจ้าของการสร้างไฟล์และโฟลเดอร์ www-data ใหม่แทน superuser / admin


13

ฉันได้รับการดิ้นรนกับการอนุญาตจนถึงตอนนี้และโพสต์คำถามอื่น แต่ระบุว่าปัญหาคืออะไรโดยยังไม่มีวิธีแก้ไข

การตั้งค่าของฉัน:

  • Ubuntu Desktop พร้อม LAMP stack
  • 5 "ผู้ใช้" ฉันสร้างผู้ใช้ที่ฉันสร้างในเซิร์ฟเวอร์ ubuntu โดยใช้sudo useradd -r -s /bin/false USERNAMEและที่ใช้ในการเข้าถึงโฟลเดอร์เครือข่ายที่ใช้ร่วมกันในท้องถิ่นเช่นสำหรับคอมพิวเตอร์ในเครือข่ายของฉันเพื่อเชื่อมต่อกับโฟลเดอร์ / var / www แบ่งปันโดยใช้ Samba
  • แก้ไข: จุดประสงค์คือเพื่อสร้าง "master localhost" ที่คอมพิวเตอร์ทุกเครื่องในเครือข่ายท้องถิ่นของฉันสามารถทำงานบนเว็บไซต์เดียวกันในพื้นที่ (ฉันไม่มีที่อยู่ IP คงที่ดังนั้นเซิร์ฟเวอร์ไม่สามารถเข้าถึงได้จากที่อื่น) .

ปัญหาของฉัน:

ขณะนี้เมื่อฉันสร้างโฟลเดอร์ใหม่บน/var/www/html(เช่น: การสร้างโฟลเดอร์ / var / www / html / testsite1) โดยใช้คอมพิวเตอร์ในเครือข่ายใด ๆ โฟลเดอร์นี้จะเป็นเจ้าของโดยอัตโนมัติboris:www-data("บอริส" เป็นผู้ใช้หลักในการติดตั้งเดสก์ทอป Ubuntu และมันแสดงให้เห็นว่า: www-data เมื่อทำงานls -lในโฟลเดอร์ที่สร้างขึ้นใหม่) ซึ่งทำให้เกิดปัญหากับการตั้งค่าปัจจุบันของฉัน (ใช้ Duplicator Plugin สำหรับ wordpress โดย LifeInTheGrid ส่วนใหญ่) อย่างไรก็ตามทั้งฉัน/var/wwwและฉัน/var/www/htmlเป็นเจ้าของโดยwww-data:www-data

ดังนั้นฉันต้องการทราบว่าฉันสามารถ:

  • เปลี่ยนความเป็นเจ้าของเป็น www-data: www-data ของไฟล์และไดเรกทอรีทั้งหมดด้านล่าง / var / www และ / var / www / html

  • ตรวจสอบให้แน่ใจว่าไฟล์หรือโฟลเดอร์ใด ๆ ที่ฉันจะสร้างพร้อมกับผู้ใช้เครือข่ายของฉันจะเป็นเจ้าของข้อมูล www-dataโดยอัตโนมัติ: www-data (ซึ่งรวมถึงไฟล์ที่สร้างขึ้นโดยอัตโนมัติโดยสคริปต์ php ซึ่งเป็นสิ่งที่ปลั๊กอินทำซ้ำหากฉัน ไม่ผิด)

มีวิธีทำเช่นนั้นหรือไม่?

หมายเหตุ: ฉันเป็นมือใหม่ที่มีสิ่งต่าง ๆ เกี่ยวกับลินุกซ์และบรรทัดคำสั่ง แต่ฉันตามทัน

หมายเหตุ 2: umask ตั้งไว้แล้วเป็น 0002

แก้ไข:

พยายามนี้:

sudo chown -R www-data:www-data /var/www/

จากนั้นตั้งค่า setuid และ setgid บิตโดยทำดังนี้

sudo chmod u+s /var/www/html
sudo chmod g+s /var/www/html

จากนั้นออกจากระบบ apache เริ่มใหม่และพยายามสร้างโฟลเดอร์ใหม่โดยใช้ Mac ที่เชื่อมต่อกับเซิร์ฟเวอร์ของฉันผ่าน IP เครือข่าย (IP ท้องถิ่นไม่ใช่แบบคงที่)

ฉันวิ่ง

ls -l on /var/www/html

ผลผลิตยังคงเป็น:

drwxr-sr-x 2 boris   www-data  testsite1

บันทึก:

ฉันตรวจสอบ apache config ของฉันมาก่อนแล้วและ envvars มันถูกตั้งค่าเป็น:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

แก้ไข: ฉันลองทำย้อนหลังเช่นการตั้งค่าทุกอย่างให้เป็นของ boris: www-data และตั้งค่า enache envvars apache ให้เป็น boris: www-data มันทำงาน!

นี่คือสิ่งที่ฉันทำ:

เปลี่ยน envvars เป็น

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

รีสตาร์ท Apachem สร้างโฟลเดอร์ใหม่เพิ่มไฟล์ของฉันรันปลั๊กอินตอนนี้บอกว่าดี !!!


มันเป็นความคิดที่ดีสำหรับความปลอดภัยในการตั้งค่าไฟล์ที่จะเป็นเจ้าของโดยผู้ใช้ www-data หรือกลุ่มแม้ว่าในบางกรณีมันอาจจำเป็นสำหรับไฟล์บางไฟล์ที่เว็บเซิร์ฟเวอร์ต้องการเข้าถึงการเขียน คุณพยายามทำอะไรให้สำเร็จ
thomasrutter

คำตอบ:


11

ตอบคำถาม # 1: เรียกซ้ำchown

recursive จะช่วยให้คุณเป็นเจ้าของชุดและกลุ่มสิ่งที่คุณต้องการchown /var/www/...นี่คือคำสั่งที่คุณควรใช้:

sudo chown -R www-data:www-data /var/www/

ด้วยสิ่งนั้นทุกไฟล์และโฟลเดอร์จะถูกตั้งค่าเช่นนั้นภายในด้วยสิทธิ์การเป็นเจ้าของเหล่านั้น


ครึ่งคำตอบสำหรับคำถาม # 2: setgidบิต

หากคุณต้องการความเป็นเจ้าของกลุ่มเริ่มต้นในไฟล์ให้ตั้งsetgidบิตบน/var/www/htmlโฟลเดอร์ ไฟล์ใหม่ควรถูกสร้างขึ้นพร้อมกับกลุ่มนั้นตามที่ระบุไว้ในโฟลเดอร์

sudo chmod g+s /var/www/html

คุณจะต้องตั้งค่าการอนุญาตการเขียนหากผู้ใช้คนอื่น ๆwww-dataกำลังเขียนไปยังไดเรกทอรีและการทำเช่นนั้นสามารถเปิดคุณไปที่ช่องโหว่ด้านความปลอดภัยหรือสองครั้งหากคุณไม่ระวัง

คุณจะจบลงด้วยการเป็นสิทธิ์$USER:www-data; ในการเปลี่ยนเจ้าของคุณใช้ a chownตามที่ระบุในวิธี # 1 (ซึ่งกล่าวว่าในการตั้งค่าที่เหมาะสมคุณควรพึ่งพาการอนุญาตกลุ่มไม่ใช่สิทธิ์ของผู้ใช้สำหรับการเข้าถึงไฟล์เว็บ)


ปัญหาการทำสำเนา PHP Wordpress

ปัญหาเกี่ยวกับการอนุญาตคือ PHP ของผู้ใช้ / กลุ่มทำงานตามความต้องการในการเขียนและอ่านและมีแนวโน้ม+xในไดเรกทอรีเพื่อแก้ไขโครงสร้าง dir และเช่นนั้น

PHP ทำงานwww-dataตามค่าเริ่มต้นในการติดตั้ง Ubuntu ซึ่งใช้การกำหนดค่าเริ่มต้น ตามหลักการแล้วขั้นตอนข้างต้นจะทำให้ปัญหานี้ได้รับการแก้ไขเนื่องจากคุณติดอยู่กับ Duplicator Plugin ซึ่งเป็นปลั๊กอินของ PHP

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


ฉันชอบวิธี setuid :)
Rinzwind

นี่คือสิ่งที่ฉันกำลังมองหา !!!! ปัญหาเท่านั้น: มันใช้งานไม่ได้ :-( ฉันสร้างโฟลเดอร์บน mac ของฉัน (เช่นไม่ใช่กับคอมพิวเตอร์เดสก์ท็อป Ubuntu) โดยเข้าถึงเซิร์ฟเวอร์ของฉันผ่าน IP ในเครื่องเมื่อฉันใช้ ls -l ยังคงเป็นเจ้าของโดย boris: www- ข้อมูล: - /
Boris Chevreau

เป็นเพราะฉันตั้งค่าความเป็นเจ้าของของผู้ใช้ในไฟล์ แต่ไม่ได้อยู่ในโฟลเดอร์? เป็นเพราะโฟลเดอร์ที่ฉันสร้างไม่สามารถเป็นเจ้าของโดยอัตโนมัติโดย www-data: www-data?
Boris Chevreau

Mac แตกต่างจาก Linux และถ้าคุณโชคไม่ดีจริงๆแล้ววิธีนี้จะไม่ทำงานและคุณจะต้องยุ่งกับการใช้งานมากกว่าแค่การอนุญาตอย่างง่าย (เช่น ACL และสิ่งอื่น ๆ ) เพื่อตั้งค่าไฟล์เริ่มต้น . นอกจากนี้ 'ไม่ทำงาน' ยังคลุมเครือ define ใช้งานไม่ได้และรวมเอาท์พุทเป็นการแก้ไขคำถาม
โธมัสวอร์ด

1
setuid นำไปใช้กับไดเรกทอรีมักจะถูกละเลยบน Linux, iirc
muru

6

เพื่อให้แน่ใจว่าไฟล์หรือโฟลเดอร์ใด ๆ ที่คุณสร้างขึ้น/var/www/htmlจะได้รับข้อมูล www-data ที่คุณสามารถใช้ได้โดยอัตโนมัติinotifyมันก็เหมือนกับ cron แต่ตรวจสอบโฟลเดอร์ / ไฟล์เพื่อดูการเปลี่ยนแปลงใน attribuets การสร้างไฟล์การแก้ไขและอื่น ๆ อีกมากมาย

ก่อนติดตั้งด้วย:

$ sudo apt-get install incron

อนุญาตให้รูทใช้incronโดยเปิด/etc/incron.allowด้วย:

$ sudo vim /etc/incron.allow

และเพิ่มลงrootในไฟล์จากนั้นบันทึกและออก

แก้ไขหน้าของคุณด้วย:

$ sudo incrontab -u root -e

และเพิ่มบรรทัดต่อไปนี้:

/var/www/html IN_CREATE /bin/chown -R www-data:www-data /var/www/html/

บันทึกและออก.

ตอนนี้เร็วที่สุดเท่าที่เป็นไฟล์ถูกสร้างขึ้นใน/var/www/htmldirecotry www-data:www-dataมันจะตั้งค่าโดยอัตโนมัติเพื่อ

คำอธิบายของบรรทัดในหน้า:

/var/www/html เป็นไดเรกทอรีที่จะถูกตรวจสอบ

IN_CREATEจะดูไฟล์ที่สร้างขึ้น มันเป็นหน้ากากไฟล์การเปลี่ยนแปลง

/bin/chown -R www-data:www-data /var/www/html/ คือคำสั่ง / การดำเนินการที่จะดำเนินการ


พวกเขาสามารถบรรลุสิ่งนี้โดยไม่แจ้งและตั้งเป้าหมาย - ความเป็นเจ้าของผู้ใช้ไม่ควรเปลี่ยนบ่อยและพวกเขาสามารถรีเซ็ตความเป็นเจ้าของของผู้ใช้เอง ... หรือใช้ ACL ซึ่งอาจเป็นปัญหา
Thomas Ward

จุดประสงค์ทั้งหมดของเซิร์ฟเวอร์นี้มีไว้เพื่อให้เราใช้เป็น "โฮสต์ในพื้นที่หลัก" เช่นสร้างเว็บไซต์ในพื้นที่และสามารถแก้ไข / แทนที่ / ย้ายและสร้างเว็บไซต์ทดสอบได้อย่างง่ายดาย ถ้าฉันต้องรีเซ็ตทุกอย่างด้วยตนเองมันจะฆ่าทุกอย่าง: - /
Boris Chevreau

นี่คือ "incron" วิธีเดียวหรือไม่ ฉันไม่เข้าใจว่าทำไมมันจึงมีความซับซ้อน สิ่งที่ฉันกำลังมองหาเป็นวิธีที่ง่ายสำหรับคอมพิวเตอร์ทั้งหมดของฉันในเครือข่ายเพื่อสร้างเว็บไซต์บนเซิร์ฟเวอร์นี้ ในที่สุดเมื่อฉันไม่มี IP แบบคงที่ (ดังนั้นการรักษาความปลอดภัยไม่เป็นปัญหา) มีการเปลี่ยนแปลงอีกครั้งที่คุณจะมีในใจ?
Boris Chevreau

ขอบคุณทำงานเหมือนจับใจ!
trurl

3

เปลี่ยนความเป็นเจ้าของเป็น www-data: www-data ของไฟล์และไดเรกทอรีทั้งหมดด้านล่าง / var / www และ / var / www / html

cd /var/www/
chown -R  www-data:www-data /var/www/
  • ./html มีนัยที่นี่ (เป็นส่วนหนึ่งของ / var / www /)
  • -Rทำให้มันวนซ้ำ (ดังนั้นมันจะสำรวจไดเรกทอรีทั้งหมดใน/var/www/)

ตรวจสอบให้แน่ใจว่าไฟล์หรือโฟลเดอร์ใด ๆ ที่ฉันจะสร้างด้วยผู้ใช้ในเครือข่ายของฉันจะเป็นเจ้าของข้อมูล www-data: www-data โดยอัตโนมัติ

  • ข้างใน / var / www / html / ฉันจะสมมติไหม

ตั้งค่า apache ของคุณเป็น www-data ดู/etc/apache2/envvars

# envvars - default environment variables for apache2ctl

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

คุณต้องรีสตาร์ท apache หลังจากแก้ไข ( sudo service apache restart)

ซึ่งรวมถึงไฟล์ที่สร้างขึ้นโดยสคริปต์ PHP โดยอัตโนมัติเพราะเป็นสิ่งที่ปลั๊กอินทำสำเนาหากฉันไม่ผิด)

ปัญหาที่นี่อาจไม่ใช่ปลั๊กอิน แต่เป็น php ผู้ใช้ควรเป็นกระบวนการเดียวกับที่ PHP ทำงานภายใต้ ดังนั้นคุณอาจต้องตั้งค่าเป็น www-data ด้วยหากเป็นผู้ใช้และกลุ่มของคุณ ( /etc/php5/apache2/php.ini)


ค่าเริ่มต้นของ Ubuntu เรียกใช้กระบวนการ / คนงาน PHP เช่นwww-dataเดียวกับ Debian ผมเชื่อว่า
Thomas Ward

นอกจากนี้ปัญหา/var/www/htmlยังเป็นเจ้าของกลุ่มและ privs อ่าน / เขียน อีกปัญหาคือพวกเขาต้องการให้ไฟล์ใด ๆ ที่ผู้ใช้สร้างขึ้นwww-data:www-dataและฉันเดาว่านั่นคือผู้ใช้เครือข่ายไม่ใช่ผู้ใช้ Wordpress ดังนั้นคุณต้องไปหลังจากการอนุญาตของไฟล์ลินุกซ์
Thomas Ward

นั่นคือผู้ใช้ในเครือข่ายแน่นอนว่าเป็นผู้ใช้ที่ฉันสร้างในเซิร์ฟเวอร์อูบุนตูโดยใช้ sudo useradd -r -s / bin / false USERNAME และใช้เพื่อเข้าถึงโฟลเดอร์เครือข่ายที่ใช้ร่วมกันในท้องถิ่น
Boris Chevreau

ถ้าฉันเปลี่ยนความเป็นเจ้าของและเขียนสิทธิ์ของโฟลเดอร์และไฟล์ทั้งหมดกลับไปเป็น boris: www-data แล้วเปลี่ยน envvars สำหรับ apache ให้เป็น boris: www-data? นั่นอาจจะช่วยแก้ปัญหาได้หรือไม่ตั้งแต่เมื่อใดก็ตามที่ฉันสร้างไฟล์ใหม่มันถูกตั้งเป็นเจ้าของเป็นบอริส: www-data?
Boris Chevreau

2

ฉันแก้ไขมัน! ฉันยังคิดว่ามันเป็นปัญหาของ Apache envvars แต่ไม่แน่ใจว่าเป็นสิ่งที่แก้ปัญหาได้หรือไม่ ... อย่างไรก็ตามนี่คือสิ่งที่ฉันทำ:

เปลี่ยน envvars เป็น

export APACHE_RUN_USER=boris
export APACHE_RUN_GROUP=www-data

Ran

sudo chown -R boris:www-data /var/www/

ตอนนี้มันทำงานได้แล้ว จะทดสอบเพิ่มเติม ...

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