Як почати інтерактивний баш із су


0

У мене немає sudo suімені користувача, проте у мене є його пароль. Я хочу мати сценарій, який передає пароль і дає мені інтерактивний баш.

Я спробував це:

echo mypassword | su - otherusr
Password: Last login: Wed Jul 25 12:09:38 COT 2018
[myuser@myserver ~]$ 

Він повертає мене до мого користувача, і я не маю інтерактивного башу з іншим користувачем.

Я також спробував:

echo mypassword | su -c "/bin/bash" - otherusr
echo mypassword | su -s "/bin/bash" - otherusr
echo mypassword | su -c "/bin/bash -i" - otherusr
Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
bash-4.2$ exit

Як я можу це зробити? Я хочу створити сценарій, який повертає мені інтерактивну сесію bash з іншим користувачем; не просто виконувати команду з іншим користувачем.


Схоже, ви працюєте в надмірно обмеженій оболонці, і ви не пересилаєте свій пароль. Спробуйте su, і введіть пароль зазвичай? Крім того, зазвичай ви не повинні використовувати цей метод для входу, оскільки тоді ваш пароль входить у журнали bash. Зазвичай це серйозне занепокоєння щодо безпеки. Якщо ви збираєтесь скористатися цим методом, також можете додати nopasswdдоsudoers
Кріс

Чому б su - otherusrі ні, і введіть пароль, якщо ви все одно збираєтесь інтерактивні. Схоже, ти вже в оболонці.
Хогстром

Відповіді:


0

За замовчуванням ні, sudoні suчитає пароль з stdin. Вони намагаються безпосередньо використовувати термінальний пристрій (деякі програми можуть навіть скаржитися при використанні в трубі). Існує sudo -Sваріант змінити цю поведінку, але, наскільки я знаю, подібного варіанту немає su.

Рішення: використання expect.

expectце програма, яка «розмовляє» з іншими інтерактивними програмами відповідно до сценарію. Дотримуючись сценарію, expectзнає, чого можна очікувати від програми і якою має бути правильна відповідь.

[…]

Загалом, expectце корисно для запуску будь-якої програми, яка вимагає взаємодії між програмою та користувачем. Все, що потрібно, це те, що взаємодію можна охарактеризувати програмно.

У вашому випадку сценарієм може бути:

#!/usr/bin/expect 

log_user 0
spawn /bin/su - otherusr
expect "Password: "
send "mypassword\n"
interact

Раджу зробити цей скрипт доступним лише вам ( chmod go-rwx). Іншим користувачам не можна дозволяти читати його, оскільки він міститься mypasswordв простому тексті; їм не можна дозволяти запускати його, оскільки це дає доступ до otherusrоболонки 's.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.