การตั้งค่า NOEXEC หมายถึงอะไรเมื่อติดตั้งไดเรกทอรีบน RHEL?


11

ฉันพยายามทำความเข้าใจกับค่าสถานะ NOEXEC เมื่อทำการติดตั้ง

ฉันมีปัญหาการดำเนินการภายในไดเรกทอรี / tmp บนเครื่องของคนอื่นที่ฉันไม่สามารถเข้าถึง atm ที่มีการติดตั้งไดเรกทอรี / tmp ไปยังไดรฟ์อื่นนอกเหนือจาก '/' และ NOEXEC ฉันต้องการลองและสร้างสถานการณ์นี้ขึ้นบนเครื่องของฉันใหม่ แต่ฉันไม่มีฮาร์ดไดรฟ์ตัวที่สอง ฉันพยายามทำคำสั่งต่อไปนี้:

mount --bind /test1 /test2

ฉันลบbindแฟล็กและเพิ่มNOEXECใน / etc / fstab จากนั้นฉันก็สร้างไฟล์ใน / test2 เรียกว่า test.sh โดยที่มันแค่ echos 'hello world' ฉันลองแล้วเรียกใช้และมันบอกว่า 'การอนุญาตถูกปฏิเสธ' จากนั้นฉันก็วิ่งchmod 777 test.shและสามารถรันไฟล์ได้ดี ฉันคิดว่าค่าสถานะ NOEXEC ไม่ควรอนุญาตให้ฉันดำเนินการใด ๆ

คือmount --bind /test1 /test2ไม่ได้เช่นเดียวกับการติดตั้งจากไดรฟ์ทางกายภาพที่แตกต่างกันอย่างสมบูรณ์? ใน / test1 และ / test2 อยู่ในไดรฟ์ที่แตกต่างกันอย่างไร


ฉันสงสัยว่าคุณอาจตกเป็นเหยื่อของความผิดปกติของการผูกมัด ดูคำตอบนี้
Kamil Maciorowski

คำตอบ:


7

ตัวเลือกธง 'noexec' ในmountคำสั่งไม่อนุญาตให้มีการดำเนินการของไบนารีที่ปฏิบัติการในการติดตั้งระบบไฟล์1 อย่างไรก็ตามเมื่อสคริปต์ (ไฟล์ข้อความที่ขึ้นต้นด้วยเส้น she-bang; เช่นบรรทัดที่ขึ้นต้นด้วย#!) ถูกมอบให้กับเชลล์ (bash) บางเชลล์มันจะรันไฟล์ปฏิบัติการที่มีชื่อบนบรรทัดนั้น (เช่น/usr/bin/perl) และส่งผ่าน เส้นทางของเชลล์สคริปต์เป็นอาร์กิวเมนต์แรก ล่ามที่เกิดขึ้นจริงอาจไม่อยู่บนจุดเมานต์นั้น
__________
1mountคำสั่งมักจะเมาท์ระบบไฟล์ ( bindอาจจะถือว่าลูปแบ็คหรือการเมาต์อาจเป็นข้อยกเว้นสำหรับรุ่นนี้) ในบางกรณี (เช่น/tmp) ระบบไฟล์นี้จะมีเพียงไดเรกทอรีเดียว


ดังนั้นแม้ว่าไฟล์ sh จะอยู่ใน / test2 แต่จะถูกเรียกใช้งานใน / bin / sh ไม่ใช่ / test2? บนเครื่องอื่นมีกระบวนการ java ที่กำลังเขียนเชลล์สคริปต์ไปยังไดเร็กทอรี / tmp จากนั้นเรียกใช้งาน ฉันคิดว่าฉันจำเชลล์สคริปต์ที่มันสร้าง#!/bin/shอยู่ด้านบน ฉันไม่ทราบว่าเชลล์สคริปต์ได้รับการดำเนินการนอกเหนือจากการผ่าน java และการอ้างอิง / bin / sh อย่างไร หากเป็นการอ้างอิง / bin / sh และไดเรกทอรี bin มีสิทธิ์ดำเนินการทำไมเชลล์สคริปต์จะไม่ทำงานเหมือนที่เคยทำในการทดสอบ
user972276

ทั้งหมดนั้นขึ้นอยู่กับการเรียกใช้เชลล์ / โปรแกรมเชลล์สคริปต์ไม่ใช่เอลฟ์และไม่สามารถดำเนินการได้โดยตรงอย่างไรก็ตามเชลล์บางตัวจะไม่อนุญาตให้ใช้สคริปต์บน FS ที่เมาท์ NOEXEC เพื่อให้ทำงานพวกเขาจะตาย ฉันไม่แน่ใจว่าพฤติกรรมของ / bin / sh คืออะไรในกรณีนี้ (โดยเฉพาะเมื่อฉันไม่รู้ว่าคุณใช้อันไหนมีรสชาติไม่มาก)
KJ4IPS

ลองคิดดูสิเมื่อคุณใช้เชลล์ระบบจะสังเกตเห็น #! บรรทัดและเรียก interpereter ที่เหมาะสม (/ bin / bash /tmp/file.sh) แต่ถ้าจาวาบิตเป็นเพียงการโทร (/tmp/file.sh) นั่นจะไม่ทำงาน
KJ4IPS

อินสแตนซ์ java ไม่ได้อยู่ในไดเรกทอรี / tmp และจำเป็นต้องใช้ล่ามเพื่อเรียกใช้งานเชลล์สคริปต์ใช่ไหม ยกเว้นว่าจาวามีฟังก์ชันการทำงานในตัวซึ่งหมายความว่าการดำเนินการจะไม่เกิดขึ้นในไดเรกทอรี / tmp
user972276

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