나는 최근에 부팅하기 전에 GRUB을 편집하고 추가 rw init=/bin/bash
하면 루트 쉘로 끝나는 것을 알았습니다.
왜 이런 일이 발생하는지 알고 싶은 모든 것을 이해하고 싶은 상태에 있습니다. 나는 그것이 버그입니까? 기능입니까? 컴퓨터에 실제로 액세스 할 수있는 경우에만 작동하므로 관리자가 문제를 해결하는 데 도움이됩니까?
GRUB 또는 실제 커널에서 제공합니까?
나는 최근에 부팅하기 전에 GRUB을 편집하고 추가 rw init=/bin/bash
하면 루트 쉘로 끝나는 것을 알았습니다.
왜 이런 일이 발생하는지 알고 싶은 모든 것을 이해하고 싶은 상태에 있습니다. 나는 그것이 버그입니까? 기능입니까? 컴퓨터에 실제로 액세스 할 수있는 경우에만 작동하므로 관리자가 문제를 해결하는 데 도움이됩니까?
GRUB 또는 실제 커널에서 제공합니까?
답변:
이 기능은 시스템 유지 관리에 사용됩니다. sysadmin은 엉망 진 초기화 파일에서 시스템을 복구하거나 잊어 버린 암호를 변경할 수 있습니다.
Red Hat 메일 링리스트의이 게시물은 다음과 같은 사항을 설명합니다.
유닉스 계열 시스템에서 init는 첫 번째로 실행되는 프로세스이며 모든 프로세스의 궁극적 인 조상입니다. 모든 init 스크립트를 실행해야합니다.
Linux 커널에게 시스템 초기화가 아닌 / bin / bash를 초기화하여 실행하도록 지시하고 있습니다. [...]
따라서 아무 것도 악용하지 않고 표준 커널 기능 만 사용합니다.
또한 주석에서 언급했듯이 rw
플래그는와 별개이며 init=
시스템에 루트 파일 시스템을 읽기 / 쓰기로 마운트하도록 지시합니다 (예 : 잘못 구성된 파일을 편집하거나 비밀번호를 변경할 수 있음).
rw
완전히 분리되어 있습니다 init=
. 전자는 단지 커널에게 루트 파일 시스템 읽기-쓰기를 마운트하도록 지시합니다.
시스템에는 init 매개 변수와 같은 실행 및 디버깅 메커니즘이 있으며, 원치 않는 사용자가이를 활용하지 못하도록하는 보안 메커니즘이있을 수 있습니다. 이것들은 버그가 아닌 기능입니다.
부트 로더는 OS 시작을 담당합니다. 이 시점에서 OS 보안은 분명히 적용되지 않습니다. 다른 커널, initrd, root fs를로드하거나 다른 옵션 (예 : init 경로)을 설정할 수 있습니다. 사용자가 그렇게하지 못하게하려면 부트 로더에서 수행해야합니다.
시스템 (아마도 PC이므로 BIOS)은 부트 로더를로드하므로 부트 로더 보안은 적용되지 않습니다. 사용자가 USB 등으로 BIOS를 부팅하지 못하게하려면 해당 수준에서 BIOS를 부팅해야합니다.
시스템이 책상 위에있을 수 있습니다. 사용자가 코우 터를 열고 자신의 하드 디스크를 교체하거나 드라이브를 제거하여 기계에 장착하지 못하게하려면 물리적 레벨에서 수행해야합니다. 그리고 그들은 책상 전체를 집어 들고 도망가는 차에서 도망 치는 것을 막지 않습니다 ...
이것이 보안의 방식입니다. 코끼리가 끝까지 내려 왔습니다.
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
이것은 커널의 기능입니다.“호출자”, 즉 부트 로더, 뛰어난 유연성을 제공합니다. Grub은 부팅하는 동안 이러한 유연성을 활용할 수있는 방법을 제공하지만 이러한 종류의 변조를 제한하는 방법 도 제공합니다 . 권한이없는 사용자가 부팅 프로세스를 보류 할 수 있지만 하드 드라이브 자체에 대한 액세스는 거부되는 경우에 특히 적합합니다.
init=
모든 실행 파일을 취할 수 있습니다
init=
쉘 스크립트를 포함한 모든 실행 파일을 취할 수 있습니다 .
예를 들어 임의의 최소 C 컴파일을 만드는 방법을 보여줍니다 init
. 하나의 프로그램 만 실행하고 다른 프로그램은 실행하지 않는 사용자 정의 Linux 배포판을 만드는 방법은 무엇입니까?
그래서 왜 것 하지 동의 /bin/bash
단지 일반 실행 모든 것들의, 실제로 도움이 될 수 있습니까? :-)
다음으로, init
systemd 또는 Busybox와 같은 규칙 과의 상충 관계를 이해하려고 노력해야합니다. '
기본적으로 raw /bin/bash
로 다음을 수행하십시오.
init
존재합니다.작업 제어는 비지 박스 '초기화에 복원 할 수있는 유사한 다른 하나는 선도 inits -
에 inittab
:
tty3::respawn:-/bin/sh
inittab
Ctrl + D를 사용하는 경우 로그인을 사용하고 생성 쉘을 유지하는 보다 일반적인 항목은 다음과 같습니다.
::respawn:/sbin/getty -L ttyS0 0 vt100
어느 getty
실행 파일 을 사용 하지만 TODO : Busybox가 없으면 직접 실행할 수 없었습니다 init
. getty는 명령 줄에서 시작합니까?
이 설정 을 사용 하여이를 해결하고 위의 결론에 도달 할 수 있습니다.