Скрипт linux от sudo

Как выполнить запуск скрипта от суперпользователя без пароля?

Все можно настроить через файл /etc/sudoers . Вот способ как можно перезапускать все службы ( sudo service . ) от пользователя userlogin .

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

sudo groupadd sudo-restrict 

2. Добавляем пользователя userlogin в эту группу:

sudo usermod -aG sudo-restrict userlogin 

3. Редактируем файл /etc/sudoers с помощью visudo :

Необходимо ставить в конце следующее:

%sudo-restrict ALL=(ALL) NOPASSWD: /usr/sbin/service 

/usr/sbin/service — путь к программе необходимо указывать абсолютный. В вашем случае это будет путь к вашему скрипту. Я использую служебную команду service

4. Проверяем

Заходим под пользователем userlogin и выполняем

sudo service mysqld restart 

Сервис перезапустится без ввода пароля.

PS

В конце /etc/sudoers можно раскомментировать эту строку: #includedir /etc/sudoers.d , и записывать все настройки в отдельные файлы в каталоге /etc/sudoers.d

Я согласен с ответом Total Pusher, но сам обычно использую более простой и универсальный способ:

  1. Запускаю sudo visudo
  2. Добавляю в конец username ALL=(ALL) NOPASSWD: ALL (укажите свой username)
  3. Сохраняю

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

UPD: Как метко подметил andreymal, этот способ создаёт дыру в безопасности системы и использовать его на постоянной основе не рекомендуется.

Источник

How to Run Shell Scripts with Sudo Command in Linux

sudo is a powerful command line tool that enables a “permitted user” to run a command as another user (the superuser by default), as defined by a security policy. On most if not all Linux systems, the security policy is driven by the /etc/sudoers file.

Therefore, to run a shell script or program as root, you need to use sudo command. However, sudo only recognizes and runs commands that exist in directories specified in the secure_path in the /etc/sudoers, unless a command is present in the secure_path, you’ll counter an error such as the one below.

This will happen even if the script exists in a directory in the PATH environmental variable, because when a user invokes sudo, PATH is replaced with secure_path.

$ echo $PATH $ ls -l $ sudo proconport.sh 80

Sudo Error While Running Script

In the above scenario, the directory /home/aaronkilik/bin is in the PATH environment variable and we are trying to run the script /home/aaronkilik/bin/proconport.sh (finds process listening on a port) with root privileges.

Then we encountered the error “sudo: proconport.sh: command not found”, since /home/aaronkilik/bin is not in the sudo secure_path as shown in next screenshot.

Читайте также:  Open office linux 64 bit

Check Sudo Secure Path

To fix this, we need to add the directory containing our scripts in the sudo secure_path by using the visudo command by editing /etc/sudoers file as follows.

Attention: This method has serious security implications especially on servers running on the Internet. This way, we risk exposing our systems to various attacks, because an attacker who manages to gain access to an unsecure (without superuser privileges) directory that has been added to secure_path, can run a malicious script/program with sudo command.

For security reason, do check out the following article from the sudo website explains a vulnerability relating to secure_path: https://www.sudo.ws/sudo/alerts/secure_path.html

Preferably, we can provide the absolute path to a script while running it with sudo:

Run Script Using Sudo Command

That’s It! You may follow list of articles about sudo command:

If you have any questions or thoughts concerning this article, share with us via the comment form below.

Источник

how to Run sudo command in a Bash script

But I want to execute it without taking my password at every startup. I followed these posts : https://askubuntu.com/questions/425754/how-do-i-run-a-sudo-command-inside-a-script/425990 and I changed my sudoers file with this :

username ALL=(ALL) NOPASSWD: /path/to/script 

But as I try to execute it in terminal, the script always ask me for password. I also try the others answers in this post but as that post as no validation I didn’t find a solution. If someone have a solution ?

What operating system are you using? If Linux, what distribution? If this needs to be run at startup, why don’t you just set the tor service to start on boot?

Please edit your question and clarify what you need. Do you just want tor to be started every time the machine reboots?

@terdon I find an answer and I think the question can help the community. The reason why I ask this question is minor and I think touch less people. And I learned things 🙂

OK, but the answer you got is really not a good way of starting a service at boot, if that’s what you want. It means any user on the system will be able to restart tor with no password. For a cleaner way, see How to write startup script for systemd

Thanks, that’s a good point. I use service tor with FoxyProxy in Firefox . For a reason I don’t know I need to restart service tor if I want to load pages with FoxyProxy enabled by default. But if I understand the answer, my service tor start one time and just after restart with my username and just allowed for service tor . This could be another post.

Источник

29. bash скрипты №3

В прошлый раз мы с вами разобрали if. Есть много других команд, но if ещё кое-где пригодится.

Начнём с того, что скрипт, который мы пишем, должен выполняться рутом, так как тут и команда useradd, и добавление строчки в sudoers. В самом скрипте мы нигде не пишем sudo, так как предполагаем, что либо root запустит этот скрипт, либо пользователь с командой sudo. Но что будет, если скрипт запустить без sudo? Выполнятся все команды, правда, некоторые выдадут ошибку, что недостаточно прав. Сейчас у нас скрипт небольшой, можно понять, что ничего страшного не произойдёт. Но в будущем в скрипте могут быть команды, которые могут сработать и у рута, и у обычного пользователя. И если скрипт запустится от обычного пользователя, то некоторые команды выполнятся, некоторые нет, в итоге это приведёт к неожиданным последствиям. Поэтому лучше в начале скрипта сделать проверку, а кто именно запускает скрипт. Если это root – то всё окей, если кто-то другой – то нужно остановить скрипт и выдать ошибку, что недостаточно прав.

Читайте также:  Vipnet personal firewall astra linux

Условие у нас такое – если текущий пользователь является рутом, запускать скрипт, иначе выдавать ошибку. Для этого нужно распознать текущего пользователя – это можно сделать с помощью команды id. Причём, всё завязано не на самом слове root, а на его uid, который равен 0. То есть можно встретить случаи, когда вместо root используется другой пользователь с uid-ом 0, поэтому лучше ориентироваться на uid. Команда id с ключом -u должна быть 0:

Проверку нужно делать в самом начале, чтобы никакие другие команды не выполнились. Как писать условие мы знаем – if, дальше нам нужно выполнить команду, чтобы узнать uid и убедиться, что он не равен 0:

И так, если uid не равен нулю, пусть скрипт выдаст ошибку — echo root permissions required — и завершится. Чтобы завершить скрипт, используем команду exit. Также, давайте вспомним, что обычно ошибки сыпятся в stderr. И чтобы наш скрипт тоже так делал, добавим после echo направление stdout в stderr (>&2), в итоге у нас вывод echo уйдёт в stderr. Также вспомним про статусы выхода. Именно с помощью команды exit мы и будем выдавать статус выхода с ошибкой, то есть единицу:

if [ "$(id -u)" != 0 ] then echo root permissions required >&2 exit 1 fi 

Источник

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

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

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

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

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

Читайте также:  Мегафон интернет в linux

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

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

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

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

Мы разрешаем выполнять запуск 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 — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

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