Linux에서 "init=/bin/bash"를 허용하는 이유는 무엇입니까?

Linux에서 "init=/bin/bash"를 허용하는 이유는 무엇입니까?

최근에 GRUB를 편집하고 부팅하기 전에 추가하면 rw init=/bin/bash루트 쉘이 생성된다는 사실을 발견했습니다.

다 알고 싶은 상태인데 왜 이런 일이 일어나는지 알고 싶다. 내 말은, 이것이 버그인가? 이것이 특징인가요? 컴퓨터에 물리적으로 접근할 수 있는 경우에만 작동하므로 관리자가 문제를 해결하는 데 도움이 됩니까?

GRUB 또는 실제 커널에서 제공됩니까?

답변1

이는 시스템 유지 관리를 위한 기능입니다. 이를 통해 시스템 관리자는 엉망인 초기화 파일로부터 시스템을 복구하거나 잊어버린 비밀번호를 변경할 수 있습니다.

Red Hat 메일링 리스트에 있는 이 기사몇 가지 사항을 설명했습니다.

Unix 계열 시스템에서 init는 실행되는 첫 번째 프로세스이자 실행 중인 모든 프로세스의 궁극적인 조상입니다. 모든 초기화 스크립트 실행을 담당합니다.

Linux 커널에 시스템 초기화가 아닌 /bin/bash를 init로 실행하도록 지시합니다. [...]

따라서 아무것도 활용하지 않고 단지 표준 커널 기능을 사용하고 있는 것입니다.

또한 설명에서 언급했듯이 이 rw플래그는 와 별개 init=이며 시스템에 루트 파일 시스템을 읽기-쓰기로 마운트하도록 지시합니다(따라서 잘못 구성된 파일을 편집하거나 비밀번호를 변경할 수 있음).

답변2

시스템에는 실행 및 디버그 메커니즘(예: 초기화 매개변수)이 있으며 원치 않는 사용자가 이를 악용하지 못하도록 방지하는 보안 메커니즘이 있을 수 있습니다. 이는 버그가 아닌 기능입니다.

부트로더는 운영 체제 시작을 담당합니다. 현재로서는 운영 체제 보안이 적용되지 않습니다. 다른 커널, initrd, 루트 fs를 로드하거나 다른 옵션(예: init 경로)을 설정할 수 있습니다. 사용자가 이 작업을 수행하는 것을 방지하려면 부트로더에서 수행해야 합니다.

귀하의 시스템(아마도 PC, 즉 BIOS)이 부트로더를 로드하므로 당연히 부트로더 보안이 적용되지 않습니다. 사용자가 USB 등에서 BIOS를 부팅하는 것을 방지하려면 이 수준에서 수행해야 합니다.

귀하의 시스템은 아마도 책상 어딘가에 있을 것입니다. 사용자가 자신의 컴퓨터를 열고 하드 드라이브를 자신의 하드 드라이브로 전환하거나 드라이브를 제거하여 컴퓨터에 설치하는 것을 방지하려면 물리적 수준에서 이 작업을 수행해야 합니다. 하지만 그렇다고 그들이 테이블 전체를 집어 들고 도주용 차를 타고 떠나는 것을 막지는 못합니다…

보안이 바로 그것입니다. 코끼리는 끝까지 내려왔습니다.

답변3

이것이 커널이 설계된 방식입니다. 가지고 있어야 한다무엇컴퓨터가 시작될 때 실행됩니다. 기본값이 있더라도 커널 명령줄을 사용하면 해당 기본값을 변경할 수 있습니다.

/bin/init일반적으로 이는 일반적 으로 또는 에서 찾을 수 있는 "init"라는 프로그램을 실행합니다 /sbin/init. 이 프로그램은 모든 시스템 시작과 사용 가능한 환경 생성을 담당합니다.

init=/bin/bash커널 /bin/bash(쉘)을 실행하도록 지정합니다 . rw읽기 전용 모드 대신 읽기-쓰기 모드로 하드 ​​디스크를 부팅하도록 커널에 지시하도록 지정합니다 . 전통적으로 커널은 읽기 전용 모드에서 디스크를 시작한 다음 읽기-쓰기 모드로 전환하기 전에 디스크의 무결성을 확인합니다.

답변4

init=복용 가능어느실행 가능 파일

init=다음을 포함한 모든 실행 파일이 허용됩니다.쉘 스크립트. 근본 원인일 가능성이 가장 높습니다.execsyscall은 ELF 실행 파일과 shebang을 직접 처리할 수 있습니다..

예를 들어, 여기에서는 임의로 최소한의 C 컴파일러를 만드는 방법을 보여줍니다 init.하나의 프로그램만 실행하고 다른 프로그램은 실행하지 않는 사용자 정의 Linux 배포판을 만드는 방법은 무엇입니까?

그럼 왜 이런 일이 일어나는 걸까요?아니요Accept /bin/bash, 가장 중요한 것은 단지 일반 실행 파일일 뿐이라는 것입니다. 실제로 유용합니까? :-)

init다음으로, systemd 또는 Busybox와 같은 일반 시스템과의 장단점이 무엇인지 이해하려고 노력해야 합니다.

기본적으로 raw 를 사용하면 /bin/bash다음을 수행할 수 있습니다.

-다음 머리말을 사용하여 Busybox의 init 및 기타 유사한 init에서 작업 제어를 복원할 수 있습니다 inittab.

tty3::respawn:-/bin/sh

inittab로그인을 사용하고 Ctrl+D를 수행할 때 생성된 쉘을 유지하는 보다 일반적인 항목은 다음과 같습니다.

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

실행 파일을 사용 getty하지만 TODO: Busybox 없이는 직접 생성할 수 없습니다 init.명령줄에서 getty를 시작하시겠습니까?

당신은 그것을 사용할 수 있습니다이 설정시도해보시고 위와 같은 결론을 내리세요.

관련 정보