Вийдіть судо посеред сценарію оболонки


3

У мене є сценарій оболонки, в якому більшість команд потрібно виконувати під sudo; проте останні кілька команд потрібно виконати як поточний користувач. Чи є спосіб я вийти з sudo та перейти на користувача, який увійшов зараз?

Якби я запускав це все з командного рядка, я міг би зробити щось на кшталт:

sudo su
[su commands]
exit
[user commands]

Однак exitскрипт зупинить на цій команді.


2
Ви розглядали можливість зміни сценарію до префікса sudoдо команд, які потрібно запустити як root? sudoВбудований механізм кешування облікових даних буде означати, що вам потрібно буде відповісти на запит пароля лише один раз, якщо тільки сценарій оболонки не працює дуже довго.
Аарон Міллер

Якщо цього не зробити, ви можете спробувати додати su $USERпісля кореневих команд і перед тим, як запустити їх як поточний користувач; Я впевнений, що кожен баш, який не був скручений у цілі набори химерності $USER, так що повинен бути здатний слугувати загальним методом створення оболонки з правами користувача, що ввійшов у систему.
Аарон Міллер

Ви впевнені, що все відбувається так, як ви пишете? sudo suмає відкрити кореневу оболонку для вас, і сценарій не повинен просуватися, поки ви не залишите його. Потім [su commands]буде виконано (з вашим обліковим записом користувача) і, нарешті, exitзакінчиться сценарій. Подумайте про додавання whoamiдо сценарію кількох позицій, щоб побачити, хто є активним користувачем у різних точках сценарію.
Тім

Якщо цього не робити, що робити, якщо ви просто su -замість цього sudo su? Це повинно запросити пароль для кореня, а потім створити підвищену оболонку, але я не впевнений, як exitбуде поводитися наступне в контексті сценарію оболонки - саме тому часто бажано використовувати Perl або Python для подібних завдань; вони можуть здатися, що вони представляють більш високу планку для вступу, але їх набагато більш передбачувана і менш бородавча поведінка більше, ніж відшкодовує зусилля на здобуття ознайомлення.
Аарон Міллер

@AaronMiller (2-й пост) Я б цього не робив. Якщо все працює так, як написав TomJ, це означатиме, що після виходу з внутрішньої оболонки користувача користувачеві (або скрипту) знову надаються кореневі привілеї.
Тім

Відповіді:


4

Ви розглядали можливість зміни сценарію до префікса sudoдо команд, які потрібно запустити як root? sudoВбудований механізм кешування облікових даних буде означати, що вам потрібно буде відповісти на запит пароля лише один раз, якщо тільки сценарій оболонки не працює дуже довго.


Або можна помістити послідовність команд, що виконуються через sudo, в сценарій оболонки і просто зробити sudo script.
Джуліана Холц

Механізм "кешування", який ви описуєте, не обов'язково може бути включений на даній машині. У мене він відключений.
Błażej Michalik

1

Не використовуйте sudo suабо su - <user>, тому що ви відкриєте підзаголовок з цією командою. Це буде не дуже добре.

Будь ласка, використовуйте, sudo "su commands"наприкладsudo "ls /home"

якщо ви дійсно хочете використовувати sudo su, ви можете використовувати його, ввівши, наприклад

sudo su -c "ls /tmp"

якщо у вас більше однієї команди, розділіть її на ;

sudo su -c "ls /tmp/; whoami"

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