"echo"로는 /etc/shadow에 쓸 수 없지만 "nano"로는 쓸 수 있습니다

"echo"로는 /etc/shadow에 쓸 수 없지만 "nano"로는 쓸 수 있습니다

내 목표는 /etc/passwd에 작성하여 권한을 루트로 확대하는 것입니다.

새 루트 사용자에 대한 비밀번호 "test1"을 생성했으며 openssl passwd test1 echo를 사용하여 /etc/passwd 파일에 새 항목을 추가합니다.sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd

하지만 이 마지막 명령을 수행하면 이 작업을 수행할 권한이 없다는 메시지가 표시됩니다.bash: /etc/passwd: Permission denied

하지만 명령을 사용 하고 파일 끝에 sudo nano /etc/passwd복사 하면 작동합니다!root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash

명령 에 어떤 문제가 있습니까 echo?

답변1

댓글을 통해 이미 답변을 받았지만 조금 더 확장하자면 다음과 같습니다.

sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd

다음과 같이 번역됩니다:

  1. 쓰기를 위해 /etc/passwd 파일을 열도록 bash(승격되지 않음)에 지시합니다.
  2. 일부 인수를 사용 하여 명령을 실행 sudo하고 1단계의 파일 설명자를 stdout으로 사용하도록 bash(아직 승격되지 않음)에 지시합니다.
    1. echo일부 인수를 사용하여 명령을 실행하도록 sudo(setuid 루트)에 지시합니다.
      1. echo(루트로 실행, 이는 /usr/bin/echo와 유사할 가능성이 높지만 일반적으로 echo쉘 내장을 호출함)와 sudo에서 stdout을 상속하여 일부 텍스트를 stdout으로 출력하도록 지시합니다.
      2. 작업이 완료되고 에코가 종료됩니다.
    2. 작업이 완료되고 sudo가 종료됩니다. 루트로 실행되는 것이 아무것도 없습니다
  3. Bash(아직 상승하지 않음)는 /etc/passwd에 대한 파일 설명자를 닫습니다(쓰기 대기열 플러시).
  4. Bash는 다음 명령을 기다립니다.

물론 1단계는 실패합니다! 승격되지 않은 Bash는 쓰기를 위해 /etc/passwd를 열 수 없습니다. 따라서 bash: /etc/passwd: Permission denied2단계의 하위 단계를 포함하여 2단계 또는 3단계의 어떤 부분도 발생하지 않습니다.

sudo nano /etc/passwd승격된 프로세스(sudo에서 루트 권한을 상속받은 nano)가 쓰기 위해 파일을 여는 프로세스이기 때문에 잘 작동합니다.

여기에서 echo를 사용하려면 bash 자체를 높여야 합니다. 이는 sudo 내에서 bash(또는 다른 셸)를 명시적으로 호출한 다음 수행할 작업을 알려주는 방식으로 수행할 수 있습니다.
sudo bash -c 'echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd'
또는 세 개의 별도 명령(나중 두 개는 상승된 bash 인스턴스에 제공됨)과 동일하게 수행할 수 있습니다.
sudo bash echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd exit

관련 정보