chroot: ไม่สามารถเรียกใช้คำสั่ง '/ bin / bash': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


54

เมื่อฉันเรียกใช้chrootคำสั่งจะมีข้อผิดพลาด:

failed to run command ‘/bin/bash’: No such file or directory 

1
คำถามนั้นถือได้ว่าเป็นunix.stackexchange.com/questions/76490/หรือไม่? คำตอบสำหรับคำถามแสดงถึงทางออกที่เป็นไปได้สำหรับปัญหาที่ควรค่าแก่การเชื่อมโยงอย่างแน่นอน แต่นั่นไม่ได้ทำให้คำถามนั้นซ้ำซ้อน
Karl Richter

1
ปัญหาสำหรับฉันคือฉันใช้ 32-bit Live CD เพื่อติดตั้งดิสก์ OS 64- บิตและ chroot กับมัน เคอร์เนล 32- บิตไม่สามารถรัน bash 64- บิตได้ ทางออกคือการได้รับ Live CD 64 บิต (สำเนาที่เชื่อมโยงนั้นไม่เกี่ยวข้องกันทั้งหมด)
Leons

สิ่งนี้ไม่ได้ซ้ำกันแม้จะมีคำอธิบายของแหล่งที่มาของปัญหาที่ใช้กับคำถามทั้งสอง คำถามนี้ถูกทำเครื่องหมายว่าซ้ำกันเป็นเรื่องเกี่ยวกับไลบรารีที่หายไปในการติดตั้งทั่วไปในขณะที่คำถามนี้เกี่ยวกับข้อผิดพลาดที่เกิดขึ้นในสภาพแวดล้อม chrooted โดยเฉพาะ
bschlueter

คำตอบ:


33

ข้อผิดพลาดนี้หมายความว่าไม่มี/bin/bashไดเรกทอรีภายใน chroot ตรวจสอบให้แน่ใจว่าคุณชี้ไปที่bashไฟล์ปฏิบัติการ (หรือเชลล์อื่น) อยู่ในchrootไดเรกทอรี

หากคุณได้/mnt/somedir/usr/bin/bashดำเนินการแล้วchroot /mnt/somedir /usr/bin/bash


2
มีไฟล์ / bin / bash ในโฟลเดอร์
rootfs

2
มันอาจจะเกิดจากความล้มเหลวในบางคำสั่ง / สายใน/root/.bashrcหรือในของคุณ/root/.bash_profile chrootคุณสามารถเปลี่ยนชื่อไฟล์เหล่านี้ได้ชั่วคราวหรือไม่? คุณสามารถตรวจสอบให้แน่ใจว่าbashสามารถใช้งานได้ ( chmod +x /chroot/bin/bash) หรือไม่
phoops

aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs chroot: ล้มเหลวในการเรียกใช้คำสั่ง '/ bin / bash': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
USER3254789

37
ฉันคิดออก bin / bash อยู่ที่นั่น แต่ฉันไม่มี / lib และ / lib64 อยู่ข้างใน / bin / bash ขึ้นอยู่กับ (ofc) บน libc, ld-linux, libdl ฯลฯ ... ดังนั้นง่าย ๆ cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / ก็เพียงพอแล้ว (คุณสามารถผูก - ofc เหล่านั้น แต่ฉันคัดลอกเพราะฉันต้องการเรียกใช้บางสิ่งที่อันตรายซึ่งอาจทำให้ไฟล์เหล่านั้นเสียหายใน rootfs) ข้อความจาก chroot อาจมีความหมายมากกว่า "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" จริงๆหมายถึง "ฉันไม่สามารถเรียกใช้ sh ... "
Dalibor Filus

1
@EmilVatai เพิ่ม :-)
Dalibor Filus

13

ฉันมี/bin/bashอยู่ในไดเรกทอรี chrooted แต่ฉันไม่มี / lib และ / lib64 อยู่ข้างใน ข้อความจาก chroot อาจเป็นคำอธิบายเพิ่มเติม "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" หมายถึง "ฉันไม่สามารถเรียกใช้ ... "

/bin/bashขึ้นอยู่กับหลักสูตรใน libc, ld-linux, libdl ฯลฯ คุณสามารถใช้ldd /bin/bashเพื่อดูว่าต้องการไลบรารีใด

1) คุณสามารถmount -o bindไดเรกทอรีเหล่านี้ภายใต้ chroot 2) หรือคุณสามารถคัดลอกไลบรารีเหล่านี้ไปยัง chroot ถ้าคุณไม่เชื่อถือ env chrooted ที่จะไม่ทำลายพวกเขาเช่น:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/

สิ่งนี้จะสร้างรายการซ้ำ .. ซึ่งไม่ได้รับการปรับให้เหมาะสมเมื่อเรามีการตั้งค่าจำนวนมาก
สีเหลืองและสีแดง

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

4

chrootพยายามเริ่มเชลล์ที่ตั้งค่าไว้ใน$SHELLตัวแปรสภาพแวดล้อมของคุณตามค่าเริ่มต้น แต่มันจะมองหามันใน dir รูทใหม่ของคุณซึ่งดูเหมือนจะไม่มีอยู่/bin/bashดังนั้นจึงไม่สามารถเริ่มได้

คุณสามารถบอก chroot ให้เริ่มโปรแกรมอื่นภายในรูทใหม่โดยเพิ่มมันเข้าไปในพารามิเตอร์:

chroot /your/new/root /bin/foo --options...

โปรดทราบว่าเส้นทางของคำสั่งจะถูกตีความภายในรูทใหม่ของคุณดังนั้นในตัวอย่างนี้โปรแกรมที่ถูกเรียกใช้นั้นมีอยู่จริง/your/new/root/bin/foo


2
มีไฟล์ / bin / bash ในไฟล์ rootfs ดังนั้นปัญหาคืออะไร
USER3254789

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

2

ฉันได้รับข้อผิดพลาดเดียวกันเมื่อพยายาม ssh ไปยังบัญชี chrooted บนเซิร์ฟเวอร์ระยะไกล ในกรณีของฉันฉันขาดไฟล์ต่อไปนี้ในไดเรกทอรี lib64 ระยะไกล เซิร์ฟเวอร์คือ Centos6.9

ld-linux-x86-64.so.2

มันได้รับการแก้ไขโดยดำเนินการดังต่อไปนี้:

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/

ไม่ได้แก้ไขสำหรับฉัน แต่ทำการcp -r /lib /lib64 /secure/jailแก้ไขฉันต้องการบางสิ่งบางอย่างจากทั้ง lib และ lib64 และฉันก็ไม่ได้คิดอะไรเลย (อาจเป็นเพราะฉันเปิดใช้งาน multiarch)
hanshenrik

0

คุณจำเป็นต้องเรียกใช้ ldd กับ bash ldd $(which bash)จากนั้นคุณอาจพบว่าไม่มีการพึ่งพาเช่นหากคุณไม่ได้เมานต์ / คัดลอก lib64 สำหรับระบบ 64 มันจะผ่านข้อผิดพลาดนี้


0

ในกรณีที่คุณทำการคอมไพล์ข้ามคุณจำเป็นต้องใช้ตัวจำลอง qemu ซึ่งสามารถรัน / mnt / somedir / bin / bash เมื่อคุณคัดลอก qemu-arm-static (ฉันกำลังทำสิ่งนี้เพื่อ armhf) ลงใน / mnt / somedir / usr / bin คุณจะสามารถทำ chroot

ลองดูรายละเอียดเพิ่มเติมได้ที่: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html


1
ไม่มีข้อบ่งชี้ว่านี่คือสิ่งที่ผู้ใช้พยายามทำ
Kusalananda

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