ทำไม Linux จึงอนุญาตให้ 'init = / bin / bash'


51

ฉันเพิ่งค้นพบว่าถ้าฉันแก้ไขด้วงก่อนที่จะบูตและฉันเพิ่มrw init=/bin/bashฉันท้ายด้วยรูตเชลล์

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

มีให้โดย GRUB หรือเคอร์เนลจริงหรือไม่


12
หากคุณต้องการ "แก้ไข" สิ่งนี้ให้ล็อค GRUB และ BIOS ของคุณด้วยรหัสผ่านและใส่ฮาร์ดดิสก์ของคุณเป็นลำดับแรกในการบู๊ต หากบุคคลอื่นมีการเข้าถึงทางกายภาพและสามารถนำฮาร์ดดิสก์ (ไม่เข้ารหัส) ลงในคอมพิวเตอร์เครื่องอื่นคุณก็หลงทางอยู่แล้ว
jofel

คำตอบ:


44

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

โพสต์ในรายการส่งเมล Red Hat นี้อธิบายบางสิ่ง:

ในระบบที่คล้าย Unix, init เป็นกระบวนการแรกที่จะถูกเรียกใช้และเป็นสุดยอดบรรพบุรุษของกระบวนการทั้งหมดที่เคยทำงาน มีหน้าที่เรียกใช้สคริปต์เริ่มต้นทั้งหมด

คุณกำลังบอกให้เคอร์เนล Linux รัน / bin / bash เป็น init แทนที่จะเป็นระบบ init [ ... ]

ดังนั้นคุณจะไม่ใช้ประโยชน์จากสิ่งใดคุณเพียงแค่ใช้ฟีเจอร์เคอร์เนลมาตรฐาน

นอกจากนี้ตามที่ระบุไว้ในความคิดเห็นrwแฟล็กนั้นแยกออกจากกันinit=มันเพิ่งบอกให้ระบบเมานต์ระบบไฟล์รูทว่าอ่าน - เขียน (เพื่อให้คุณสามารถแก้ไขไฟล์ที่กำหนดค่าผิดพลาดหรือเปลี่ยนรหัสผ่าน)


2
นอกจากนี้จะสมบูรณ์แยกจากrw init=อดีตเพิ่งบอกเคอร์เนลที่จะเมานต์ระบบไฟล์รากอ่าน - เขียน
Alexios

19

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

bootloader รับผิดชอบในการเริ่มระบบปฏิบัติการ ความปลอดภัยของระบบปฏิบัติการไม่ชัดเจนในตอนนั้น คุณสามารถโหลดเคอร์เนล, initrd, root fs ที่แตกต่างกันหรือตั้งค่าตัวเลือกต่าง ๆ (เช่นพา ธ init) หากคุณต้องการหยุดผู้ใช้ไม่ให้ทำสิ่งนั้นจะต้องทำที่ bootloader

ระบบของคุณ (อาจเป็นพีซีดังนั้น BIOS) จะโหลด bootloader และแน่นอนว่าความปลอดภัยของ bootloader จะไม่มีผลกับมัน หากคุณต้องการหยุดผู้ใช้ไม่ให้บูตไบออสจาก USB หรือเช่นนั้นคุณต้องทำเช่นนั้นในระดับนั้น

ระบบของคุณอาจอยู่บนโต๊ะแห่งหนึ่ง หากคุณต้องการหยุดผู้ใช้ไม่ให้เปิด coputer และสลับ hdd ด้วยตนเองหรือถอดไดรฟ์เพื่อติดตั้งในเครื่องของพวกเขาคุณต้องทำมันในระดับกายภาพ และมันจะไม่หยุดพวกเขาจากการรวบรวมโต๊ะทั้งหมดและขับรถออกไปในรถตู้พักผ่อนของพวกเขา ...

นั่นคือวิธีการรักษาความปลอดภัย ช้างลงมาตลอด


สรุปที่ดี อาจต้องการเพิ่มการเข้ารหัส hdd เป็นคำตอบที่เป็นไปได้กับ van
MvG

11

เมื่อคอมพิวเตอร์เริ่มต้นมันรันโปรแกรมที่เรียกว่า "init" มักจะพบได้ที่หรือ/bin/init /sbin/initโปรแกรมนี้รับผิดชอบการเริ่มต้นระบบทั้งหมดและสร้างสภาพแวดล้อมที่ใช้งานได้

การระบุinit=/bin/bashบอกให้เคอร์เนลรัน/bin/bashแทน (ซึ่งเป็นเชลล์) การระบุrwบอกให้เคอร์เนลบูตด้วยฮาร์ดดิสก์ในโหมดอ่าน - เขียนแทนโหมดอ่านอย่างเดียว ตามเนื้อผ้าเคอร์เนลเริ่มต้นด้วยดิสก์ในโหมดอ่านอย่างเดียวและกระบวนการในภายหลังตรวจสอบความสมบูรณ์ของดิสก์ก่อนที่จะเปลี่ยนเป็นอ่านเขียน


6

ประกอบเข้าด้วยกันจากkernel.org :

KNL     Is a kernel start-up parameter.

init=   [KNL]
        Format: <full_path>
        Run specified binary instead of /sbin/init as init
        process.

rw      [KNL] Mount root device read-write on boot

1

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


1

init=สามารถใช้ใด ๆที่ปฏิบัติการ

init=สามารถใช้ปฏิบัติการใด ๆ รวมทั้งเชลล์สคริปต์

ตัวอย่างเช่นที่นี่ฉันแสดงให้เห็นถึงวิธีการสร้าง C น้อยที่สุดโดยพลการรวบรวมinit: วิธีการสร้าง distro ลินุกซ์ที่กำหนดเองที่ทำงานเพียงโปรแกรมเดียวและไม่มีอะไรอื่น?

เหตุใดจึงไม่ยอมรับ/bin/bashทุกสิ่งซึ่งเป็นเพียงไฟล์ปฏิบัติการปกติและมีประโยชน์จริงหรือ :-)

ถัดไปคุณควรพยายามทำความเข้าใจกับสิ่งที่การแลกเปลี่ยนกับปกติของคุณinitเช่น systemd หรือ Busybox '

โดยพื้นฐานแล้วด้วยวัตถุดิบ/bin/bashคุณ:

การควบคุมงานสามารถคืนค่าได้ใน Busybox 'init และอื่น ๆ ที่คล้ายคลึงกันกับผู้นำ-ในinittab:

tty3::respawn:-/bin/sh

inittabรายการปกติมากขึ้นซึ่งใช้เข้าสู่ระบบและเก็บหอยวางไข่หากคุณ Ctrl + D คือ:

::respawn:/sbin/getty -L ttyS0 0 vt100

สิ่งที่ใช้gettyปฏิบัติการได้ แต่สิ่งที่ต้องทำ: ฉันไม่สามารถวางไข่เองได้หากไม่มี Busybox init: getty เริ่มจากบรรทัดคำสั่ง

คุณสามารถใช้การตั้งค่านี้เพื่อเล่นกับมันและไปถึงข้อสรุปข้างต้น

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