ทำไมไม่ควร / var / www มี chmod 777


67

เมื่อมีการพัฒนาหน้าใน localhost ผมบางครั้งได้รับ "ไม่อนุญาต" chmod -R 777 /var/wwwข้อผิดพลาดที่ฉันสามารถแก้ปัญหาโดยการทำงาน อย่างไรก็ตามผู้คนกำลังบอกฉันว่านี่เป็นความคิดที่ไม่ดีสำหรับเหตุผลด้านความปลอดภัย

ทำไมไม่ควร/var/wwwมี chmod 777


ฉันอยากจะแนะนำกระทู้นี้มากกว่า @ serverfault.com มันเป็นงานที่ยอดเยี่ยมในการให้ตัวอย่างการตั้งค่าสำหรับ apache2 และการอนุญาต serverfault.com/q/6895/57036 PS ฉันไม่สามารถแสดงความคิดเห็นดังนั้นฉันต้องเพิ่มมันเป็นคำตอบ
MystaMax

คำตอบ:


80

777 เป็นการอนุญาตที่ไม่ดีโดยทั่วไปและฉันจะแสดงให้คุณเห็นว่าทำไม

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

นี่คือตัวอย่างของฉัน:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

จนถึงตอนนี้ฉันได้สร้างโฟลเดอร์และสร้างไฟล์ที่มีสิทธิ์ "ไม่ดี" (777 และ 666) ตอนนี้ฉันจะเปลี่ยนเป็นผู้ใช้อื่นและพยายามจัดการไฟล์เหล่านั้น

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

ในฐานะผู้ใช้ที่เป็นอันตรายฉันจึงสามารถวางไฟล์ลงในไดเรกทอรีและแทรกข้อความลงในไฟล์ที่มีอยู่แล้ว ในขณะที่ด้านล่างในไดเรกทอรีที่มี 755 และไฟล์ที่มี 644 ฉันสามารถดูไฟล์และไดเรกทอรีภายใน แต่ฉันไม่สามารถแก้ไขไฟล์หรือสร้างไฟล์ใหม่ได้:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

สำหรับสิทธิ์ Apache คุณจะต้องติดกับ 0755 และ 0644 (AKA umask 022) สำหรับโฟลเดอร์และไฟล์ตามลำดับ สิ่งนี้ช่วยให้คุณในฐานะเจ้าของไฟล์สามารถแก้ไขและจัดการกับไฟล์เหล่านั้นในขณะที่ให้ Apache มีระดับการเข้าถึงขั้นต่ำที่จำเป็นในการใช้งาน


13
ฉันขอโทษสำหรับภาษา แต่นี่เป็นคำตอบสำหรับการเตะ ขอบคุณมาร์โก
Luis Alvarado

จะเกิดอะไรขึ้นถ้าคุณสร้างผู้ใช้สำหรับบุคคลที่ได้รับอนุญาตให้จัดการโฟลเดอร์ / var / www ได้อย่างอิสระเท่านั้น? ฉันใช้ Virtual Machines เฉพาะสำหรับเว็บเซิร์ฟเวอร์แต่ละตัวที่ฉันเรียกใช้และฉันสงสัยว่ามันยังคงเป็นจริงที่คุณควรระวังอย่างยิ่ง
UrkoM

1
@UrkoM คุณไม่ต้องระวังมากเกินไป หากคุณต้องการให้คนอื่นเข้าถึงไฟล์เดียวกันคุณสามารถชนกลุ่มเพื่อ 6/7 (0664/0775) และเพิ่มผู้ใช้แต่ละคนในกลุ่มนั้น ในขณะที่การตั้งค่านี้ (และสิ่งที่ฉันอธิบายไว้ในคำตอบของฉัน) ไม่เป็นไปตามเกณฑ์ทั้งหมดฉันจะบอกว่า 90% ที่ดีเวลา 0755/0644 เป็นสิทธิ์ที่คุณต้องการใช้ หากคุณมีระบบ "ผู้ใช้เพียงคนเดียว" ความเสี่ยงของการมีระบบอื่น ๆ ที่มีสิทธิ์ในการเขียนไม่ได้เป็นความเสี่ยงมาก
Marco Ceppi

4
@UrkoM สิ่งอื่นที่ต้องพิจารณาคือมี "ผู้ใช้" จำนวนมากที่ไม่ได้เป็นตัวแทนของคนจริง แต่มีอยู่เพื่อให้บริการบางอย่างสามารถทำงานด้วยความสามารถที่ลดลง (ส่วนใหญ่เป็นเหตุผลด้านความปลอดภัย แต่ยังลดอันตรายที่อาจเกิดขึ้น จากข้อผิดพลาดเสถียรภาพ) ดูเนื้อหาของ/etc/passwdและคุณจะเห็นผู้ใช้เช่นmail, และnews nobodyแม้ว่ามันจะเป็นเรื่องดีสำหรับผู้ใช้ที่เป็นมนุษย์จริงของระบบของคุณที่จะสามารถแก้ไขเนื้อหาของ/var/wwwแต่นั่นไม่ได้หมายความว่าคุณต้องการให้กระบวนการทั้งหมดทำงานในฐานะผู้ใช้ "ประดิษฐ์" เหล่านี้เพื่อให้สามารถทำเช่นนั้นได้
Eliah Kagan

