Скрипт linux от sudo

Как запустить команду sudo внутри скрипта?

Чтобы сделать патч вручную, я должен набрать эту команду

Есть место перед 09:

Как я могу запустить это внутри скрипта?

Есть также несколько других команд, но эта доставляет проблемы.

Это редко хорошая идея иметь sudo внутри скрипты. Вместо этого удалите sudo из скрипта и запустите сам скрипт с помощью sudo :

Таким образом, все команды в скрипте будут выполняться с правами суперпользователя, и вам нужно будет указать пароль только один раз при запуске скрипта. Если вам нужна определенная команда в скрипте для запуска без sudo привилегий, вы можете запустить ее как обычный пользователь с помощью (спасибо Lie Ryan ):

Пробел не имеет значения, он не должен ни на что влиять, всегда есть пробел между командой и ее аргументами.

Вы могли бы изменить sudoers файл.

Беги sudo visudo .

Добавьте запись для вашего имени пользователя и сценария, который вы хотели бы запустить без запроса пароля.

Вы можете попробовать что-то вроде:

Это не самая безопасная вещь, так как вы пишете пароль sudoer в виде обычного текста. Чтобы сделать его немного более безопасным, вы можете создать переменную и прочитать в нее пароль sudo, а затем выполнить команду как:

Кроме того, если вы не возражаете против того, чтобы все ваши команды выполнялись от имени пользователя root, вы можете просто выполнить свой скрипт, используя sudo , как предлагалось ранее.

Этот ответ похож на ответ Тердона . Я бы также предложил запустить основной скрипт с sudo тем, чтобы он мог работать без запроса пароля пользователя во время его выполнения.

Однако в случае, если вы хотите отбросить привилегии root для некоторых команд и запустить их как фактический пользователь, который вызвал команду sudo , вы можете проверить $SUDO_USER переменную, чтобы выяснить исходного пользователя.

Это пример сценария того, как вы могли бы достичь этого:

На самом деле существует гораздо более простой способ сделать это. Для переносимости это моя реализация, но вы можете свободно манипулировать ею в соответствии с вашими потребностями.

Введите свой пароль sudo в качестве параметра при запуске сценария, перехватите его и повторяйте его с каждой командой, которая запросит пароль sudo.

Вы можете добавить подсказку и захват после запуска скрипта следующим образом:

Но если кто-то еще отслеживает, что работает на узле; имеет доступ к созданным им журналам; или просто просматривает ваш случайный случай при запуске теста, что может поставить под угрозу безопасность.

Это также работает с запущенными командами / сценариями, для продолжения которых требуется yes:

Эхо является ответом на приглашение, так что вы можете использовать все, что вам нужно, там, если вы запускаете другие сценарии, у которых есть запросы на выполнение, в последовательном порядке. Убедитесь, что вы знаете этот порядок, иначе могут произойти плохие вещи.

Источник

Используйте sudo без пароля ВНУТРИ скрипта

По какой-то причине мне, как пользователю, нужно запустить без sudo скрипт script.sh, которому для работы нужны привилегии root.
Я видел как единственное решение поставить sudo INSIDE script.sh. Давайте рассмотрим пример:

Конечно, если я выполню этот скрипт, я получу приглашение с просьбой ввести пароль. Затем я добавил в свой файл sudoers (в конце переписать все остальное):

Читайте также:  Broadcom bcm2045a bluetooth driver для windows 10

Кстати, я тоже попробовал строку:

(кажется, я не до конца понял разницу)

Но это не решит мою проблему, если я не использую sudo для выполнения этого скрипта:

Итак, я говорю себе: «Хорошо, это означает, что если у меня есть файл, на который ссылаются в sudoers, как я это делал, он будет работать без запроса, только если я вызову его с помощью sudo, а это не то, что я хочу». ш> Итак, я создаю другой скрипт script2.sh следующим образом:

На самом деле это работает. Но я не совсем удовлетворен этим решением, в частности тем, что мне приходится использовать 2 сценария для каждой команды.

