สิทธิ์ x (เรียกใช้) ทำอะไรบนซ็อกเก็ตยูนิกซ์?


11

จากประสบการณ์ของฉันผู้ใช้ที่ไม่ได้รับสิทธิพิเศษไม่สามารถเข้าถึงซ็อกเก็ต unix ที่ตนเอง / เธอไม่ได้เป็นเจ้าของโดยไม่ได้ตั้งค่าบิต x บิตนี้ทำอะไรกันแน่? ขอบคุณ


มันได้รับอนุญาตในซ็อกเก็ตหรือไดเรกทอรี?
Rui F Ribeiro

บนซ็อกเก็ต ไดเรกทอรีมีโหมด 0755 เพื่อให้ผู้ใช้สามารถสังเกตเนื้อหา ซ็อกเก็ตมีโหมด 0644 ดังนั้นผู้ใช้แบบลอจิคัล (ซึ่งเป็นของ "คนอื่น" เพราะเขา / เธอไม่ได้เป็นเจ้าของซ็อกเก็ตซ็อกเก็ตที่เป็นเจ้าของกลุ่ม) ควรจะสามารถเขียนไปยังซ็อกเก็ตได้ แต่ผู้ใช้ได้รับข้อความปฏิเสธสิทธิ์ยกเว้นว่าโหมด 0777 ถูกนำไปใช้กับซ็อกเก็ต
ВладимирТюхтин

2
@ ВладимирТюхтин 0644หมายถึงเพียงอ่านการอนุญาตสำหรับสมาชิกกลุ่มและ "คนอื่น ๆ " ดังนั้นมีเพียงเจ้าของเท่านั้นที่จะสามารถเข้าถึงซ็อกเก็ตได้ (เนื่องจากสิทธิ์ในการเขียนจะควบคุม) 0666หรือเพียงแค่0222ไม่จำเป็นต้องได้รับอนุญาตให้อ่านก็เพียงพอที่จะให้ทุกคนเข้าถึงได้ แต่แทนที่จะให้สิทธิ์กับทุกคนฉันจะพิจารณาใช้กลุ่มเพื่ออนุญาตการเข้าถึง
ilkkachu

คำตอบ:


9

ไม่มีอะไรอย่างที่ฉันเห็น

ลินุกซ์หน้าคนยูนิกซ์ (7)กล่าวว่าสิทธิ์ของไดเรกทอรีที่มีซ็อกเก็ตที่ใช้ตามปกติ (เช่นคุณต้องการ+xใน/fooการเชื่อมต่อกับ/foo/sockและ+wใน/fooการสร้าง/foo/sock) และเขียนควบคุมได้รับอนุญาตการเชื่อมต่อกับซ็อกเก็ตของตัวเอง:

บน Linux การเชื่อมต่อกับวัตถุซ็อกเก็ตสตรีมต้องได้รับอนุญาตในการเขียนบนซ็อกเก็ตนั้น การส่งดาตาแกรมไปยังซ็อกเก็ตดาตาแกรมนั้นต้องได้รับอนุญาตในการเขียนบนซ็อกเก็ตนั้น

เห็นได้ชัดว่าระบบอื่น ๆ มีพฤติกรรมที่แตกต่าง:

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

unix(4) บน FreeBSDอธิบายข้อกำหนดที่คล้ายกัน หน้าลินุกซ์ไม่ได้บอกว่าการเข้าถึงซ็อกเก็ตในบางระบบจะเพิกเฉยต่อการอนุญาตของไดเรกทอรีด้วย

การถอด xบิตออกจากซ็อกเก็ตดูเหมือนว่าจะมีผลต่อการให้ข้อผิดพลาดที่แตกต่างกันสำหรับการลองเรียกใช้ซ็อกเก็ต แต่นั่นไม่ได้แตกต่างกันมากนัก:

$ ls -l test.sock
srwxr-xr-x 1 user user 0 Jun 28 16:24 test.sock=
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: No such device or address
$ chmod a-x test.sock
$ nc -U ./test.sock
Hello
$ ./test.sock
bash: ./test.sock: Permission denied

(ฉันได้ทดสอบด้วยว่ามีเพียงwบิตเท่านั้นที่ดูเหมือนว่าสำคัญสำหรับการเข้าถึงซ็อกเก็ตบน Debian's Linux 4.9.0)

บางทีซ็อกเก็ตที่คุณตั้งใจจะเอาบิตสิทธิ์ทั้งหมดออกจากผู้ใช้หรือคุณหมายถึงxบิตในไดเรกทอรี

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