1) เป็นคำตอบที่ง่ายที่สุดเท่าที่จะทำได้ ไม่อธิบายว่า Apache หรือ Nginx สามารถจัดการโฟลเดอร์หรือไฟล์ได้อย่างไร Apache หรือ Nginx เซิร์ฟเวอร์เพื่อให้การใช้งานพวกเขาไม่ได้ "ของคุณเป็นอันตราย" ผู้ใช้ที่พวกเขาไม่สามารถพิมพ์ls -lah, touch badหรือคำสั่งอื่น ๆ พวกเขาสามารถจัดการโฟลเดอร์และไฟล์ได้อย่างไร 2) มรดก คุณไม่ได้ครอบคลุมการสืบทอดระหว่างโฟลเดอร์และไฟล์ภายใน มีอย่างน้อย 2-3 /varขั้นตอนก่อนที่จะมีไฟล์: /var/www, /var/www/project, สิ่งที่ผู้ใช้ / สิทธิ์ของกลุ่มควร/varมี? สิทธิ์ผู้ใช้ / กลุ่มใดที่ควร/var/wwwมี? และอื่น ๆ พวกเขาร่วมมือกันอย่างไร
Green

15

โดยพื้นฐานแล้วการมีสิทธิ์ใช้งาน 777 จะไม่ทำให้คุณถูกแฮ็กด้วยตนเอง แต่หากมีใครบางคนได้รับสิทธิพิเศษในที่ใด ๆ ก็สามารถใช้เพื่อเพิ่มสิทธิ์และควบคุมคอมพิวเตอร์ของคุณได้อย่างสมบูรณ์ ส่วนที่เลวร้ายที่สุดคือสิทธิ์ของคุณกำลังใช้ "7" - นั่นหมายถึงการอ่านเขียนและดำเนินสิทธิ์

สมมติว่าแฮ็กเกอร์ต้องการครอบครองคอมพิวเตอร์ของคุณ เขาอาจเชื่อมต่อกับคอมพิวเตอร์ของคุณโดยใช้เว็บเบราว์เซอร์เชื่อมต่อกับhttp://yourcomputer.example.com:80/. หากคุณมีหน้าใด ๆ ที่ให้เขาอัปโหลดรูปภาพเขาสามารถเปลี่ยนชื่อไฟล์ปฏิบัติการให้ลงท้ายด้วย ".jpg" และอัปโหลดไปยังเซิร์ฟเวอร์ของคุณ ตอนนี้เขาเรียกดูไฟล์ในเว็บเบราว์เซอร์ของเขาและเรียกใช้เพราะลินุกซ์ไม่สนใจเกี่ยวกับส่วนขยายมันเห็นแค่ว่าเป็นไฟล์ปฏิบัติการ ที่อาจไม่ได้รับเขามาก แต่เพราะมันวิ่งเลยเขารู้ว่ามันวิ่งในฐานะผู้ใช้ apache จากนั้นเขาจะอัปโหลดเวอร์ชันที่แก้ไขซึ่งจะแก้ไขไฟล์กำหนดค่าของ Apache ให้เขาเข้าถึงได้มากขึ้น - สมมุติว่า apache จะส่งออกเนื้อหาของ / etc / passwd จากนั้นเขาสามารถใช้ข้อมูลนั้นเพื่อดูว่าผู้ใช้มีอยู่ในระบบ จากนั้นเขาสามารถเชื่อมต่อโดยใช้ ssh และลองใช้รหัสผ่านทั่วไปเพื่อเข้าสู่ระบบในฐานะผู้ใช้เหล่านั้น - หากไม่ได้ผลเขาจะก้าวเข้าสู่การโจมตีแบบเต็มกำลัง หากเขาเข้ามาในฐานะผู้ใช้ที่มีสิทธิ์เข้าถึง sudo

ตอนนี้คุณอาจบอกว่าไม่น่าจะเป็นไปได้หรือว่าไม่ใช่วิธีที่แฮ็กเกอร์ตัวจริงจะทำงาน นั่นเป็นเรื่องจริง แต่ประเด็นก็คือโดยการตั้งค่าไฟล์ให้เป็น chmod 777 คุณได้เปิดช่องโหว่ที่แฮ็กเกอร์สามารถใช้งานได้ แต่เขาก็เห็นว่าเหมาะสม

หากคุณทำตามหลักการของสิทธิพิเศษอย่างน้อยที่สุดแล้วรูนั้นจะไม่เกิดขึ้นและระบบของคุณก็ยากที่จะแฮ็ก แม้ว่ามันจะยากกว่าในการทำสิ่งต่าง ๆ อย่างถูกต้อง แต่คุณก็ควรทำทุกวิถีทาง


+1 สำหรับ "toehold" และ "บานปลาย" อธิบายแนวคิดได้ดี
Kari Kääriäinen

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