Используйте sudo без пароля ВНУТРИ скрипта
По какой-то причине мне, как пользователю, нужно запустить без sudo скрипт script.sh, которому для работы нужны привилегии root.
Я видел как единственное решение поставить sudo INSIDE script.sh. Давайте рассмотрим пример:
Конечно, если я выполню этот скрипт, я получу приглашение с просьбой ввести пароль. Затем я добавил в свой файл sudoers (в конце переписать все остальное):
Кстати, я тоже попробовал строку:
(кажется, я не до конца понял разницу)
Но это не решит мою проблему, если я не использую sudo для выполнения этого скрипта:
Итак, я говорю себе: «Хорошо, это означает, что если у меня есть файл, на который ссылаются в sudoers, как я это делал, он будет работать без запроса, только если я вызову его с помощью sudo, а это не то, что я хочу». ш> Итак, я создаю другой скрипт script2.sh следующим образом:
На самом деле это работает. Но я не совсем удовлетворен этим решением, в частности тем, что мне приходится использовать 2 сценария для каждой команды.
Этот пост предназначен для того, чтобы помочь людям, имеющим эту проблему, и найти то же решение (я не нашел в нем хорошего сообщения), и, возможно, у вас, ребята, найдутся лучшие решения.
Не стесняйтесь делиться своими идеями!
Я хочу настаивать на том, что это «обновление apt-get» было просто примером FAR, из которого на самом деле является мой сценарий. В моем сценарии много команд (с некоторыми конфигурационными файлами cd для корневого доступа), и решение не может быть «Ну, просто сделайте это напрямую с помощью apt-get».
Принцип примера — помочь пониманию, а не оправдать упрощение ответа на общую проблему.
Источник
Как запустить команду sudo внутри скрипта?
Чтобы сделать патч вручную, я должен набрать эту команду
Есть место перед 09:
Как я могу запустить это внутри скрипта?
Есть также несколько других команд, но эта доставляет проблемы.
Это редко хорошая идея иметь sudo внутри скрипты. Вместо этого удалите sudo из скрипта и запустите сам скрипт с помощью sudo :
Таким образом, все команды в скрипте будут выполняться с правами суперпользователя, и вам нужно будет указать пароль только один раз при запуске скрипта. Если вам нужна определенная команда в скрипте для запуска без sudo привилегий, вы можете запустить ее как обычный пользователь с помощью (спасибо Lie Ryan ):
Пробел не имеет значения, он не должен ни на что влиять, всегда есть пробел между командой и ее аргументами.
Вы могли бы изменить sudoers файл.
Беги sudo visudo .
Добавьте запись для вашего имени пользователя и сценария, который вы хотели бы запустить без запроса пароля.
Вы можете попробовать что-то вроде:
Это не самая безопасная вещь, так как вы пишете пароль sudoer в виде обычного текста. Чтобы сделать его немного более безопасным, вы можете создать переменную и прочитать в нее пароль sudo, а затем выполнить команду как:
Кроме того, если вы не возражаете против того, чтобы все ваши команды выполнялись от имени пользователя root, вы можете просто выполнить свой скрипт, используя sudo , как предлагалось ранее.
Этот ответ похож на ответ Тердона . Я бы также предложил запустить основной скрипт с sudo тем, чтобы он мог работать без запроса пароля пользователя во время его выполнения.
Однако в случае, если вы хотите отбросить привилегии root для некоторых команд и запустить их как фактический пользователь, который вызвал команду sudo , вы можете проверить $SUDO_USER переменную, чтобы выяснить исходного пользователя.
Это пример сценария того, как вы могли бы достичь этого:
На самом деле существует гораздо более простой способ сделать это. Для переносимости это моя реализация, но вы можете свободно манипулировать ею в соответствии с вашими потребностями.
Введите свой пароль sudo в качестве параметра при запуске сценария, перехватите его и повторяйте его с каждой командой, которая запросит пароль sudo.
Вы можете добавить подсказку и захват после запуска скрипта следующим образом:
Но если кто-то еще отслеживает, что работает на узле; имеет доступ к созданным им журналам; или просто просматривает ваш случайный случай при запуске теста, что может поставить под угрозу безопасность.
Это также работает с запущенными командами / сценариями, для продолжения которых требуется yes:
Эхо является ответом на приглашение, так что вы можете использовать все, что вам нужно, там, если вы запускаете другие сценарии, у которых есть запросы на выполнение, в последовательном порядке. Убедитесь, что вы знаете этот порядок, иначе могут произойти плохие вещи.
Источник
sudo в скрипте
echo «$ROOT_PASSWORD» | sudo -S -s sh -c «uname -a к примеру»
echo «$ROOT_PASSWORD» | sudo -S -c «uname -a к примеру»
usage: sudo [-D level] -h | -K | -k | -V
.
groupname|#gid] [command]
echo pass | sudo -S uname -a
man sudoers на предмет NOPASSWD
ТС об этом знает, уверен на шесть девяток.
echo «$ROOT_PASSWORD» | sudo -S -c «uname -a к примеру»
1. -c — не нужен
2. $ROOT_PASSWORD — нужен пароль не рута, а юзера
У меня есть подозрение что этот школьник не знает.
A какие цели? Не лучше ли запускать сам скрипт от рута? Если вводить пароль нет возможности, то можно сделать владельцем скрипта рута и установить специальные права, чтобы скрипт запускался с правами владельца.
firestarter> Если вводить пароль нет возможности, то можно сделать владельцем скрипта рута и установить специальные права, чтобы скрипт запускался с правами владельца.
Источник
sudo и alias в .bashrc
Предисловие
alias
/.bashrc alias‘ов для команд. Первым делом я назначил alias для команды ls, частенько я ей пользуюсь и почти на автомате вбиваю ls -l. Из той же книги я узнал что полезно указать еще параметр h, для более наглядного отображения размеров файлов, и вот что у меня получилось:
alias l=’ls -lh’
Казалось бы ничего особенного, но удобно блин.
Дальше я дочитал до способов объединения команд, и нашел интересный пример:
apt-get update && apt-get upgrade
Основная идея данной записи — выполнить обновление системы в случае удачного обновления списка пакетов. Так как сейчас у меня стоит бета Ubuntu 10.04 то обновляюсь я каждый день, поэтому решил добавить еще один alias:
alias uu=’apt-get update && apt-get upgrade’
Перезапускаю терминал, sudo uu, а он мне в ответ мол не знаю я команды uu. Не долго думая добавляю аналогичный alias в /root/.bashrc.
Перезапускаю терминал, sudo uu, а он мне опять тоже самое. И тут я задумался, а кто же ты тогда sudo?
Немного поразмыслив решил спросить у google, на что сразу получил несколько ответов, но не один у меня так и не заработал. Если кому интересно, предлагалось добавить alias в глобальный файл /etc/bash.bashrc, а так же вызывать sudo -E.
Простое и действенное решение подсказал знакомый гуру Linuxa — medvoodoo.
sudo — команда а alias‘ы обрабатывает сам bash, поэтому sudo не может понять чего от нее хотят. (Здесь я могу ошибаться, можете поправить меня в комментариях).
В результате мой alias uu выглядит следующим образом:
alias uu=’sudo apt-get update && sudo apt-get upgrade -y’
Надеюсь эта информация будет кому-то инересной/полезной.
Источник
Команда sudo – администрирование системы
В Unix-подобных операционных системах должен быть привилегированный пользователь – суперпользователь, он же администратор. Логин его учетной записи – root, а домашний каталог находится в /root. Этот пользователь предназначен для администрирования системы, а значит обладает правами на операции с системными файлами, установку программного обеспечения, создание и удаление других пользователей, предоставление им различных доступов.
В более ранних дистрибутивах GNU/Linux, возможно и некоторых сейчас, при установке операционной системы, кроме того что создавался обычный пользователь, надо было задать пароль для root’а. После этого войти в систему можно было как под юзером, так под администратором.
Это создавало дополнительную опасность для системы. Бесконтрольное манипулирование файлами администратором или вход под root’ом злоумышленника могли привести к краху системы. Так выполнение под админом команды rm -rf / ведет к удалению всех файлов.
Поэтому во многих современных дистрибутивах Linux учетная запись суперпользователя отключена, хотя она имеется в системе. Ее можно включить, задав для root’а пароль. Однако этого делать не рекомендуют.
Для администрирования системы Linux сейчас широко используется утилита sudo. Она позволяет первому, который создавался при установке ОС, пользователю выполнять команды с правами администратора. Однако основное преимущество не в том, чтобы не заходить в систему под рутом, а в том, что sudo может быть сконфигурирована так, что пользователь не сможет выполнять абсолютно все административные задачи, а сможет только позволенные.
Используется команда sudo следующим образом:
sudo команда параметры_команды
Допустим, нам надо отредактировать конфигурационный файл hosts. Редактировать мы его планируем в консольном текстовом редакторе nano. Если выполнить команду nano /etc/hosts , файл откроется, но мы не сможем сохранить изменения в нем, так как владельцем файла является root, а все остальные могут только читать файл.
Однако, воспользовавшись sudo, мы откроем файл как суперпользователь и получим право на запись. При этом Bash попросит ввести пароль (вводимые символы при этом не отображаются) вашей (не рута) учетной записи.
Sudo-сессия сохраняется какое-то время. Поэтому выполнение последующих команд с использованием sudo может не требовать ввода пароля.
Если требуется более длительное время работы с правами администратора, то одним из вариантов является команда sudo -s . Вы перейдете в режим суперпользователя, в приглашении командной оболочки Linux символ доллара $ заменяется на знак решетки #. Вернуться в обычный режим можно, выполнив команду exit.
В примере мы переходим в режим администратора, копируем файл в каталог root’а. Под обычным пользователем мы не можем даже просматривать этот каталог.
Курс с ответами к заданиям и дополнительными уроками:
android-приложение, pdf-версия.
Источник