bash에서 zsh로 전환한 후 루트 권한을 얻는 방법은 무엇입니까?

bash에서 zsh로 전환한 후 루트 권한을 얻는 방법은 무엇입니까?

이상하게도 bash에서 zsh로 전환한 후 루트에 액세스할 수 없습니다.

normalusername저는 일반적으로 권한이 낮은 일반 사용자(사용자 이름은)로 로그인한 후 "su"를 사용하여 루트로 로그인합니다. 모두 괜찮습니다. 그러나 루트 셸을 bash에서 zsh로 전환한 후 su를 통해 로그인하려고 하면 다음과 같은 결과가 나타납니다.

normalusername@(none):~$ su
Password: (enter the correct password)
Cannot execute zsh: No such file or directory

Mac에서 루트로 직접 SSH를 통해 접속하면 다음과 같은 결과가 나타납니다.

localhost:~ myname$ ssh -lroot 106.186.120.20
[email protected]'s password: (enter the correct/incorrect password)
Permission denied, please try again.

올바른 비밀번호를 입력했는지 여부에 관계없이 계속해서 나타납니다.

그래서 의도적으로 일반 사용자에게 잘못된 비밀번호 "su"를 입력하여 다음과 같은 결과를 얻었습니다.

normalusername@(none):~$ su
Password: (entered a wrong password and pressed enter)
(pressed enter)
su: Authentication failure

잘못된 비밀번호를 입력했는데 아무것도 보이지 않아서 두 번 입력했더니 결과가 enter나왔습니다 .su: Authentication failure

여러번 시도해 보았는데 결론은 이렇습니다.

  1. 올바른 비밀번호를 입력하면 "zsh를 실행할 수 없습니다: 해당 파일이나 디렉터리가 없습니다"라는 메시지가 나타납니다.
  2. enter비밀번호를 잘못 입력하면 2~6회 입력할 때까지 아무 것도 표시되지 않습니다.

이것은 내가 단지 "올바른 비밀번호"를 잊어버린 것이 아니라는 것을 의미하는 것 같습니다. 그런데 어떻게 루트에 접근할 수 있나요?

의 항목은 /etc/passwd다음과 같습니다.

root:x:0:0:root:/root:zsh

답변1

노력하다: cd /usr/bin; su. zsh에 절대 경로를 제공하지 않았기 때문입니다. 기존 디렉토리로 변경하면 su일부 시스템에서 작동합니다. 한 가지 예:PWDzsh

% su
Password:
su: zsh: No such file or directory
% cd /usr/local/bin
% su
Password:
# print $OSTYPE
freebsd10.0
#

답변2

귀하의 의견 /etc/passwd

root:x:0:0:root:/root:zsh

이것은 잘못된 항목입니다. 쉘은 실행 파일의 전체 경로여야 하며 로그인 프로그램은 $PATH 조회를 수행하지 않습니다.

일반적인 방법으로는 루트 계정에 로그인할 수 없습니다. 예를 들어 sudo vipw계정에 sudo 권한이 있는 경우 sudo를 사용하여 명령을 호출할 수 있습니다 . 이는 대상 계정의 로그인 셸 설정을 우회하는 유일한 일반적인 방법입니다.

sudoer가 아닌 경우 루트 계정에서 자신을 잠갔을 수 있습니다. 시스템을 수리하려면 콘솔 액세스가 필요합니다. 단일 사용자 모드에서 시작(참조:시스템 관리자(루트)로 명령을 실행하는 방법) 및 /etc/passwd포함하도록 편집

root:x:0:0:root:/root:/bin/zsh

(시스템에서 zsh에 대한 올바른 경로를 사용하십시오).

일부 관리자가 설정계정UID는 0이지만 다른 쉘을 사용합니다(일반적으로 정적으로 링크된 바이너리, 예:허리띠, 이러한 잘못된 구성이 있는 경우에도 루트 로그인을 허용합니다(가장 일반적인 잘못된 구성은 일반 쉘에서 손상된 공유 라이브러리입니다).

앞으로 이러한 문제를 방지하려면 직접 편집하는 chsh대신 명령을 사용하여 사용자 쉘을 변경하십시오 /etc/passwd. 파일을 편집해야 /etc/passwd하거나 파일에 대한 루트 액세스 권한을 얻어야 하는 경우 터미널에서 루트 셸을 열어 두고 루트로 로그인할 수 있다는 확신이 들 때까지 닫지 마십시오.

답변3

  • 현재 쉘을 확인하세요

    grep '^root:' /etc/passwd
    

    줄 끝에 루트가 사용하는 쉘의 전체 경로가 표시되어야 합니다(예: ) /bin/zsh. 그런 다음 경로의 철자가 틀리지 않았는지, 파일이 존재하는지, 올바른 권한이 설정되었는지( read 및 eecute x) 확인하십시오.

  • 경로가 잘못된 경우 zsh실행 파일이 있는 위치를 확인하세요.

    type zsh
    
  • 그런 다음 su루트에 대한 올바른 쉘 경로를 사용하십시오 /bin/zsh. 예를 들면 다음과 같습니다.

    su -s /bin/zsh -
    
  • chsh마지막으로 기본 쉘을 다음으로 변경하기 위해 실행합니다 ./bin/zsh

관련 정보