ฉันจะให้ผู้ใช้ www-data กับโฟลเดอร์ในโฟลเดอร์บ้านของฉันได้อย่างไร


31

ฉันมีโฟลเดอร์: /home/myuser/folderA

ฉันต้องการให้ผู้ใช้ www-data เขียนการเข้าถึงด้านบนในขณะที่ 'myuser' ยังคงมีการเข้าถึงตามปกติ (เนื่องจากเป็นโฟลเดอร์บ้านของผู้ใช้ของฉันเอง)

ฉันต้องใช้คำสั่งใด

หมายเหตุ: ฉันไม่ต้องการwww-dataให้มีการเข้าถึงโฟลเดอร์อื่น ๆ /home/myuser/ใน

ขอบคุณล่วงหน้า.

คำตอบ:


46

ขั้นแรกเพิ่มตัวเองลงในกลุ่ม www-data

usermod -a -G www-data (your username)

แล้ว:

chgrp www-data /home/myuser/folderA
chmod g+rwxs /home/myuser/folderA

ควรทำเคล็ดลับเว้นแต่ว่าการอนุญาตของคุณ/home/myuserไม่อนุญาตให้ผู้ใช้รายอื่นเข้าถึง

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

nb สิ่งนี้ยังขึ้นอยู่กับการumaskตั้งค่าของบัญชีผู้ใช้ของคุณและเว็บเซิร์ฟเวอร์: คุณต้องตรวจสอบให้แน่ใจว่าไฟล์ที่สร้างในโฟลเดอร์ A มีrwการเข้าถึงกลุ่ม(และไดเรกทอรีที่สร้างขึ้นภายในกลุ่มที่ต้องการrwx)

หากเว็บเซิร์ฟเวอร์ของคุณไม่มีสิทธิ์ใน/home/myuserdir ของคุณ(ค่อนข้างสมเหตุสมผล) คุณจะไม่เข้าไปในนั้นเว้นแต่คุณจะทำอย่างอื่น สอง solns:

  1. sudo mount --bind /home/myuser/folderA /var/www/mysite/folderA (นี่เป็นแฮ็คที่น่าเกลียดและจะต้องทำซ้ำหลังจากรีบูต แต่เคล็ดลับที่ทรงพลังสามารถใช้เพื่อทำให้โฟลเดอร์สามารถเข้าถึงได้ภายในคุก SSH)

  2. /home/shared-stuff/folderAเพียงแค่ย้ายโฟลเดอร์ที่ใช้ร่วมกันที่อื่นเช่น

ตัวเลือกที่ 2 นั้นอร่อยที่สุด สมมติว่าเนื้อหาในโฟลเดอร์ A เป็นสาธารณะจริงๆและคุณไม่สนใจว่าใครจะเห็นคุณสามารถตั้งค่าได้

sudo mkdir -m777 /home/shared-stuff

จากนั้นคุณสามารถใส่ข้างในนั้นพูดโฟลเดอร์ A ที่มีสิทธิ์ข้างต้นและโฟลเดอร์ B ที่ www-data ไม่ควรเข้าถึงด้วยสิทธิ์ที่แตกต่างกันเช่น

$ cd /home/shared-stuff ; ls -l
drwxrwsr-x 2 myuser www-data   4096 Jan 17 21:46 folderA
drwxrwx--- 2 myuser myuser     4096 Jan 17 21:46 folderB

สิ่งที่อยู่sในg+rwxs?
T.Todua

บิต "เหนียวกลุ่ม" มันอธิบายผลกระทบในพาราที่เริ่มต้นด้วย "The first ... " :-)
artfulrobot

6

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

$ sudo vi /etc/apache2/apache2.conf

ค้นหาผู้ใช้และกลุ่มและใส่ของคุณ
User <Your User>
Group <Your Group>

$ sudo service apache2 restart

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

ฉันค่อนข้างแน่ใจว่ามันไม่ปลอดภัยนั่นคือเหตุผลที่ฉันให้ความแม่นยำของ Local Machine เท่านั้น
Shadowbob

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