루트 쉘이 실수로 변경되었습니다. 유효한 쉘로 다시 변경하려면 어떻게해야합니까?


19

실수로 들어갔다

chsh -s /usr/bin 

대신에

chsh -s /bin/bash 

이제 루트 쉘에 로그인 할 수 없습니다. bash 쉘을 루트로 수동으로 시작하는 방법은 무엇입니까?


어떤 맥락에서이 작업을 수행 했습니까? 현재 터미널에서 사용자 기본 쉘?
jgr208

sudo 그룹에 사용자가 없습니까?
루이 F 리베이로

3
않는 sudo vipw일을?
Rui F Ribeiro

1
@RuiFRibeiro 예, 감사합니다. 해당 파일의 기본 루트 셸을 변경할 수 있다는 것을 몰랐습니다
ChiseledAbs

1
이 경우에는 필요하지 않지만 루트와 관련된 재앙을 실수로 만든 경우 일반적으로 컴퓨터를 단일 사용자 모드로 가져 와서 문제를 해결 한 다음 다중 사용자 모드로 되돌릴 수 있습니다.
boardrider

답변:


29

root는 액세스 권한이 없지만 sudo 그룹의 사용자는 여전히 권한있는 명령을 실행할 수 있습니다. 오류는 sudo가 아니라 sudo chsh명령의 다른 위치 (예 : chsh 오류) 인 것 같습니다.

따라서 sudo는 분명히 작동합니다.

passwd 파일은 다음을 사용하여 편집 할 수 있습니다.

sudo vipw

그리고 루트 쉘은 수동으로 변경되었습니다.

( /etc/passwd보통 첫 줄 )

root:x:0:0:root:/root:/bin/bash

안개 남자 VIPW

vipw 및 vigr 명령은 / etc / passwd 및 / etc / group 파일을 각각 편집합니다. -s 플래그를 사용하면 해당 파일의 섀도 버전 인 / etc / shadow 및 / etc / gshadow를 각각 편집합니다. 프로그램은 파일 손상을 방지하기 위해 적절한 잠금을 설정합니다.


3
나는에 대해 알지도 못하는 vipw하고 vigr, 감사합니다! 나는 항상 사용sudo vim /etc/passwd
고양이

3
당신은에 관심이있을 수 visudo sudo.ws/man/1.8.15/visudo.man.html , 너무 @tac
루이 F 리베

3
또는 sudo -e모든 편집에 대해이 잠금 편집 기능을 수행합니다.
kojiro

16

다른 계정에 액세스 할 수 있다고 가정하는 다른 옵션은 다음을 사용하여 기본 셸을 수동으로 재정의하는 것입니다 su --shell=/bin/bash.

-s, --shell = SHELL
/ etc / shells가 허용하는 경우 실행합니다.

이것의 주요 장점은 다른 권한있는 계정이 아닌 다른 계정에만 액세스 할 수 있다는 것 입니다.


8

보안상의 이유로 텍스트 또는 그래픽 및 유틸리티와 같은 로그인 susudo다른 사용자가 모든 대상 사용자의 쉘을 통해 그 명령을 실행 당신이 명령을 실행 할 수있다. 대상 사용자의 쉘이 작동하지 않으면 결과를 볼 수 있습니다.

setuid-root 바이너리 또는이를 우회 할 수있는 기능을 수행하는 여전히 기능적인 루트 쉘이없는 한, 복구 시스템 또는 라이브 이미지를 사용하여 재부팅하고 문제를 해결하는 것이 가장 좋습니다.

복구 시스템을 부팅하고 실제 시스템의 루트 파일 시스템을 어딘가에 마운트 /mnt/foo하고 편집 /mnt/foo/etc/passwd하여 셸을 수정하십시오. 저장하고 마운트를 해제하면 완료됩니다.


궁금한 점이 있습니다. 이렇게하면 / etc / passwd 파일이 일반 텍스트 대신 해시로 표시됩니다.
jgr208

1
/etc/passwd평문이 아닌가? 나는 적어도 10 년 동안 그것을 보지 못했습니다. 일부 시스템에서는 여전히 문제입니까? 어쨌든, chroot /mnt/foo chsh -s /bin/bash그 경우 트릭을 할 수 있다고 생각 합니까?
Celada

설명 된 문제는 없었지만 해커를 피하기 위해 일반 텍스트가 아닌 / etc / passwd가 있어야하는 잠겨있는 시스템으로 작업하고 액세스 권한을 얻는 경우 시스템을 훨씬 손상시킵니다. 흠, 그것이 효과가있을 수 있습니다. 단지 실제로 작동하는지 확인하지 않아도되기를 바랍니다.
jgr208

사용자 계정에서 sudo를 사용하여 / etc / passwd를 편집 할 수있었습니다. 쉘이이 파일에 정의되어 있다는 사실을 몰랐습니다.
ChiseledAbs

@ChiseledAbs 오, 당신은? 당신을 위해 좋은, 당신이 문제를 해결 기쁘게 생각합니다. 나는 그것이 당신을 할 것이라고 생각하지 않았습니다.
Celada

6

init=/bin/bash커널 명령 줄에 추가 하고 (grub으로 부팅하는 경우을 눌러 e부팅 항목 편집) 비밀번호를 입력하지 않아도 bash 셸이 루트로 실행됩니다. 루트 파일 시스템은 여전히 ​​읽기 전용으로 마운트 될 수 있으므로 먼저 다시 마운트해야합니다. 그런 다음로 쉘을 다시 변경할 수 있습니다 chsh.


4

sudo usermod -s /bin/bash jdoe

의 쉘 변경됩니다 은 jdoe 에를 bash. 그런 다음 sudo egrep jdoe /etc/passwd확인할 수 있습니다 .

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