Предположим, у меня есть сценарий оболочки, который запускает кучу других суб-скриптов. Я решаю, что мой скрипт должен быть запущен как root, потому что первые несколько под-скриптов, которые он запускает, должны выполняться как root. Тем не менее, есть два суб-скрипта, выполняемых супер-скриптом, который не может быть запущен как root. Предполагая, что мой скрипт был запущен как root, как мне отменить его для двух последних суб-скриптов? Возможно ли это?Как стать не-root в середине скрипта оболочки, выполняемого как root? Возможное?
ответ
использовать команду su
для запуска команды, которую вы хотите запустить как какой-либо другой пользователь.
su nobody ls /tmp
Необходимо, чтобы пользователь, не являющийся пользователем root, мог работать под суб-скриптами. Назовем этого пользователя fred
. Тогда ваш скрипт с привилегиями суперпользователя может просто сделать ответ
su fred /path/to/subscript-A
su fred /path/to/subscript-B
Contra nsayer, вы, вероятно, не можете использовать nobody
для этого, потому что вся суть nobody
в том, что он имеет право писать на ничего. Иногда это именно то, что вы хотите, но я уверен, что ваши суб-скрипты должны записываться в файловую систему ...
Точка Zack находится в том, что пользователь должен быть «человеком» с оболочкой, чтобы делать что-нибудь полезное, например, «nobody» или «www-data» не будет работать. Это хороший момент, но не нужно 'su fred (некоторая команда)' каждый раз ... просто 'su fred', затем выдавать любые команды как fred в отдельных командах, а затем' exit'. –
@no: Это работает только если у вас есть интерактивная оболочка; из скрипта вы должны дать команду 'su fred'. Вы можете, конечно, объединить кучу команд в суб-скрипт и передать это 'su', но это звучит так, как это сделал OP. Кроме того, fyi, 'su -s/bin/sh fred - -c exec/path/to/subscript' будет работать, даже если' fred' не имеет оболочки в '/ etc/passwd', и вы можете предпочесть' fred' таким образом, если эта учетная запись используется только из скрипта (что, вероятно, является хорошей идеей) – zwol
Zack, спасибо, что очистил это :) –
- 1. sudo to root в середине скрипта
- 2. Как запустить сценарий оболочки внутри скрипта Perl, выполняемого cron?
- 3. Установить команду в середине скрипта оболочки do
- 4. Как запустить gpg из скрипта, выполняемого cron?
- 5. Запуск скрипта оболочки из PHP как другого (не root) пользователя
- 6. Как использовать setuid() от root, чтобы стать пользователем, с возможностью снова стать root?
- 7. о скорости скрипта, выполняемого сервером
- 8. запуск скрипта в середине
- 9. Запустить команду как root в сценарии оболочки
- 10. Как получить права root в сценарии оболочки?
- 11. как определить пользователя входа и стать root в playbook
- 12. Как стать root в gcloud вычислить двигатель через ssh?
- 13. Как прекратить комментарии exe-скрипта, выполняемого из .bat fie
- 14. Создание сценария оболочки, выполняемого как демон при загрузке
- 15. Root view не отображается в середине экрана
- 16. Как стать пользователем Jenkins?
- 17. Запуск скрипта oracle как пользователя oracle из сценария оболочки, который выполняется как root
- 18. Как получить местоположение кода, выполняемого в Nodejs
- 19. Как выполнять команды оболочки как root в Java
- 20. как передать переменную скрипта оболочки в сценарий ожидания?
- 21. Сценарий оболочки Ubuntu - авторизация root
- 22. Запуск скрипта Python, как встроенная команда оболочки
- 23. Как зарегистрировать вывод сценария оболочки внутри скрипта
- 24. Как вызвать подпрограмму оболочки из скрипта perl
- 25. Как получить оставшееся время выполнения скрипта оболочки?
- 26. Как форматировать вывод почты скрипта оболочки Bash
- 27. Как перенаправить вывод всего скрипта оболочки внутри самого скрипта?
- 28. переменная сценария оболочки в середине команды
- 29. Как дождаться процесса, выполняемого proc_open() в php?
- 30. Как создать сценарий оболочки из существующего скрипта?
Это не обязательно неправильно, но вероятность того, что суб-скрипт должен написать файл системы, в этот момент (AIUI) нельзя использовать 'nobody'. – zwol
Он был не таким уж конкретным. Он спросил, как запустить скрипт как пользователь без полномочий root. Я ответил. Я привел пример. Sheesh. – nsayer
Я не хочу быть таблеткой, но я перехожу на примеры, которые случайно используют 'nobody', потому что неправильное использование« nobody »открывает дыры в безопасности. – zwol