Ошибка: su: должно быть запущено из терминала

Когда я пытаюсь войти в систему под пользователем 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.

3
22.06.2020, 10:45
3 ответа

Судя по тому, что я до сих пор гуглил, вполне вероятно, что-то связанное с синтаксисом/интерактивной оболочкой, но я не эксперт!

Ниже работает для меня, даже если технически 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"
1
18.03.2021, 23:25

Вы можете добавить в свою оболочку следующее

export TERM=xterm
-5
18.03.2021, 23:25

Цитата из 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
0
01.07.2021, 14:22

Теги

Похожие вопросы