Этот пост предназначен для того, чтобы помочь людям, имеющим эту проблему, и найти то же решение (я не нашел в нем хорошего сообщения), и, возможно, у вас, ребята, найдутся лучшие решения.

Не стесняйтесь делиться своими идеями!

Я хочу настаивать на том, что это «обновление apt-get» было просто примером FAR, из которого на самом деле является мой сценарий. В моем сценарии много команд (с некоторыми конфигурационными файлами cd для корневого доступа), и решение не может быть «Ну, просто сделайте это напрямую с помощью apt-get».

Принцип примера — помочь пониманию, а не оправдать упрощение ответа на общую проблему.

Источник

Команда sudo в Linux

Если вы новый пользователь Linux, то, наверное, уже заметили, что здесь почти для всех серьёзных настроек или операций с системой нужны права суперпользователя. Пользователям Windows такой подход тоже должен быть знаком, когда вы устанавливаете программы или меняете системные настройки, операционная система просит подтвердить выполнение программы от имени администратора.

В Linux такой возможности нет, но зато есть команда sudo, которая позволяет вам запускать программы от имени других пользователей, а также от имени суперпользователя. На сайте уже есть несколько материалов про работу с ней, но нет подробной статьи про опции самой команды и её синтаксис. Эта тема и будет раскрыта сейчас. Дальше мы рассмотрим, что представляет из себя команда sudo Linux, но начнем с её синтаксиса.

Синтаксис sudo

Синтаксис команды очень прост:

$ sudo опции программа параметры

Так вы можете выполнить абсолютно любую команду Linux. Достаточно написать перед ней команду sudo. По умолчанию sudo запускает переданную ей команду от имени суперпользователя. Если вы хотите добавить какие-либо настройки или использовать другого пользователя, нужно указывать опции.

Опции sudo

  • -A или —askpass — по умолчанию sudo спрашивает пароль пользователя в терминале. Если задана эта опция, утилита попробует использовать графическую утилиту для запроса пароля.
  • -b или —background — запускает переданную программу в фоновом режиме;
  • -C или —close-from — опции нужно передать число больше трёх. Она позволяет закрыть для программы все файловые дескрипторы, кроме стандартного ввода и вывода;
  • -E или —preserve-env — позволяет передать переменные окружения текущего пользователя выполняемой программе. Также можно передать этой опции список переменных, которые нужно разрешить;
  • -e или —edit — позволяет редактировать файл вместо запуска команды. Файл копируется во временный каталог, редактируется с помощью редактора, установленного в системе по умолчанию, и если были изменения, записывается обратно с теми самыми правами;
  • -g — запустить команду с указанной группой вместо группы пользователя, от имени которого запускается программа;
  • -h — выполнить команду от имени другого хоста;
  • -H или —set-home — установить домашний каталог;
  • -i или —login — позволяет авторизоваться в консоли от имени другого пользователя. Будет выбран его домашний каталог, а также загружены все переменные окружения;
  • -k — по умолчанию, sudo сохраняет пароль и некоторое время после выполнения команды, вы можете выполнить ещё раз, без ввода пароля. Эта опция отключает такую возможность;
  • -l или —list — позволяет вывести список доступных команд для удалённых пользователей;
  • -n или —non-interactive — не интерактивный режим, если будет необходимо ввести пароль, программа выдаст ошибку;
  • -p или —prompt — использовать своё приглашение для ввода пароля;
  • -r или —role — выполнить программу с контекстом SELinux, у которого есть указанная роль;
  • -S — использовать стандартный поток ошибок для запроса пароля;
  • -s или —shell — позволяет запустить указанный командный интерпретатор;
  • -U или —User — вместе с опцией -l позволяет посмотреть привилегии для пользователя;
  • -T или —timeout — позволяет установить время выполнения команды, если время истечёт раньше, чем завершится команда, то она будет завершена принудительно;
  • -u — позволяет указать, от имени какого пользователя нужно выполнять программу;
  • -V — выводит версию утилиты;
  • — означает, что следующие опции обрабатывать не нужно.
