ใครคือ "คนอื่น" ในการอนุญาต Linux และ "ดำเนินการ" หมายถึงอะไร


13

ฉันไม่พบคำตอบสำหรับคำถามสามข้อนี้:

  • ใครคือ "ผู้อื่น" ถ้าเราให้บริการทั้งหมดบนเซิร์ฟเวอร์ของเรากับผู้ใช้ "คนอื่น ๆ " ไม่ถูกต้อง? ตัวอย่างเช่นถ้าเรานำ Apache ไปใช้กับผู้ใช้และเราตั้งค่า/var/wwwให้ทำapacheตามและเราchmod 700ควรจะใช้งานได้ใช่ไหม?

  • ความแตกต่างระหว่าง "execute" และ "read" คืออะไร?

  • สิทธิ์เริ่มต้นของไฟล์สำหรับระบบทั้งหมดคืออะไรหลังจากการติดตั้งใหม่ทั้งหมด (เช่นใน Ubuntu)?

คำตอบ:


16

ใครคือ "ผู้อื่น" ถ้าเราให้บริการทั้งหมดบนเซิร์ฟเวอร์ของเรากับผู้ใช้ "คนอื่น ๆ " ไม่ถูกต้อง? ตัวอย่างเช่นถ้าเรานำ Apache ไปใช้กับผู้ใช้และเราตั้งค่า/var/wwwให้ทำapacheตามและเราchmod 700ควรจะใช้งานได้ใช่ไหม?

นี่คือวิธีการอนุญาตทำงานอธิบายโดยย่อ:

  • ตัวเลขตัวแรกคือสำหรับเจ้าของไฟล์จริง (ตรวจสอบว่าใครเป็นเจ้าของไฟล์ls -lและแก้ไขด้วยchown)

  • ตัวเลขตัวที่สองใช้สำหรับกลุ่มของไฟล์ (แม้ว่าเจ้าของไฟล์จะต้องไม่อยู่ในกลุ่มเดียวกันกับที่เป็นเจ้าของไฟล์)

  • สามหลักคือคนอื่นที่มีความหมายไม่ได้เจ้าของไฟล์และทุกคนไม่ได้อยู่ในกลุ่ม

ดังนั้นหากคุณchmodมีไฟล์ถึง 700 และเป็นเจ้าของapacheแม้แต่ผู้ใช้ "ปกติ" ของคุณก็จะไม่สามารถอ่านเขียนหรือดำเนินการได้ นี่เป็นข้อ จำกัด อย่างมากและจำเป็นเฉพาะในโอกาสที่หายาก - ตัวอย่างเช่นเมื่อคุณต้องการรักษาความปลอดภัยคีย์ส่วนตัว SSH ของคุณจะได้รับ600สิทธิ์ สำหรับ Apache สิ่งนี้อาจส่งผลให้เกิดปัญหาอื่นนอกเหนือจากข้อเท็จจริงที่ว่าด้วยบัญชีผู้ใช้ปกติของคุณคุณจะไม่สามารถแก้ไขไฟล์ใด ๆ ใน/var/wwwอีกต่อไป

ดังนั้นโดยทั่วไปคุณไม่จำเป็นต้องลบการอนุญาตเพื่ออ่าน ( x00) สำหรับผู้อื่น

คุณสามารถปล่อยให้apacheเป็นเจ้าของ/var/wwwไดเรกทอรี แต่อาจมี644(แบบอ่านอย่างเดียวสำหรับคนอื่น) อีกวิธีหนึ่งที่ผมมักจะใช้คือการเพิ่มผู้ใช้ของคุณเองและผู้ใช้ Apache ไปใหม่www-usersกลุ่มแล้ว chmodding ไฟล์ในการ/var/www 775วิธีนี้ทั้งคุณและ Apache สามารถเขียนลงไฟล์ได้ ดูที่นี่สำหรับข้อมูลเพิ่มเติม: สิทธิ์กลุ่มสำหรับ apache


ความแตกต่างระหว่าง "execute" และ "read" คืออะไร?

