
내 목표는 /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
다음과 같이 번역됩니다:
- 쓰기를 위해 /etc/passwd 파일을 열도록 bash(승격되지 않음)에 지시합니다.
- 일부 인수를 사용 하여 명령을 실행
sudo
하고 1단계의 파일 설명자를 stdout으로 사용하도록 bash(아직 승격되지 않음)에 지시합니다.echo
일부 인수를 사용하여 명령을 실행하도록 sudo(setuid 루트)에 지시합니다.- echo(루트로 실행, 이는 /usr/bin/echo와 유사할 가능성이 높지만 일반적으로
echo
쉘 내장을 호출함)와 sudo에서 stdout을 상속하여 일부 텍스트를 stdout으로 출력하도록 지시합니다. - 작업이 완료되고 에코가 종료됩니다.
- echo(루트로 실행, 이는 /usr/bin/echo와 유사할 가능성이 높지만 일반적으로
- 작업이 완료되고 sudo가 종료됩니다. 루트로 실행되는 것이 아무것도 없습니다
- Bash(아직 상승하지 않음)는 /etc/passwd에 대한 파일 설명자를 닫습니다(쓰기 대기열 플러시).
- Bash는 다음 명령을 기다립니다.
물론 1단계는 실패합니다! 승격되지 않은 Bash는 쓰기를 위해 /etc/passwd를 열 수 없습니다. 따라서 bash: /etc/passwd: Permission denied
2단계의 하위 단계를 포함하여 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