ฉันจะเปลี่ยนการอนุญาตของไฟล์และไดเรกทอรีซ้ำได้อย่างไร?


65

ฉันได้ติดตั้งอูบุนตูไว้ในเครื่องคอมพิวเตอร์ด้วย apache / php / mysql

ตอนนี้ฉันมีไดเรกทอรีที่ / var / www - ข้างในซึ่งฉันมีโครงการต่อเนื่องหลายโครงการ ฉันยังทำงานกับ opensource (drupal, magento, sugarcrm)

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

sudo chmod 777 foldername

ฉันจะทำสิ่งนี้ซ้ำ ๆ

นอกจากนี้ทำไมฉันต้องทำ777เสมอฉันพยายาม755สำหรับโฟลเดอร์และ644สำหรับไฟล์ แต่นั่นไม่ได้ผล

คำตอบ:


90

เพียงเพิ่ม-Rตัวเลือกเพื่อเปลี่ยนการอนุญาตไฟล์ซ้ำ ตัวอย่างเพิ่มสิทธิ์การอ่านและเขียนซ้ำสำหรับเจ้าของและกลุ่มบนfoldername:

chmod -R ug+rw foldername

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

การตั้งค่าสิทธิ์ที่ 777 เป็นกำลังใจอย่างมาก คุณได้รับข้อผิดพลาดทั้งใน Apache หรือบรรณาธิการของคุณเกี่ยวกับการอนุญาตเนื่องจาก apache ทำงานภายใต้ผู้ใช้คนอื่น ( www-data) กว่าคุณ

ถ้าคุณต้องการที่จะเขียน/var/wwwเพิ่มตัวเองในwww-dataกลุ่มและตั้งค่าสิทธิ์ umask + ตาม

  • เพิ่มตัวเองในwww-dataกลุ่ม:sudo adduser $USER www-data
  • เปลี่ยนความเป็นเจ้าของไฟล์ใน/var/www:sudo chown -R www-data:www-data /var/www
  • เปลี่ยน umask ดังนั้นไฟล์ที่สร้างขึ้นใหม่โดย Apache จะให้สิทธิ์การเขียนกับกลุ่มเช่นกัน เพิ่มไปumask 007/etc/apache2/envvars
  • แกรนท์ด้วยตัวคุณเอง (เทคนิคกลุ่มwww-data) sudo chmod -R g+w /var/wwwสิทธิ์ในการเขียน:

ใช่ฉันกำลังเพิ่มธง r ในตำแหน่งที่ไม่ถูกต้องฉันเพิ่มมันหลังจาก o + w สำหรับ chmod
JohnMerlino

นอกจากนี้ถ้าคุณพยายามที่จะใช้chmod -r blablabla(เล็ก -r แทน -R) คุณอาจท้ายลบสิทธิ์การอ่านสำหรับทุกคน ...
Cyril Duchon-Doris

1
หลังจากคำแนะนำเหล่านี้คุณควรตรวจสอบว่าไม่มี.htaccessไฟล์ที่มีสิทธิ์การเขียนสำหรับ apache find /var/www/ | grep .htaccess | xargs ls -l.
reynoldsnlp

23

กำลังดุร้าย:

sudo find foldername -exec chmod a+rwx {} ";"

อะไรไม่ทำงาน เฉพาะเจาะจงมากขึ้น!

sudo find foldername -type d -exec chmod 755 {} ";"
sudo find foldername -type f -exec chmod 644 {} ";"

เมื่อคุณอยู่ในโฟลเดอร์ให้ลบ "foldername"
Enrique

4
... และแทนที่ด้วย
djjeck

4

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

sudo find /var/www -type d -print0 | xargs -0 chmod 755
sudo find /var/www -type f -print0 | xargs -0 chmod 644
sudo find /var/www/some/subset -print0 | xargs -0 chown www-data:www-data

หากคุณกำลังใช้วิธีการเป็นสมาชิกกลุ่มของ Lekensteyn ให้เปลี่ยน 755 เป็น 775 และ 644 เป็น 664 ตามลำดับด้านบนจากนั้นบังคับความหนืดของกลุ่ม:

sudo find /var/www/some/subset -type d -print0 | xargs -0 chmod g+s

3

คุณสามารถเปลี่ยนโฟลเดอร์ย่อยและไฟล์ใน Nautilus อย่างที่คุณเห็นในภาพด้านล่าง เพื่อให้มีสิทธิ์บนปุ่มคุณสามารถเปิดใช้งานตัวเลือกใน Ubuntu Tweak

ป้อนคำอธิบายรูปภาพที่นี่


ใช้LANG=C [command]เพื่อรับการแปลภาษาอังกฤษ
Lekensteyn

1

หากคุณต้องการให้ไฟล์ทั้งหมดของคุณสามารถอ่านได้ทั่วโลก (เช่นมันเป็นเพียงชุดของไฟล์ HTML / ภาพคงที่) จากนั้นใช้คำสั่งนี้:

chmod -R a+r <base directory>

ซึ่งจะวนซ้ำทุกไฟล์และไดเรกทอรีย่อยและเพิ่มสิทธิ์การอ่าน

คำเตือน : อย่าทำสิ่งนี้สำหรับไฟล์ที่รันได้! เฉพาะไฟล์ที่ทุกคนควรมองเห็นได้


คุณกำลังพูดว่า "ไม่ทำchmod -R a+xอะไรเลย" หรือ "ไม่ทำสิ่งchmod -R a+rที่กระทำได้"?
aleclarson

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