루트 사용자의 쉘을 잘못된 파일 경로로 변경하기 위해 'chsh'를 사용하는 것과 같은 바보 같은 일을했다고 가정 해 봅시다. / bin / 찾을 수없는 것을 인용하여 향후 루트 계정 로그인이 갑자기 실패하고 로그인 화면으로 다시 부팅됩니다. 복구 모드를 차단하거나 LiveCD를 삽입하여 / etc / passwd를 편집 할 때 시스템을 복구하는 옵션은 무엇입니까? 휠에 다른 사용자가 없다고 가정하십시오 (재미 있습니까?). 생각?
루트 사용자의 쉘을 잘못된 파일 경로로 변경하기 위해 'chsh'를 사용하는 것과 같은 바보 같은 일을했다고 가정 해 봅시다. / bin / 찾을 수없는 것을 인용하여 향후 루트 계정 로그인이 갑자기 실패하고 로그인 화면으로 다시 부팅됩니다. 복구 모드를 차단하거나 LiveCD를 삽입하여 / etc / passwd를 편집 할 때 시스템을 복구하는 옵션은 무엇입니까? 휠에 다른 사용자가 없다고 가정하십시오 (재미 있습니까?). 생각?
답변:
부팅 할 때 부팅 옵션에 추가 init=/bin/bash
(또는 다른 기능 셸의 경로)를 추가 하면 단일 사용자 셸로 바로 연결됩니다. 해당 환경 mount -o remount,rw /
에서 /etc/passwd
항목을 수정하기 전에 수행해야 할 수도 있습니다. 그런 다음 재부팅하거나 수행하십시오 exec /sbin/init 3
. 그냥 않습니다 하지 입력 exit
이 커널 패닉이 발생할 것 같은 *에서 Ctrl + D 또는.
2 단계 모드로로드 된 일부 시스템 (initrd 이미지 포함)에서는이 방법의 추가 변형이 필요할 수 있습니다. 부팅 옵션에 init=
및 가장 중요한가 포함되어있는 것을 발견하면 real_init=
넣을 위치 /bin/bash
는 후자의 매개 변수 (예 :) 여야합니다 real_init=/bin/bash
.
그 환경에서 쉘은 커널 이 init 프로그램 ( 커널이 알고있는 유일한 프로세스)으로 인식하기 때문에 커널의 눈 아래에 실행중인 시스템을 나타냅니다. 커널에게 시스템 종료를 지시하지 않고 프로세스를 갑자기 종료하면 커널 패닉이 발생해야합니다. (주변의 모든 것이 어둡고 조용 해지면 당황하지 않겠습니까?)
exec
,하지만 난 너무 많은 사전에 마운트 포인트와 엉망으로 좋은 것은 아닙니다 같아요.
/etc/passwd
) 을 수정할 수 없습니다 .
/
init를 실행하기 전에 다른 모든 마운트 (마운트 이외의 ) 마운트 해제를 처리하려고한다고 말하고있었습니다 .
/bin/bash
시점에서 정확히 실행은 다음 /sbin/init
정상 부팅시 실행됩니다. 따라서 당시 시스템에서 수행 할 수있는 조치는 없습니다.
su
실행할 쉘을 사용 하고 지정할 수 있습니다 (다른 사용자가 없음에 대한 메모로는 이것이 불가능하다는 것을 암시하려고하는지 확실하지 않습니다 wheel
).
su -c /bin/bash
그렇지 않으면 ssh 데몬이 루트에 로그인을 허용하면 비슷한 것을 할 수 있습니다.
ssh root@localhost /bin/bash
예를 들어 부트 로더에서 쉘을 init로 설정할 수도 있습니다 init=/bin/ksh
.
부트 로더가 커널 매개 변수를 실시간으로 편집 할 수 있도록 구성된 경우 해결책은 재부팅하여 셸을 초기화 프로세스로 사용하는 것입니다 (예 :) init=/bin/bash
. 그런 다음 손으로 마운트해야하는 모든 것을 마운트하고 편집하십시오 /etc/passwd
. sync
평소와 같이 다시 부팅하십시오 init
.
당신의 질문의 요점이 당신이 뿌리가 될 수있는 모든 길을 가졌다는 것이라면, 정의상 당신은 뿌리가 될 수 없습니다.
유닉스 시스템에서 3 가지 방법으로 루트가되는 것이 일반적이다 :
root
프롬프트 로그인에 루트 암호를 입력. 이것은 루트 쉘을 실행합니다.su
루트 암호를 실행 하고 입력하여 루트가됩니다. 일부 시스템에서는 특정 그룹에 속해 있어야합니다 (종종이라고도 함 wheel
). 다른 시스템에서 루트 암호를 아는 사람은 누구나 루트가 될 수 있습니다. 인증을 위해 PAM을 사용 pam_wheel
하는 시스템 은 휠 그룹 (있는 경우)을 관리하는 데 사용 됩니다. 로 명령을 지정하면 su -c
루트 쉘을 통해 실행됩니다.sudo
자신의 암호를 실행 하고 입력하여 루트가 됩니다. 관리자는 사용자 계정에 sudo 권한을 부여해야합니다. sudoers
파일에 제한이없는 한 , 루트 쉘에 관계없이 모든 명령을 실행할 수 있습니다.루트 쉘을 사용할 수 없도록 보호하는 전통적인 방법은 UID 0으로 다른 계정을 정의하고 다른 쉘 ( toor
일반 이름)을 정의하는 것입니다. 예를 들어, 루트 셸이 동적으로 연결된 실행 파일 (메모리를 절약하는 것이 좋습니다)이고 라이브러리 업그레이드가 잘못되면 루트 셸을 사용하지 못할 수 있습니다. 대체 루트 계정에는 정적으로 링크 된 실행 파일이있을 수 있으며, BusyBox 와 같은 공통 유틸리티가 내장되어있을 수 있습니다 .
위의 답변은 훌륭하며 읽을 수 있습니다. 이러한 접근 방식의 세부 사항을 기억하지 못하고 재부팅하지 않아도되는 경우, 항상 라이브 CD 배포판을 사용하여 시스템을 부팅하고 / 파티션을 마운트 한 다음 / etc / passwd를 편집하고 재부팅 할 수 있습니다. 위의 솔루션만큼 우아하지는 않지만 기억하기 쉽습니다.
/etc/passwd
파일 을 수동으로 편집 할 때 발생하는 위험을 지적해야 합니다. 이것 이외의 좋은 점-방금 내 대답에 동일한 제안을 추가하고 싶었습니다.