Когда я пытаюсь войти в систему под пользователем root, используя приведенный ниже сценарий оболочки, выдается ошибка:
su: must be run from a terminal
Скрипт ( scriptfile.sh
) выглядит следующим образом:
su -s <<EOF
echo Now i am root
whoami
EOF
Хотя я может успешно выполнить su
с терминала, по умолчанию он входит в систему как пользователь root.
FYI: тот же скрипт работает нормально, когда мы заменяем su
на sudo
.
Я запускаю этот скрипт как обычный пользователь, а не как root.
В чем может быть возможная причина ошибки и как ее решить?
Примечание. Я хочу сделать это, не касаясь файла /etc/sudoers
.
Судя по тому, что я до сих пор гуглил, вполне вероятно, что-то связанное с синтаксисом/интерактивной оболочкой, но я не эксперт!
Ниже работает для меня, даже если технически 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"
Кроме того, что касается опции -s для su, которая указывает только оболочку в соответствии с руководством. Это не означает, что он также выполнит то, что было передано потом/ в -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"
Цитата из 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