ฉันจะ chmod 777 โฟลเดอร์ย่อยทั้งหมดของ / var / www ได้อย่างไร


54

ผมใช้เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ FTP ประเด็นที่ถูกผูกไว้/var/www/home/user/www

ฉันตั้งค่าไดเรกทอรีทั้งสองเป็นchmod 777(ซึ่งใช้ได้เนื่องจากเป็นการทดสอบเท่านั้น)

ฉันสามารถอัปโหลดไฟล์ไปยัง/home/user/wwwแต่เมื่อใดก็ตามที่ฉันสร้างไดเรกทอรีใหม่ฉันจะต้องทำงานchmod 777ในโฟลเดอร์นั้น

มิฉะนั้นเมื่อฉันพยายามเรียกดูฉันได้รับข้อความแสดงข้อผิดพลาด

คุณไม่ได้รับอนุญาตให้เข้าถึง / ทดสอบ / บนเซิร์ฟเวอร์นี้

มีวิธีที่ฉันสามารถทำให้ทุกคนในโฟลเดอร์ย่อย/var/wwwสามารถเข้าถึงได้หรือไม่? หรือสิทธิ์ของพวกเขาจะถูกตั้งค่าโดยอัตโนมัติ777? มันน่ารำคาญที่ฉันต้องพิมพ์chmod 777ทุกครั้ง


12
เพียงแค่จะออกจากที่นี่โปรดพิจารณาไม่ได้ใช้ 777 บนเว็บเซิร์ฟเวอร์ คำถามที่ดีกว่าคือ "ฉันจะให้เว็บเซิร์ฟเวอร์ทำงานโดยไม่ใช้สิทธิ์ 777 ได้อย่างไร"
Marco Ceppi

12
ขอโทษที่เป็นแนวปฏิบัติที่ไม่ดีและฉันปฏิเสธที่จะตอบคำถามนี้ :) หวัง eveyone ตกลง :)
Rinzwind

คำตอบ:


89

นี่เป็นการฝึกฝนที่ไม่ดี แต่หวังว่าคุณจะใช้มันเพื่อการพัฒนาหรือคุณมีเหตุผลที่ดี คุณสามารถระบุสิทธิ์เมื่อคุณสร้างไดเรกทอรีโดยใช้-mตัวเลือก:

mkdir -m 777 dirname

หรือคุณสามารถตั้งค่าการอนุญาตซ้ำได้

sudo chmod -R 777 /var/www

ก่อนที่จะใช้อย่างใดอย่างหนึ่งเหล่านี้พิจารณาอย่างแท้จริงถ้าคุณต้องการให้ระบบไฟล์ของคุณสามารถเข้าถึงได้


แก้ไข: ดังที่ Rinzwind กล่าวไว้ที่นี่เป็นวิธีที่ดีกว่าในการบรรลุสิ่งที่คุณต้องการ

ตรวจสอบกลุ่มที่เป็นเจ้าของ/var/wwwไดเรกทอรีของคุณและเพิ่มผู้ใช้ของคุณในกลุ่มนั้น

sudo adduser yourusername group

www-dataกลุ่มที่น่าจะเป็น

จากนั้นคุณจะสามารถตกลงได้ด้วยการตั้งค่าการอนุญาตเป็น 775


4
นี้ไม่สิ่งที่คุณได้ถาม แต่โปรดอ่านนี้เป็นครั้งแรกควรทำไม / var / www ไม่ต้อง chmod 777 มันเป็นจริงๆไม่แนะนำการปฏิบัติ
Warren Hill

8
โปรดอย่าช่วยคนที่มีวิธีการที่ไม่ดี ฉันต้องการถ้าคุณอธิบายวิธีการ: โดยการเพิ่มผู้ใช้ของเขาไปยังกลุ่ม www-data หรือ apache;)
Rinzwind

4
การศึกษาต้องมาก่อน การช่วยเหลือผู้คนทำให้เครื่องของพวกเขาแย่ลงไม่ใช่วิธี Linux ดังนั้นฉันจึงไม่เห็นด้วยอย่างยิ่งกับคุณ
Rinzwind

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

1
@ dan08 มีวิธีที่ดีกว่าในการทดสอบรวมถึงการใช้ไดเรกทอรีบ้านของคุณ ดูaskubuntu.com/questions/46331/...และkimbriggs.com/computers/computer-notes/linux-notes/... มีวิธีที่ปลอดภัยในการบรรลุเป้าหมายเหล่านี้;)
Panther

7

ไฟล์และไดเร็กทอรีใน Unix อาจมีการอนุญาตสามประเภท ได้แก่ read ( r), write ( w), และ execute ( x) การอนุญาตแต่ละครั้งอาจเป็นonหรือoffสำหรับผู้ใช้แต่ละประเภทที่สาม: เจ้าของไฟล์หรือไดเรกทอรี; บุคคลอื่นในกลุ่มเดียวกับเจ้าของ และอื่น ๆ ทั้งหมด หากต้องการเปลี่ยนโหมดของไฟล์ให้ใช้คำสั่ง chmod รูปแบบทั่วไปคือ chmod X @ Y file1 file2 ...

