Как выполнить часть сценария с уменьшенными полномочиями?

Если Вы НЕ работаете с X программами с окнами, которые могут быть отправлены ключи, Вы, вероятно, ищете expect, удобная и очень настраиваемая программа для выполнения других интерактивных программных оболочек, как будто пользователь управлял терминалом. Можно установить программные ответы для ответа на различный вывод с различными исходными данными.

7
29.01.2011, 00:56
5 ответов

Используйте подоболочку: (su -c 'psql -U postgres -c "<command>"' postgres) > file

В подоболочке можно отбросить полномочия сделать работа, но производить перенаправляется к исходной оболочке, которая все еще имеет исходные полномочия.

5
27.01.2020, 20:16

Можно хотеть использовать этот прием:

{ anycommand } | su -c 'tee file' user

tee(1) утилита POSIX, таким образом, можно полагаться на ее доступность.


Или, с sudo:

{ anycommand } | sudo -u user 'tee file'
5
27.01.2020, 20:16
  • 1
    Спасибо за Вашу идею. Однако я сталкиваюсь с двумя проблемами: su не имеет-u опции, по крайней мере, на моей машине. Выполнение его правильно (su-c управляют пользователем) приводит к другой проблеме, а именно, что su должен быть выполнен от терминала. Это, вероятно, не работало бы так или иначе, поскольку su открывает новую подоболочку с той командой. –   28.01.2011, 22:20
  • 2
    @Legate имеет Вас sudo в Вашей системе? –  ulidtko 28.01.2011, 22:23
  • 3
    @ulidtko:Да. –   28.01.2011, 22:52
  • 4
    затем просто использует sudo -u postgres psql -c '...' > file и отредактируйте sudoers для отключения подсказок пароля для этой команды –  gelraen 30.01.2011, 23:33

Можно работать, сценарий оболочки с пользователем имеет лучшее разрешение записи (такое как корень), и когда Вы производите данные, должен записать в папку, что пользовательская пост-ГРЭС базы данных может записать в (такие как/tmp)

после конца записи данных переместите его в каталог, который Ваш сценарий оболочки имеет разрешение записать (как пользователь root, может записать в где угодно),

1
27.01.2020, 20:16

При предложении хитрых способов обойти ограничения безопасности Вы лучше спрашиваете себя, если Ваша цель действительно мудра. Я ничего не знаю о postgresql - Вы должны действительно быть зарегистрированы с администраторской учетной записью, чтобы сделать то, что Вы пытаетесь сделать, или есть ли некоторый способ, которым можно дать разрешения только для чтения для того, что это в учетную запись обычного пользователя?

0
27.01.2020, 20:16
  • 1
    Спасибо за Ваш ответ. Однако нет никакой проблемы в запущении скрипта как корень, поэтому никакой обман ограничений безопасности не происходит. –   28.01.2011, 22:22

Почему не делают Вас, просто делают это как это: sudo su postgres -c "psql ..." >/path/to/file?

0
27.01.2020, 20:16
  • 1
    Спасибо за Вас ответ. Однако быстрый тест с sudo su postgres -c "echo test" показывает, что такая команда ничего не печатает. Переключение для укоренения с sudo -s и затем выполнение su postgres -c "echo test" действительно печатает тест, таким образом, кажется, что это sudo это так или иначе ест вывод. Я понятия не имею почему, хотя, мое предположение - это sudo и su -c используйте подоболочки, stdout которых не перетаскивается до моей собственной оболочки. –  Christoph Wurm 29.01.2011, 13:41
  • 2
    Необходимо пропускать что-то. sudo su postgres -c "echo \$USER" печать postgres на моем поле. –  alex 29.01.2011, 18:43
  • 3
    Ну, это работает над моим ноутбуком Ubuntu, но не над сервером Debian, куда сценарий должен работать. –  Christoph Wurm 01.02.2011, 12:37

Теги

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