
최근에 부팅하기 전에 GRUB를 편집하고 추가하면 rw init=/bin/bash
루트 쉘이 생성된다는 사실을 알게 되었습니다.
모든 것을 이해하고 싶은 상태에 있기 때문에 왜 이런 일이 발생하는지 알고 싶습니다. 버그인가? 기능인가요? 컴퓨터에 물리적으로 접근할 수 있는 경우에만 작동하므로 관리자가 문제를 해결하는 데 도움이 됩니까?
GRUB 또는 실제 커널에서 제공됩니까?
답변1
이것은 기능이며 시스템 유지 관리에 사용됩니다. 이를 통해 시스템 관리자는 엉망인 초기화 파일에서 시스템을 복구하거나 잊어버린 암호를 변경할 수 있습니다.
Red Hat 메일링 리스트에 있는 이 게시물몇 가지를 설명합니다:
Unix 계열 시스템에서 init는 실행되는 첫 번째 프로세스이자 지금까지 실행된 모든 프로세스의 궁극적인 조상입니다. 모든 init 스크립트 실행을 담당합니다.
Linux 커널에 시스템 초기화가 아닌 /bin/bash를 init로 실행하도록 지시하는 것입니다. [...]
따라서, 당신은 아무것도 이용하지 않고 단지 표준 커널 기능을 사용하고 있는 것입니다.
게다가 주석에 언급된 바와 같이 플래그 rw
는 와 별개이며 init=
시스템에 루트 파일 시스템을 읽기-쓰기로 마운트하도록 지시합니다(예를 들어 잘못 구성된 파일을 편집하거나 비밀번호를 변경할 수 있음).
답변2
시스템에는 실행 및 디버깅을 위한 메커니즘(예: init 매개변수)이 있으며 원치 않는 사용자가 이러한 기능을 이용하지 못하도록 방지하는 보안 메커니즘도 있을 수 있습니다. 이는 버그가 아닌 기능입니다.
부트로더는 OS 시작을 담당합니다. 그 시점에는 OS 보안이 분명히 적용되지 않습니다. 다른 커널, initrd, root fs를 로드하거나 다른 옵션(예: init 경로)을 설정할 수 있습니다. 사용자가 이를 수행하지 못하도록 하려면 부트로더에서 수행해야 합니다.
귀하의 시스템(아마도 PC, 즉 BIOS)은 부트로더를 로드하므로 당연히 부트로더 보안이 적용되지 않습니다. 사용자가 USB 등에서 BIOS 부팅을 수행하지 못하도록 하려면 해당 수준에서 수행해야 합니다.
시스템이 책상 어딘가에 있을 수도 있습니다. 사용자가 컴퓨터를 열고 HDD를 자신의 것으로 전환하거나 드라이브를 제거하여 컴퓨터에 마운트하는 것을 막으려면 물리적 수준에서 수행해야 합니다. 그리고 그것은 그들이 책상 전체를 들고 도주용 밴을 타고 떠나는 것을 막지 못할 것입니다...
보안이 바로 그런 것입니다. 코끼리는 끝까지 내려갑니다.
답변3
이것은 단순히 커널이 설계된 방식입니다. 있어야합니다무엇컴퓨터가 시작될 때 실행되도록 하고, 기본값이 있는 동안 커널 명령줄을 사용하면 해당 기본값을 변경할 수 있습니다.
일반적으로 "init"라는 프로그램을 실행하며 일반적으로 /bin/init
또는 에서 찾을 수 있습니다 /sbin/init
. 이 프로그램은 모든 시스템 시작과 사용 가능한 환경 생성을 담당합니다.
지정하면 init=/bin/bash
커널이 /bin/bash
대신 실행되도록 지시합니다(쉘). 지정하면 rw
커널이 읽기 전용 모드 대신 읽기-쓰기 모드에서 하드 디스크로 부팅하도록 지시합니다. 전통적으로 커널은 읽기 전용 모드의 디스크로 시작하고 나중에 프로세스에서 읽기-쓰기로 전환하기 전에 디스크의 무결성을 확인합니다.
답변4
init=
가져가도 돼어느실행 가능
init=
다음을 포함한 모든 실행 파일을 사용할 수 있습니다.쉘 스크립트. 근본적인 이유는 다음과 같습니다.exec
syscall은 ELF 실행 파일과 shebang을 모두 직접 처리할 수 있습니다..
예를 들어 다음은 임의의 최소 C 컴파일을 만드는 방법을 보여줍니다 init
.프로그램 하나만 실행하고 다른 프로그램은 실행하지 않는 사용자 정의 Linux 배포판을 만드는 방법은 무엇입니까?
그렇다면 왜 그럴까요?~ 아니다accept /bin/bash
, 일반 실행 파일이고 실제로 유용할 수 있습니까? :-)
init
다음으로, systemd나 Busybox와 같은 일반적인 사용과의 장단점이 무엇인지 이해하려고 노력해야 합니다 .
기본적으로 raw 를 사용하면 /bin/bash
다음이 가능합니다.
- 비밀번호로 로그인을 제어하는 기능을 상실합니다. 그러나 이는 때때로 바람직합니다(예: 시스템 에뮬레이션을 수행할 때).Buildroot BusyBox init에서 루트 사용자 이름이나 비밀번호를 입력하지 않고 자동으로 로그인하는 방법은 무엇입니까?
- 작업 제어를 잃습니다. 예: Ctrl + C가 작동하지 않습니다.
- Ctrl+C를 누르면 쉘이 종료되고 커널이 패닉
init
상태 가 됩니다.
-
작업 제어는 Busybox' init 및 기타 유사한 초기화 에서 다음과 같이 복원될 수 있습니다 inittab
.
tty3::respawn:-/bin/sh
inittab
Ctrl+D를 수행하면 로그인을 사용하고 쉘을 계속 생성하는 보다 일반적인 항목은 다음과 같습니다.
::respawn:/sbin/getty -L ttyS0 0 vt100
실행 파일을 사용 getty
하지만 TODO: Busybox 없이는 직접 생성할 수 없습니다 init
.명령줄에서 시작하시겠습니까?
당신이 사용할 수있는이 설정그것을 가지고 놀면서 위의 결론에 도달합니다.