This script must be run as root ����� ������

Script needs to be run as root error after already using become, become_user, and become_method

Writing a task to run an install script and normally it would have to be run with : sudo ./install.sh

My task looks like:

The error I am getting is:

Using just become: true to just get root permissions, but then the installer fails because it has to be installed under the jenkins user.

Adding sudo in the shell ansible code block didn’t work, it threw an error and said to use become methods.

Would appreciate any insight!

2 Answers 2

» have to be run with : sudo » and » has to be installed under the jenkins user.» sound like contradiction to me.

the idea of installation script that supposed to run as some regular user, and have a part that needs to be run as superuser (sudo) does not seem consistent enough. It implies that the user granted sudo rights at least, which one have to ensure in advance anyways. (jenkins normally is not) The better way is decompose the installation into user and root parts and run them as separate tasks — that way you will not have «sudo after become» case that ansible i guess cannot handle by its design.

Alternatively, you may consider a reversed scenario when the installation starts as root, and does sudo to jenkins when required.

Источник

Как скрипт может проверить, запускается ли он от имени root?

Я пишу простой bash-скрипт, но мне нужно проверить, запущен ли он от имени пользователя root или нет. Я знаю, что, вероятно, есть очень простой способ сделать это, но я понятия не имею, как.

Просто чтобы быть ясно:
Что простой способ , чтобы написать сценарий foo.sh , так что команда ./foo.sh выводит 0 , и команда sudo ./foo.sh выводит 1 ?

Пользователь root не обязательно должен называться «root». whoami возвращает первое имя пользователя с идентификатором пользователя 0 . $USER содержит имя вошедшего в систему пользователя, который может иметь идентификатор пользователя 0 , но иметь другое имя.

Единственная надежная программа, которая проверяет, вошел ли аккаунт как root или нет:

Я использую -u для эффективного идентификатора пользователя, а не -r для реального идентификатора пользователя. Права доступа определяются с помощью эффективного идентификатора пользователя, а не реальные один.

тесты

/etc/passwd содержит следующие имена пользователей с идентификатором пользователя 0 в указанном порядке:

Войдя в систему root2 , дает следующие результаты:

  • whoami : rootx
  • echo $USER : root2 (возвращает пустую строку, если программа была запущена в пустой среде, например env -i sh -c ‘echo $USER’ )
  • id -u : 0 Как видите, другие программы не id -u прошли эту проверку, только пройдены.
Читайте также:  Принудительно размонтировать диск linux

Источник

Thread: «This script must be run as root»

Thread Tools
Display

«This script must be run as root»

I am trying to install a program, but when I enter «./install» in the terminal, I get the message:

«This script must be run as root»

How can I run it as root, and what does that mean ?

Re: «This script must be run as root»

root is the privileged adiminstrator’s account in Linux. It’s usually needed for example to install software outside your home folder.

Be careful what you do and run as root. Only run programs and scripts from trustworthy sources that way as the can harm your system.

Re: «This script must be run as root»

I used the «sudo ./install» command and it asked me for my password, which I entered. Then I got the message «command not found», though I navigated exactly to the directory where it is inside.

I am trying to install Avira Antivir Personal for Linux, if that helps. I unzipped the gz package to the /tmp folder in the main drive, where Linux is installed. I renamed it to «antivir» since the original name was long and complicated.

Yet I cannot get it to install.

Re: «This script must be run as root»

Do I have to enter «sudo ./install» exactly or something like «sudo cd /tmp/antivir/install» ?

Re: «This script must be run as root»

I quote from the Terminal with translations in bold, since it is the German version:

So first it asks me for permission, and when I enter «sudo» before the «./install» it suddenly does not find the command anymore ?!

But when I open the folder with the file manager, the install command/file is clearly there !

Re: «This script must be run as root»

Could it be that the program, though written for Linux, is not compatible with Ubuntu ?

It’s quite annoying that such a simple task like installing a downloaded program is so complicated under Linux. I’m not a computer illiterate, i have been working with Windows computers extensively since 1996 and some would call me a power-user with some reason. But Linux beats me.

Last edited by Ali_Barba; June 15th, 2012 at 11:38 PM .

Re: «This script must be run as root»

Maybe somebody could download the program, too, and see whether it works ? The source is definitely trustworthy, one of the major antivirus companies. But maybe they made some mistake while writing the installer and it is corrupted ?

Re: «This script must be run as root»

Please post back if you have any further questions or comments.

Источник

Bash Scripting: Require script to be run as root (or with sudo)

I’m trying to write a bash script (in Ubuntu) that will backup a directory using tar.

How can I do a check in the script so that it can only be run as root (or with sudo)?

For instance, if a user runs the script, it should say that this script must be run with sudo privileges, and then quit. If the script is executed as root, it will continue past the check.

I know there has to be an easy solution, I just haven’t been able to find it by googling.

7 Answers 7

To pull the effective uid use this command:

Читайте также:  Nokia and microsoft windows mobile

If the result is ‘0’ then the script is either running as root, or using sudo. You can run the check by doing something like:

I assume you know that by changing the ownership to root

chown root:root file

and setting the permissions to 700

you will accomplish the same thing — without the suggestion to run as sudo.

But I will post this answer for completeness.

The bash variable $EUID shows the effective UID the script is running at, if you want to make sure the script runs as root, check wether $EUID contains the value 0 or not:

This is better than the solution with /usr/bin/id (for bash scripts!) because it doesn’t require an external command.

What is your objective here, to inform the user that they should run the script as root or as some kind of security precaution?