ไฟล์ที่รันได้สามารถเรียกใช้โดยตรงโดยผู้ใช้ - ตรงจากเชลล์ เพื่อแสดงสิ่งนี้ลองเขียนไฟล์สั้น ๆ แล้วเรียกมันว่า "test" เพิ่มเนื้อหาต่อไปนี้:

echo "I am executable"

บันทึกไฟล์ ./testขณะนี้ในเปลือกของคุณพยายามที่จะใส่ คุณจะได้รับข้อผิดพลาด " -bash: ./test: การอนุญาตที่ถูกปฏิเสธ " นี่เป็นเพราะโดยค่าเริ่มต้นไฟล์ที่สร้างขึ้นใหม่จะไม่มีการดำเนินการอนุญาต หากคุณเพิ่มสิทธิ์ดำเนินการมันจะทำงาน

$ chmod +x test
$ ./test
I am executable

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

เหล่านี้เป็นตัวอย่างโปรแกรมระบบที่พบส่วนใหญ่/binมา เรียกใช้ls -l /binเพื่อตรวจสอบสิทธิ์ของพวกเขา อย่างที่คุณเห็นพวกเขาเป็นเจ้าของrootและคุณไม่สามารถเปลี่ยนแปลงได้ แต่คุณสามารถดำเนินการได้ตลอดเวลา

ดังนั้นนี่เป็นคุณลักษณะด้านความปลอดภัยด้วยเนื่องจากคุณสามารถ จำกัด การใช้งานสคริปต์และไบนารีบางอย่างสำหรับผู้ใช้บางคน

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


สิทธิ์เริ่มต้นของไฟล์สำหรับระบบทั้งหมดคืออะไรหลังจากการติดตั้งใหม่ทั้งหมด (เช่นใน Ubuntu)?

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

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

ในที่สุดไฟล์บางไฟล์สามารถใช้งานได้ตามค่าเริ่มต้น (เช่นใน/bin) แต่ไฟล์อื่น ๆ ไม่ได้ (เช่นไฟล์กำหนดค่า/etc)

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


ขอบคุณจริงๆช่วยฉันมากจริงๆ! ฉันไม่สามารถขอบคุณได้มากพอคำถามอีกข้อหนึ่งเส้นแบ่งระหว่าง "ไฟล์" และ "ปฏิบัติการได้" ตัวอย่างเช่นไฟล์ PHP ที่เรียกใช้งานหรืออ่านโดย Apache? ขอบคุณอีกครั้งมาก!
randomKek

.phpโดยปกติไฟล์จะไม่สามารถเรียกใช้งานได้ พวกเขาจะพูดเพียงอ่านโดย Apache เมื่อคุณชี้เบราว์เซอร์ของคุณเป็นตัวอย่างhttp://example.com/file.phpก่อนที่ Apache จะสามารถแสดงผลพวกเขาจะต้องตีความโดยการติดตั้ง PHP ของคุณ แต่ Apache จะดูแล ในทางทฤษฎีคุณสามารถสร้างไฟล์ PHP ที่เรียกใช้งานได้และรันมันเหมือนสคริปต์ - ในหลอดเลือดดำเดียวกับที่เราทำกับtestไฟล์ของเราแต่มันไม่ค่อยได้ใช้
slhck

5

เพียงแค่ต้องการเพิ่มว่าการอนุญาตให้ดำเนินการมีความหมายต่าง ๆ ที่มีประสิทธิภาพสำหรับไดเรกทอรี:

สำหรับไฟล์ :

  • อ่าน: หากเนื้อหาไฟล์สามารถอ่านได้
  • เขียน: หากผู้ใช้หรือกระบวนการสามารถเขียนไฟล์ (เปลี่ยนเนื้อหา)
  • ดำเนินการ: หากไฟล์สามารถดำเนินการได้

