아래 제공된 쉘 스크립트를 사용하여 루트로 로그인하려고 하면 오류가 발생합니다.
su: must be run from a terminal
스크립트( scriptfile.sh
)는 다음과 같습니다.
su -s <<EOF
echo Now i am root
whoami
EOF
터미널에서 su
이 작업을 성공적으로 수행할 수 있지만 기본적으로 루트로 로그인되어 있습니다.
참고로su
: 로 바꾸면 동일한 스크립트가 제대로 작동합니다 sudo
. 저는 이 스크립트를 루트가 아닌 일반 사용자로 실행하고 있습니다.
오류의 가능한 원인은 무엇입니까? 이 문제를 어떻게 해결할 수 있나요?
참고: 파일을 건드리지 않고 수행하고 싶습니다 /etc/sudoers
.
답변1
지금까지 내가 검색한 것은 구문/대화형 쉘일 가능성이 높지만 전문가는 아닙니다!
기술적으로 su를 쉘 스크립트에서 사용해서는 안 되지만 sudo가 더 안전하기는 하지만 다음은 저에게 효과적이었습니다.
이것은 작동합니다:
#!/bin/bash
exec su root --command 'echo -e "hello world" >> "/home/parallels/rootWasHere.txt"'
이는 또한 사실입니다:
#!/bin/bash
runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -c "$runAsRoot"
또한 su의 -s 옵션은 매뉴얼에 따라 쉘만 지정되어 있다. 그렇다고 해서 나중에 -s에 전달된 내용도 실행한다는 의미는 아닙니다. 따라서 다음과 같은 작업을 수행할 수 있을 것 같습니다.
#!/bin/bash
runAsRoot="
printf \"\nhey there\n\"
printf \"\nhello world, I am root and my shell is \$SHELL\n\" >> \"/home/parallels/rootWasHere.txt\"
"
exec su root -s /bin/zsh -c "$runAsRoot"
답변2
에서 인용https://netsec.ws/?p=337,
python -c 'import pty; pty.spawn("/bin/sh")'
echo os.system('/bin/bash')
/bin/sh -i
perl —e 'exec "/bin/sh";'
perl: exec "/bin/sh";
ruby: exec "/bin/sh"
lua: os.execute('/bin/sh')
(From within IRB) exec "/bin/sh"
(From within vi) :!bash
(From within vi) :set shell=/bin/bash:shell
(From within nmap) !sh
답변3
쉘에 다음을 추가할 수 있습니다.
export TERM=xterm