Читайте также:  How to customize linux

Это основные опции, которые вы можете использовать. А теперь давайте перейдём к примерам использования команды.

Примеры использования sudo

1. Запуск программы

Самый частый пример использования sudo — выполнение программы от имени суперпользователя. Для этого достаточно написать sudo перед именем программы:

Если вы хотите выполнить программу не от имени root, а от имени другого пользователя, то можно использовать опцию -u, например:

sudo -u sergiy whoami

2. Переменные окружения

По умолчанию, команда sudo не передаёт запускаемой утилите переменные окружения текущего пользователя. А когда вы запускаете графическое приложение, то ему нужна переменная DISPLAY для доступа к графическому серверу. В последних версиях Ubuntu всё немного по другому, но все же эта возможность sudo актуальна. Чтобы передать переменные просто используйте опцию -E:

Без опции -E программа получает только 18 стандартных переменных, а с опцией — все доступные.

Также вы можете указать список переменных, которые нужно передать:

3. Авторизация от имени другого пользователя

С помощью sudo вы также можете авторизоваться от имени другого пользователя. Для этого используйте опцию -i:

По умолчанию вы будете авторизованы как суперпользователь. Ещё здесь можно указать пользователя, от имени которого вы хотите авторизоваться:

sudo -i -u sergiy

4. Командный интерпретатор

Если у вас в системе установлено несколько командных интерпретаторов, например, не только bash, но и zsh, то вы можете авторизоваться от имени другого пользователя и указать, какую именно оболочку вы хотите использовать. Для этого укажите опция -s:

5. Редактирование файлов

Когда вам необходимо отредактировать системный файл, вы пишите sudo vim или sudo nano. Вместо этого можно использовать опцию -e или команду sudoedit. Она открывает файл для редактирования, редактором, установленным в системе по умолчанию. Например, у меня это vim. Чтобы отредактировать /etc/group с правами суперпользователя достаточно выполнить:

sudo -e /etc/group

Утилита узнает, каким редактором нужно пользоваться из переменной окружения EDITOR.

6. Запуск в фоне

Чтобы запустить программу в фоне с помощью sudo можно использовать опцию -b. Например, запускаем OpenVPN в фоновом режиме:

sudo -b openvpn -с /путь/к/конфигурационному.файлу

7. Просмотр полномочий

Вам необязательно редактировать конфигурационный файл, чтобы понять, какие настройки для sudo разрешены, а какие нет. Для этого можно выполнить команду с опцией -l. Утилита выведет список разрешённых команд или ALL в случае, если разрешено всё:

Выводы

Теперь вы знаете, что из себя представляет команда sudo Linux. Здесь мы рассмотрели только общие примеры её использования. Если вы хотите прочитать более подробно про её настройку, смотрите статью настройка sudo в Linux.

Источник

Запуск скрипта sh в Linux

Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.

Читайте также:  From windows media player to itunes

Но у новичков может возникнуть вопрос — как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.

Как работают скрипты

В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.

Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа — интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.

Запуск скрипта sh в Linux

Сначала рассмотрим пример небольшого sh скрипта:

#!/bin/bash
echo «Hello world»

Вторая строка — это действие, которое выполняет скрипт, но нас больше всего интересует первая — это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:

chmod ugo+x script.sh

Мы разрешаем выполнять запуск sh linux всем категориям пользователей — владельцу, группе файла и остальным. Следующий важный момент — это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:

Или полный путь от корня:

Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ — /usr/local/bin.

cp script.sh /usr/local/bin/script.sh

Теперь вы можете выполнить:

Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:

А если нам нужно запустить скрипт на php, то выполните:

Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:

Даже запустить процесс linux не так сложно.

Выводы

Как видите, запуск скрипта sh в linux — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Источник

Оцените статью