Linux에서 왜 'init = / bin / bash'를 허용합니까?


51

나는 최근에 부팅하기 전에 GRUB을 편집하고 추가 rw init=/bin/bash하면 루트 쉘로 끝나는 것을 알았습니다.

왜 이런 일이 발생하는지 알고 싶은 모든 것을 이해하고 싶은 상태에 있습니다. 나는 그것이 버그입니까? 기능입니까? 컴퓨터에 실제로 액세스 할 수있는 경우에만 작동하므로 관리자가 문제를 해결하는 데 도움이됩니까?

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


12
이 문제를 "수정"하려면 GRUB과 BIOS를 암호로 잠그고 하드 디스크를 먼저 부팅 순서로 설정하십시오. 다른 사람이 물리적으로 액세스 할 수 있고 (암호화되지 않은) 하드 디스크를 다른 컴퓨터에 넣을 수
있다면

답변:


44

이 기능은 시스템 유지 관리에 사용됩니다. sysadmin은 엉망 진 초기화 파일에서 시스템을 복구하거나 잊어 버린 암호를 변경할 수 있습니다.

Red Hat 메일 링리스트의이 게시물은 다음과 같은 사항을 설명합니다.

유닉스 계열 시스템에서 init는 첫 번째로 실행되는 프로세스이며 모든 프로세스의 궁극적 인 조상입니다. 모든 init 스크립트를 실행해야합니다.

Linux 커널에게 시스템 초기화가 아닌 / bin / bash를 초기화하여 실행하도록 지시하고 있습니다. [...]

따라서 아무 것도 악용하지 않고 표준 커널 기능 만 사용합니다.

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


2
또한와 rw완전히 분리되어 있습니다 init=. 전자는 단지 커널에게 루트 파일 시스템 읽기-쓰기를 마운트하도록 지시합니다.
Alexios

19

시스템에는 init 매개 변수와 같은 실행 및 디버깅 메커니즘이 있으며, 원치 않는 사용자가이를 활용하지 못하도록하는 보안 메커니즘이있을 수 있습니다. 이것들은 버그가 아닌 기능입니다.

부트 로더는 OS 시작을 담당합니다. 이 시점에서 OS 보안은 분명히 적용되지 않습니다. 다른 커널, initrd, root fs를로드하거나 다른 옵션 (예 : init 경로)을 설정할 수 있습니다. 사용자가 그렇게하지 못하게하려면 부트 로더에서 수행해야합니다.

시스템 (아마도 PC이므로 BIOS)은 부트 로더를로드하므로 부트 로더 보안은 적용되지 않습니다. 사용자가 USB 등으로 BIOS를 부팅하지 못하게하려면 해당 수준에서 BIOS를 부팅해야합니다.

시스템이 책상 위에있을 수 있습니다. 사용자가 코우 터를 열고 자신의 하드 디스크를 교체하거나 드라이브를 제거하여 기계에 장착하지 못하게하려면 물리적 레벨에서 수행해야합니다. 그리고 그들은 책상 전체를 집어 들고 도망가는 차에서 도망 치는 것을 막지 않습니다 ...

이것이 보안의 방식입니다. 코끼리가 끝까지 내려 왔습니다.


좋은 요약입니다. 밴에 대한 가능한 대답으로 hdd 암호화를 추가 할 수 있습니다.
MvG

11

컴퓨터가 시작되면 일반적으로 /bin/init또는에있는 "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. 하나의 프로그램 만 실행하고 다른 프로그램은 실행하지 않는 사용자 정의 Linux 배포판을 만드는 방법은 무엇입니까?

그래서 왜 것 하지 동의 /bin/bash단지 일반 실행 모든 것들의, 실제로 도움이 될 수 있습니까? :-)

다음으로, initsystemd 또는 Busybox와 같은 규칙 과의 상충 관계를 이해하려고 노력해야합니다. '

기본적으로 raw /bin/bash로 다음을 수행하십시오.

작업 제어는 비지 박스 '초기화에 복원 할 수있는 유사한 다른 하나는 선도 inits -inittab:

tty3::respawn:-/bin/sh

inittabCtrl + D를 사용하는 경우 로그인을 사용하고 생성 쉘을 유지하는 보다 일반적인 항목은 다음과 같습니다.

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

어느 getty실행 파일 을 사용 하지만 TODO : Busybox가 없으면 직접 실행할 수 없었습니다 init. getty는 명령 줄에서 시작합니까?

이 설정 을 사용 하여이를 해결하고 위의 결론에 도달 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.