ฉันเพิ่งทำ chmod -x chmod


27

chmod -x chmodดังนั้นผมจึงได้ ฉันจะแก้ไขปัญหานี้ได้อย่างไร ฉันจะให้สิทธิผู้ดำเนินการกลับไปที่ chmod ได้อย่างไร


10
คุณตั้งใจทั้งหมดchmod!
Thanatos

1
ดูเพิ่มเติมคำถามบน Unix และ Linux SE
ยัง

คำตอบ:


43

ใน Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


bindbn ฉันกำลังจะโพสต์ลิงค์เดียวกัน :-) แต่ฉันอ่านตัวเองเพราะฉันยังใหม่กับยูนิกซ์ / ลินุกซ์
rihatum

2
ใน distro 64- บิตคุณอาจต้องใช้/lib64/ld-linux-x86-64.so.2แทน ldd /bin/chmodควรแสดงรายการลิงเกอร์ที่จะเรียกใช้
goldPseudo

ฉันจะเขียนโปรแกรมขั้นต่ำที่ใช้ chmod (2) แต่นี่จะเย็นกว่า
adamo

1
@Stefan: จากman ld-linux.so: "ld.so [และ ld-linux.so] จะโหลดไลบรารีที่ใช้ร่วมกันที่โปรแกรมต้องการเตรียมโปรแกรมให้ทำงานแล้วจึงเรียกใช้" ( ld.soสำหรับa.outฟอร์แมต executables และld-linux.soสำหรับฟอร์แมตเอลฟ์)
หยุดชั่วคราวจนกว่าจะมีประกาศ

1
@Stefan: เคอร์เนลไม่รู้จริงๆว่าจะโหลดและเรียกใช้ executables ที่เชื่อมโยงแบบไดนามิกได้อย่างไรเพราะมันมีความซับซ้อนสูงและติดตาม glibc ไม่ใช่เคอร์เนล ld-linux.soคือ sort-of executable / library hybrid, sort-of statically linked, รันใน userspace และรับผิดชอบในการโหลด executables ที่เชื่อมโยงแบบไดนามิกและการพึ่งพาทั้งหมดของพวกเขาจากนั้นเรียกใช้มัน
Juliano


18

สิ่งนี้ขึ้นอยู่กับข้อเท็จจริงที่ว่าสิทธิ์ของไฟล์ปลายทางถูกสงวนไว้แทนที่จะเป็นไฟล์ต้นฉบับเมื่อทำการคัดลอก พวกเรา "ยืม" สิทธิ์ของls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

ฉันคิดว่าสิ่งแรกที่คุณcpต้องมีคือการ
ปัก

@Riking: มันไม่จำเป็นสำหรับวัตถุประสงค์นี้
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

นี่คล้ายกับโซลูชันที่ฉันคิดขึ้นมา แต่หลังจากcpไอเท็มที่เรียกใช้งานได้ฉันก็แค่catเนื้อหาของchmodไฟล์เทมเพลต
SpellingD


7

setfacl -m u::rx /bin/chmod

... จะให้สิทธิ์เจ้าของดำเนินการ

แต่/lib/ld-linux.so.2เคล็ดลับนั้นเรียบร้อย :)


5

นี่มันแปลก ๆ ... ฉันเห็นบางสิ่งเช่นนี้เมื่อไม่กี่วันก่อนผ่านทวีตของใครบางคน ...

http://www.slideshare.net/cog/chmod-x-chmod


ลิงค์ไปยังเว็บไซต์อื่นไม่เป็นประโยชน์เนื่องจากลิงก์จะเสียในบางจุด นี่เป็นเหมือนการบอกใครสักคนกับ google คำตอบ
Phil Hannent

@Phil Hannent: ฉันเคยเห็นสไลด์โชว์เช่นกันเมื่อสามวันก่อนดังนั้นจึงเป็นความคิดแรกของฉันถ้า OP เป็นหนึ่งในผู้สมัครที่นั่น
Boldewyn

เดียวกันเพียงแค่เห็นนี้เมื่อ Reddit ไม่กี่วันกลับ ...
Dentrasi

4

หากคุณอยู่ในระบบที่/bin/chmodไม่สามารถโหลดได้โดยตัวเชื่อมโยงแบบไดนามิก:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

สิ่งนี้ใช้ได้กับระบบ MacOS X ของฉัน


2

/ ช่วยเหลือ / chmod 555 / bin / chmod

ฉันคิดว่าคุณสามารถใช้ mtree ได้เช่นกัน


นี่จะเป็นทางออกที่ฉันโปรดปราน มันไม่ทำงานกับ linux อย่างน่าเสียดาย


1

สร้าง chmod ใหม่และใช้สิ่งนั้นสำหรับต้นฉบับ

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

การตั้งค่า umask จำนวน 000 จะไม่ให้สิทธิ์เรียกใช้ไฟล์เมื่อสร้างขึ้น มันจะดีที่สุดได้รับสิทธิ์ rw-rw-rw-
Barry Brown

2
@Barry: จริง ๆ แล้วมันขึ้นอยู่กับโหมดที่ส่งผ่านไปยัง creat (2) / open (2) / mkdir (2) / etc หาก umask == 0 และ syscall ที่สร้างไฟล์จะได้รับ 0777 สำหรับโหมดจากนั้นไฟล์จะเปิดบิตเรียกใช้งาน ตัวอย่างเช่น linkers / คอมไพเลอร์ผ่าน 0777 เมื่อเขียน“ ไฟล์ที่ปฏิบัติการได้” (เช่น(umask 000;gcc -o foo foo.c)จะสร้าง a fooด้วยโหมด 777) อย่างไรก็ตามเชลล์จำนวนมาก (มากที่สุด) ผ่าน 0666 เมื่อพวกเขาเปิด / สร้างไฟล์เพื่อเปลี่ยนเส้นทางซึ่งหมายความว่าคำตอบนี้จะไม่ทำงานภายใต้เชลล์จำนวนมาก
Chris Johnsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.