ให้สิทธิ์ผู้ใช้กับ www-data ที่เป็นเจ้าของ / var / www


36

ฉันมีการตั้งค่าเว็บเซิร์ฟเวอร์อย่างง่ายสำหรับบางเว็บไซต์โดยมีเค้าโครงคล้าย:

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

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

ฉันพยายามที่จะหาวิธีที่จะสร้างผู้อื่น (ช่วยให้เรียกว่า User1) ที่มีสิทธิ์ในการแก้ไขไฟล์ใน site1 แต่ไม่ site2 และไม่ได้หยุดไฟล์ที่เป็น 'เจ้าของ' www-dataโดย มีวิธีใดบ้างที่ฉันจะทำสิ่งนี้?

คำตอบ:


70

หากเราตรวจสอบความเป็นเจ้าของ site1 เราจะพบสิ่งนี้

ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/

ซึ่งหมายความว่าไดเรกทอรีเป็นเจ้าของโดยผู้ใช้รูทกลุ่มราก ในขณะที่ผู้ใช้รูทมีสิทธิ์ในการเขียน (รวมถึงสิทธิ์ในการอ่านและเรียกใช้งาน) ไปยังไดเรกทอรีรากของกลุ่มจะมีสิทธิ์อ่านและดำเนินการเท่านั้น

เราจะต้องการเปลี่ยนความเป็นเจ้าของกลุ่มเป็นกลุ่ม(ใหม่)และเพิ่ม user1 ให้กับกลุ่มนั้น เราจะให้สิทธิ์ในการเขียนแก่กลุ่มนั้นเช่นกัน

สร้างกลุ่มใหม่

sudo addgroup site1

เพิ่ม user1 ให้กับกลุ่มที่สร้างขึ้นใหม่

sudo adduser user1 site1

ตรวจสอบว่า user1 อยู่ในกลุ่มนั้นจริงๆ

groups user1

ผลลัพธ์ควรเป็นรายการที่ต้องการ

user1 : <other-groups> site1

ตอนนี้เราสามารถเปลี่ยนความเป็นเจ้าของกลุ่มของไดเรกทอรีที่คุณต้องการ

sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1

ให้สิทธิ์การเขียนแก่เจ้าของกลุ่มใหม่นี้

sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)

ตรวจสอบว่ามีการเปลี่ยนแปลงทั้งหมดหรือไม่

ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/

ดังนั้นไดเรกทอรีนี้จึงเป็นเจ้าของโดยผู้ใช้รูทกลุ่ม site1 ทั้งผู้ใช้รูทและกลุ่มไซต์ 1 มีสิทธิ์ในการเขียน (รวมถึงสิทธิ์ในการอ่านและเรียกใช้) ไปยังไดเรกทอรี ผู้ใช้ที่อยู่ในกลุ่มไซต์ 1 จะได้รับสิทธิ์ทั้งหมดที่มอบให้กับกลุ่มนั้น

ตอนนี้เข้าสู่ระบบในฐานะผู้ใช้ 1 ย้ายไปที่ไดเรกทอรี site1 และพยายามที่จะสร้างไฟล์ในไดเรกทอรีนั้น

echo "My User1 Site" > index.html 
bash: index.html: Permission denied

สิ่งนี้ล้มเหลวเนื่องจากเป็นไปได้ว่ากลุ่มหลักของ user1 ไม่ใช่ site1 ดังนั้นเปลี่ยนเป็นกลุ่มนั้น

newgrp - site1

ลองสร้างไฟล์ขึ้นมาใหม่ (ระวังว่าคุณถูกย้ายไปที่โฮมไดเร็กตอรี่ของ user1 หลังจากเปลี่ยนกลุ่ม), ตอนนี้ควรใช้งานได้แล้ว เนื่องจากไฟล์ที่สร้างขึ้นจะมีสิทธิ์ในการอ่านทั่วโลก apache (หรือเว็บเซิร์ฟเวอร์ของคุณ) จึงไม่ควรประสบปัญหาในการเข้าถึงไฟล์เหล่านั้น

แก้ไข

นอกจากนี้ตามที่dan08แสดงความคิดเห็นคุณจะต้องเพิ่ม www-data ไปยังกลุ่มไซต์ 1

sudo adduser www-data site1

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

หากคุณต้องการดูว่าเว็บเซิร์ฟเวอร์ apache ทำงานอย่างไรให้ออกคำสั่ง

ps aux | grep apache2 | less

1
คุณต้องเพิ่ม www-data ไปยังกลุ่ม site1 เมื่ออัพโหลดและเปลี่ยนแปลงไฟล์ในเว็บอินเตอร์เฟส Wordpress Apache ทำการเปลี่ยนแปลงโดยใช้ผู้ใช้ www-data ดังนั้นสิทธิพิเศษในการอ่านจึงไม่เพียงพอส่วนใหญ่
Dan

3
Permission deniedข้อความไม่ได้เกิดจากกลุ่ม "หลัก" แต่ผู้ใช้ยังไม่เป็นจริงในกลุ่มนั้น (เท่าที่ OS เป็นห่วง) หากคุณออกจากระบบและกลับเข้ามาใหม่จะทำงานได้ตามnewgrp - site1ปกติ
0b10011

วิธีการตรงนี้จะแตกต่างจากการให้www-dataสิทธิ์ของกลุ่มเขียนถ้าคุณท้ายไม่ต้องเพิ่มwww-dataไปsite1นะ?
Matt