If you just want to inform the user than any of the uid suggestions are fine, but they’re as useful as tyres on a horse as a security precaution — there’s nothing to stop a user from copying the script, taking out the if statement, and running it anyway.

If this is a security issue then the script should be set to 700, owned by root:root, so that it is not readable or executable by any other user.

Источник

Как проверить, работает ли с правами root в bash script

Я пишу script, который требует прав на уровне корневого уровня, и я хочу сделать так, чтобы, если script не запущен как root, он просто перекликается с “Пожалуйста, запустите от имени пользователя root”. и выходы.

Здесь некоторый псевдокод для того, что я ищу:

Как я могу (чище и безопасно) справиться с этим? Спасибо!

А, просто для того, чтобы уточнить: часть (сделайте что-то) будет включать в себя запуск команд, которые сами по себе требуют root. Так что запуск его, как обычный пользователь, просто придумал бы ошибку. Это просто предназначено для чистого запуска script, для которого требуются корневые команды, без использования sudo внутри script, я просто ищу какой-то синтаксический сахар.

Было дано несколько ответов, но, по-видимому, лучшим способом является использование:

  • id -u
  • Если запустить с правами root, вернет идентификатор 0.

Это кажется более надежным, чем другие методы, и кажется, что он возвращает id из 0, даже если script выполняется через sudo .

Переменная среды $ EUID содержит текущий UID пользователя. Root UID равен 0. Используйте что-то вроде этого в вашем скрипте:

Примечание: Если вы получаете 2: [: Illegal number: проверьте, есть ли у вас #!/bin/sh вверху и измените его на #!/bin/bash .

В bash script у вас есть несколько способов проверить, является ли текущий пользователь root.

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

Я думаю, что лучший способ использования bash – использовать $EUID , с man-страницы:

Это лучший способ, чем $UID , который может быть изменен и не отражает реального пользователя, запускающего script.

Способ, которым я подхожу к этой проблеме, заключается в том, чтобы вставлять sudo в мои команды, когда он не запускается с правами root. Вот пример:

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

Если ваш script всегда должен быть запущен root, просто установите права соответственно ( 0500 ).

Читайте также:  Whatsapp desktop windows 10 не запускается

Как упоминает @wrikken в своих комментариях, id -u – это гораздо лучшая проверка для root.

Кроме того, при правильном использовании sudo вы можете проверить script и посмотреть, работает ли он с правами root. Если нет, попросите его вспомнить через sudo , а затем запустите с правами root.

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

Существует простая проверка для пользователя, являющегося пользователем root.

Синтаксис [[ stuff ]] – это стандартный способ запуска проверки в bash.

Это также предполагает, что вы хотите выйти с 1, если вы терпите неудачу. Функция error – это некоторое чутье, которое устанавливает выходной текст в красный (не нужен, но довольно классный, если вы меня спрашиваете).

0- Прочитайте официальную документацию GNU Linux, есть много способов сделать это правильно.

1- убедитесь, что вы помещаете подпись оболочки, чтобы избежать ошибок в интерпретации:

2- это мой script

Очень простой способ просто поставить:

Преимущество использования этого вместо id заключается в том, что вы можете проверить, не работает ли какой-либо пользователь, не являющийся пользователем root; например.

Если script действительно требует доступа к корню, тогда его права на файлы должны отражать это. Наличие корневого script исполняемого пользователями, не являющимся пользователем root, будет красным. Я рекомендую вам не контролировать доступ с помощью проверки if .

В этом ответе, чтобы было ясно, я предполагаю, что читатель может читать сценарии оболочки bash и POSIX, такие как dash .

Я полагаю, что здесь мало что можно объяснить, потому что ответы с большим количеством голосов объясняют многое из этого.

Тем не менее, если есть что-то, чтобы объяснить дальше, не стесняйтесь комментировать, я сделаю все возможное, чтобы заполнить пробелы.

Оптимизированное bash решение для производительности и надежности

Объяснение

Так как чтение переменной bash стандарта во много раз быстрее, эффективный идентификатор пользователя, чем выполнение команды id -u для POSIX -ly, находит пользователя ID, это решение объединяет оба в красиво упакованную функцию. Если и только если $EUID по какой-либо причине недоступен, команда id -u будет выполнена, гарантируя, что мы получим правильное возвращаемое значение независимо от обстоятельств.

Почему я публикую это решение после стольких лет, когда ОП спросил

Что ж, если я правильно вижу, кажется, что выше отсутствует фрагмент кода.

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

Портативное решение POSIX solution

Заключение

Как бы вам это ни нравилось, среда Unix/Linux очень разнообразна. Это означает, что есть люди, которым так нравится bash , что они даже не думают о переносимости (POSIX оболочки). Другие, как я, предпочитают POSIX оболочки. В настоящее время это вопрос личного выбора и потребностей.

попробуйте следующий код:

Один простой способ сделать скрипт доступным только для пользователя root – запустить скрипт со строкой:

Насколько я знаю, правильный способ проверить это:

Смотрите раздел “Тестирование на корень” здесь:

id -u намного лучше, чем whoami , поскольку некоторые системы, такие как android, могут не предоставлять слово root.

Проверьте, являетесь ли вы пользователем root, и выйдите из системы, если вы не:

Или в этом примере попытайтесь создать каталог в корневом расположении, а затем попытайтесь после повышения прав.

Проверьте, являетесь ли вы пользователем root и, если возможно, не повышать его:

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

Источник

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