chmod a-w file (removes all writing permissions)
chmod o+x file (sets execute permissions for other (public permissions))
chmod u=rx file        (Give the owner rx permissions, not w)
chmod go-rwx file      (Deny rwx permission for group, others)
chmod g+w file         (Give write permission to the group)
chmod a+x file1 file2  (Give execute permission to everybody)
chmod g+rx,o+x file    (OK to combine like this with a comma)

u = user that owns the file
g = group that owns the file
o = other (everyone else)
a = all (everybody)

r = read aces to the file
w = write access
x = execute (run) access 

4
cd /var/www
find -type d ! -perm 777 -exec chmod 777 {} \;

สำหรับ ftp การสร้างไฟล์ทั้งหมดที่มีการอนุญาตแตกต่างกันคุณอาจต้องการค้นหา umask ของ ftpd ว่า daemon เริ่มต้นอย่างไร

ไปที่เว็บไซต์นี้ https://linuxaria.com/article/linux-shell-understanding-umask-with-examples


1
+1 สำหรับนี่เป็นคำตอบเดียวที่อัปเดตเฉพาะโฟลเดอร์เท่านั้นไม่ใช่ไฟล์
janmyszkier

3

ประกาศบริการสาธารณะ:


ไม่เคยใช้ chmod 777 เพื่อแก้ไขปัญหา


  • เป็นความเสี่ยงด้านความปลอดภัยที่สำคัญหากคุณเรียกใช้บริการใด ๆ ที่มีให้แก่สาธารณชนโดยเฉพาะอย่างยิ่งเว็บแอปพลิเคชัน (เช่น PHP)

    รูปแบบการรักษาความปลอดภัยของระบบปฏิบัติการสมมติว่าบริการหลายอย่าง (เช่นเว็บเซิร์ฟเวอร์ของคุณ) ทำงานด้วยสิทธิ์ลดลงเพื่อป้องกันไม่ให้พวกเขาสามารถแก้ไขไฟล์ได้ การตั้งค่า 777 ในไฟล์ทำให้การออกแบบนี้แตก

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

  • ใช้ในบางไดเรกทอรีระบบ (/ usr, / etc, / var และอื่น ๆ ) มันสามารถทำลายระบบของคุณในรูปแบบที่น่าแปลกใจ

    ไฟล์ระบบที่จำเป็นบางไฟล์ต้องการการอนุญาตพิเศษเช่นสิทธิ์ setuid / setgid เพื่อใช้งาน ตัวอย่างเช่น sudo หลีกเลี่ยงการเปลี่ยนแปลงการอนุญาตไฟล์ใด ๆ ในไดเรกทอรีและไฟล์ที่ตั้งค่าโดยระบบเอง

  • ไม่มีวิธีการยกเลิกและรับสิทธิ์เก่าทั้งหมดกลับคืน

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

  • มีวิธีที่เหมาะสมกว่าในการบรรลุสิ่งที่คุณต้องการบรรลุ

ในกรณีนี้ดูเหมือนว่าคุณต้องการให้เว็บเซิร์ฟเวอร์ของคุณสามารถอ่านไดเรกทอรีได้เท่านั้น การอนุญาตให้เขียนได้ทั่วโลกเป็นวิธีที่มากกว่าที่คุณต้องทำ

ติดตามสาเหตุที่เว็บเซิร์ฟเวอร์ไม่สามารถอ่านไดเรกทอรีนั้น (คำใบ้: อาจเป็นเพราะไดเรกทอรีบ้านของคุณไม่สามารถอ่านได้ทั่วโลกการอ่านทั่วโลกนั้นปลอดภัยกว่าที่เขียนได้ทั่วโลกมาก - ตั้งค่าโฮมไดเรกทอรีของคุณเป็น 755 หรือ ย้าย www dir นั้นออกไปนอกบ้านของคุณไปยัง / var / www หรือ / srv)


0

สิ่งนี้ไม่ได้ผลสำหรับฉัน

sudo chmod -f 777 /path/to/your/file/or/directory

ฉันต้องใช้-fด้วย

sudo chmod -R -f 777 /path/to/your/file/or/directory

0

หากคุณต้องการคัดลอกการอนุญาตและหรือความเป็นเจ้าของจากไฟล์อื่นที่คุณพอใจคุณสามารถทำได้โดยใช้ sudo chmod --reference = path / to / file / ถึง / พา ธ อ้างอิง / to / file / you / want / ไป / เปลี่ยน / permissino / เพื่อ

และคุณสามารถทำสิ่งเดียวกันกับการเป็นเจ้าของไฟล์ได้เช่นกัน

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