@MattBorja คำถามของคุณไม่ชัดเจนมาก คุณกำลังถามว่ามีอะไรผิดปกติหรือไม่ที่ให้กลุ่มชื่อwww-data' write permissions? If that is the question, www-data 'ไม่ใช่กลุ่มมันเป็นผู้ใช้ โปรดแจ้งให้เราทราบหากฉันเข้าใจผิดในคำถามของคุณ
Masroor

ฉันคิดว่านี่ไม่ใช่การกำหนดค่าที่ปลอดภัยเพราะผู้ใช้สามารถเข้าถึงเว็บไซต์ของกันและกันผ่าน php script ตัวอย่างเช่นตัวจัดการไฟล์ php
qdinar

7

สร้างสองกลุ่ม: site1grpและsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

เพิ่มwww-dataไปยังทั้งสองกลุ่ม

sudo adduser www-data site1grp && sudo adduser www-data site2grp

เพิ่ม user1 และ user2 ไปยังกลุ่มที่เหมาะสม

sudo adduser user1 site1grp && sudo adduser user2 site2grp

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

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

ขณะนี้www-dataมีสิทธิ์ผู้ใช้และกลุ่มในทั้งสองไซต์และผู้ใช้แต่ละคนมีสิทธิ์กลุ่มสำหรับไซต์ที่เกี่ยวข้อง


4

สำหรับผู้ที่มีโฟลเดอร์รากของ WordPress ภายใต้โฟลเดอร์ภายในบ้าน:

อูบุนตู / Apache

  1. เพิ่มผู้ใช้ของคุณไปยังกลุ่ม www-data:

    เครดิตให้สิทธิ์การเขียนกับกลุ่ม www-data

    คุณต้องการโทรหาusermodผู้ใช้ของคุณ ดังนั้นจะเป็น:

    sudo usermod -aG www-data yourUserName
    

    www-dataมีกลุ่มที่สันนิษฐาน

  2. ตรวจสอบว่าผู้ใช้ของคุณอยู่ในwww-dataกลุ่ม:

    groups yourUserName
    

    คุณควรได้รับ:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName จะคล้ายกับชื่อผู้ใช้ของคุณ

  3. เปลี่ยนความเป็นเจ้าของกลุ่มของโฟลเดอร์ซ้ำ ๆ เพื่อคงความเป็นเจ้าของของผู้ใช้

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. เปลี่ยนไดเรกทอรีเป็น yourWebSiteFolder

    cd yourWebSiteFolder
    
  5. เปลี่ยนการกำหนดล่วงหน้ากลุ่มซ้ำของโฟลเดอร์และโฟลเดอร์ย่อยเพื่อเปิดใช้งานสิทธิ์การเขียน:

    find . -type d -exec chmod -R 775 {} \;
    

    โหมดของการ/home/yourUserName/yourWebSiteFolder/'เปลี่ยนจาก0755 (rwxr-xr-x)เป็น0775 (rwxrwxr-x)

  6. เปลี่ยนการกำหนดล่วงหน้ากลุ่มของไฟล์และไฟล์ย่อยซ้ำเพื่อเปิดใช้งานสิทธิ์การเขียน:

    find . -type f -exec chmod -R 664 {} \;
    

    ผลลัพธ์ควรมีลักษณะดังนี้:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    เทียบเท่ากับ:

    chmod -R ug+rw foldername
    

    สิทธิ์จะเป็นเช่น 664 หรือ 775


3

คุณต้องสร้างกลุ่มใหม่สำหรับ "ผู้ใช้ใหม่" แล้วจึงเพิ่ม www-data และ "ผู้ใช้ใหม่" ในกลุ่มนั้น:

sudo gpasswd -a new_user new_group

จากนั้นคุณสามารถเปลี่ยนเจ้าของเป็นnew_userและจัดกลุ่มเป็นnew_group:

sudo chown -R new_user:new_group /var/www/site1

จากนั้นคุณจะต้องให้สิทธิ์การเข้าถึงระดับกลุ่มแก่ไซต์ 1 www-data จะยังสามารถเข้าถึงไซต์ได้เนื่องจากเป็นของ new_group ในขณะที่ new_user จะไม่สามารถเข้าถึงไซต์ 2 ได้เนื่องจากเขาจะไม่อยู่ในกลุ่ม www-data ซึ่งเป็นเจ้าของไซต์ 2


คำตอบของคุณทำให้สับสนโดย "ให้การเข้าถึงระดับกลุ่มไปยังไซต์ 1" คุณหมายถึง "เปลี่ยนกลุ่มไซต์ 1 เป็น new_group" หรือเปลี่ยนโหมด ( chmod) หรือไม่ คำตอบของคุณไม่ได้กล่าวถึงโหมดใดก็ได้ที่สามารถสร้างความแตกต่างของความปลอดภัย (หรือทำลายสิ่งต่าง ๆ )
Lekensteyn

ฉันหมายถึงการเปลี่ยนโหมด ( chmod) โดยเพิกถอนสิทธิ์ทั้งหมดสำหรับ OTHERS
errikos

1

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

# usermod -aG www-data username

สำหรับผู้ใช้ปัจจุบันหรือ

# adduser username www-data

สำหรับการสร้างขึ้นใหม่

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