สำหรับโฟลเดอร์ :

  • อ่าน: หากรายชื่อไดเรกทอรีสามารถรับได้
  • เขียน: หากผู้ใช้หรือกระบวนการสามารถเปลี่ยนเนื้อหาของไดเรกทอรีได้: สร้างใหม่หรือลบไฟล์ที่มีอยู่ในไดเรกทอรีหรือเปลี่ยนชื่อไฟล์
  • ดำเนินการ: หากผู้ใช้หรือกระบวนการสามารถเข้าถึงไดเรกทอรีนั่นคือไปที่มัน (ทำให้เป็นไดเรกทอรีการทำงานปัจจุบัน)

ไม่ไม่มีสิทธิ์ลบแยกต่างหากสำหรับไดเรกทอรี

(รับข้อมูลนี้ที่นี่ )


0

ฉันไม่ใช่ผู้เชี่ยวชาญ Linux แต่ฉันพยายามตอบคำถาม

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

"อ่าน" หมายถึงสิ่งที่มันพูด "execute" หมายความว่าคุณสามารถเปิดไฟล์ (เช่นคำสั่ง) หรือคุณสามารถแสดงรายการไดเรกทอรี

เกี่ยวกับการอนุญาตเริ่มต้นฉันไม่แน่ใจ ฉันเดาว่ามันสามารถกำหนดค่าอย่างใดและด้วยเหตุนี้อาจแตกต่างกันสำหรับผู้ใช้แต่ละคน


0

เพื่อให้คุณได้คำตอบที่ดีสำหรับคำถามที่ 2 อย่างน้อยนี่คือตารางสรุปที่แสดงสิ่งที่คุณสามารถ / ไม่สามารถทำได้:

+--------------------------------------------------+
| Execute Yes (./file.sh) | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute Yes (./file.sh) | Read No (ERROR)        |
|--------------------------------------------------|
| Execute No (ERROR)      | Read Yes (vim file.sh) |
|--------------------------------------------------|
| Execute No (ERROR)      | Read No (ERROR)        |
+--------------------------------------------------+

สิ่งสำคัญที่ต้องจำคือไม่ใช่ไฟล์อ่านของ USER ในหน่วยความจำเพื่อที่จะใช้งานมันเป็น KERNEL ที่ทำในนามของ USER


0

อาจเป็นเรื่องยากหากคุณต้องการยกเว้นคนอื่นทั้งหมด ดูรายการนี้จากไฟล์ / etc / passwd ของฉัน (สิทธิ์และสิ่งที่ไม่ได้ลบออกเพื่อความชัดเจน):

ราก daemon bin sys sync เกม man lp mail news uucp proxy www- data backup list irc gnats libuuid syslog messagebus usbmux haldaemon ไม่มีใคร

{นี่คือฉันและด้านล่างนี้คือสิ่งที่ฉันติดตั้งเหนือสิ่งอื่นใดมาพร้อมกับระบบ}

avahi mysql pulse rtkit saned ความโหดร้ายของ didiwiki

ตัวอย่างเช่นให้ลบการอนุญาตจาก lp หรือ uucp และคุณจะหยุดการพิมพ์ ลบการอนุญาตจาก bin, sys หรือ daemon และอาจมีหลายสิ่งที่จะพัง irc, เกม, จดหมายข่าวและการสำรองข้อมูลอาจถูกลบอย่างปลอดภัย (เว้นแต่คุณจะใช้สิ่งเหล่านั้นผ่านระบบไม่ใช่เบราว์เซอร์) ที่เหลือฉันออกไปทักษะการค้นหาของคุณ

นี่คือ ubuntu / bodhi linux และระบบอื่น ๆ อาจมีความพิเศษน้อยกว่า อื่น ๆ ทั้งหมดเหล่านี้อย่างไรก็ตามเพื่อป้องกันไม่ให้ทำงานทุกอย่างในฐานะรูท ฉันคิดว่ามันเป็นไปได้ที่จะสร้างระบบที่แต่ละไฟล์สามารถอ่าน / เขียน / ดำเนินการโดยผู้ใช้ระบบเพียงคนเดียว (บาร์รูท) แต่ฉันไม่แน่ใจว่ามันถูกลองแล้ว

ดำเนินการได้รับอนุญาตในการเรียกใช้รหัส อ่านอนุญาตให้ดู (และคัดลอก?) เท่านั้น

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