การเรียกใช้สคริปต์ sh: «การอนุญาตถูกปฏิเสธ»แม้จะมีบิตและรูทที่สามารถเรียกทำงานได้


17

ฉันติดตั้ง Debian ในVirtualBox (สำหรับการทดลองต่าง ๆ ซึ่งโดยปกติแล้วระบบของฉัน) และพยายามที่จะเปิดตัวสคริปต์ addon ของแขก VirtualBox ฉันเข้าสู่ระบบในฐานะ root และพยายามที่จะเปิดตัวautorun.shแต่ฉันได้รับ«การอนุญาตถูกปฏิเสธ» ls -lแสดงให้เห็นว่าสคริปต์มีสิทธิ์ดำเนินการ

ขออภัยที่ฉันไม่สามารถคัดลอกผลลัพธ์ - VirtualBox ไม่มีประโยชน์อย่างแน่นอนหากไม่มี addon ไม่ว่าจะเป็นไดเรกทอรีที่ใช้ร่วมกันหรือคลิปบอร์ดที่ใช้ร่วมกันไม่ได้ แต่เพื่อให้แน่ใจว่าฉันคัดลอกสิทธิ์ด้วยมือ:

#ls -l ./autorun.sh
-r-xr-xr-x 1 root root 6966 Mar 26 13:56 ./autorun.sh

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

ฉันยังไม่ทราบเลยว่าอะไรจะทำให้เกิด


2
ดูเหมือนว่าควรจะทำงาน ลองใช้งานด้วย bash อย่างชัดเจน: `bash -x ./autorun.sh" บางทีนี่อาจจะให้เบาะแสเพิ่มเติมได้
nobar

2
ผลผลิตของmount | grep noexecอะไร
cuonglm

1
@Gnouc คุณพูดถูก« cdrom »ที่noexecติดตั้งไว้มีชุด อาจเป็นไปได้ว่าคุณโพสต์มันเป็นคำตอบ; ในขณะเดียวกันฉันพยายามนับใหม่ด้วยสิทธิ์ผู้บริหาร อืมฉันไม่เคยรู้มาก่อนเลยว่าระบบไฟล์อาจมีคุณสมบัติเช่นนั้น
สวัสดีแองเจิล

และถ้าคุณพยายามเรียกใช้ผ่านการเกิดsh ./autorun.shอะไรขึ้น
ตรึง

คำตอบ:


29

บางทีระบบไฟล์ของคุณถูกเมาท์ด้วยnoexecชุดตัวเลือกดังนั้นคุณจึงไม่สามารถเรียกใช้ไฟล์ที่ปฏิบัติการได้ จากเอกสารประกอบการเมานต์ :

noexec

ไม่อนุญาตให้เรียกใช้งานไบนารีโดยตรงบนระบบไฟล์ที่เมาท์ (จนกระทั่งเมื่อไม่นานมานี้มีความเป็นไปได้ที่จะรันไบนารีโดยใช้คำสั่งเช่น /lib/ld*.so / mnt / binary เคล็ดลับนี้ล้มเหลวตั้งแต่ Linux 2.4.25 / 2.6.0)

ลอง:

mount | grep noexec

จากนั้นตรวจสอบว่าระบบไฟล์ของคุณอยู่ในรายการผลลัพธ์หรือไม่

ถ้าใช่คุณสามารถแก้ปัญหานี้ได้โดยติดตั้งระบบไฟล์อีกครั้งพร้อมexecตัวเลือก:

mount -o remount,exec filesystem

นั่นไม่ได้ผลสำหรับฉัน ฉันต้องยกเลิกการต่อเชื่อมแล้วจึงติดตั้งใหม่ตามปกติ จากนั้นก็ใช้งานได้ดี
datakid

@datakid: fs ของคุณคืออะไร?
cuonglm

ฉันมีปัญหากับเดเบียน 9 ไฟล์บางไฟล์อาจถูกปฏิเสธหากสคริปต์ทำงานเป็นรูท แต่มันระบุว่าเป็นรูท ... เหมือนพฤติกรรมของ windows ถ้าฉันลบออก & สคริปต์ทำงาน! = [
Luciano Andress Martini

ฉันได้รับข้อความแปลก ๆ ซึ่งกลายเป็นเพราะnoexec: "sh: 75: script.sh: การอนุญาตถูกปฏิเสธ"
tmm1

2

bash -x ./filename.filetypeควรทำงาน. มันทำงานสำหรับฉันเมื่อฉันได้รับอนุญาตถูกปฏิเสธในฐานะผู้ใช้รูท


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

1

ทางออกของฉันในการแก้ไขปัญหานี้คือการใช้แหล่งที่มา ฉันอยู่ในปริมาณที่เก็บข้อมูลที่สำคัญมาก ไดรฟ์ข้อมูลนี้ถูกเมาท์เป็น noexec ฉันมีสคริปต์เชลล์แบบง่าย ๆ ที่สามารถเรียกใช้งานได้ แต่มีปัญหาสิทธิ์

./fixsamplesheet.sh # this guy is executable
-bash: ./fixsamplesheet.sh: Permission denied

source fixsamplesheet.sh # worked fine

ทดสอบบน Ubuntu ของฉันเท่านั้น

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