- Как проверить, работает ли с правами root в bash script
- Оптимизированное bash решение для производительности и надежности
- Объяснение
- Почему я публикую это решение после стольких лет, когда ОП спросил
- Портативное решение POSIX solution
- Заключение
- unixforum.org
- запуск скрипта от имени root
- запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Re: запуск скрипта от имени root
- Как скрипт может проверить, запускается ли он от имени root?
- тесты
- Thread: «This script must be run as root»
- «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
- Re: «This script must be run as root»
Как проверить, работает ли с правами 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 ).
Как упоминает @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 и, если возможно, не повышать его:
Примечание редактора: если вам не нужны двойные скобки, используйте одинарные для переносимости кода.
Источник
unixforum.org
Форум для пользователей UNIX-подобных систем
- Темы без ответов
- Активные темы
- Поиск
- Статус форума
запуск скрипта от имени root
Модератор: Bizdelnick
запуск скрипта от имени root
Сообщение safronowmax » 13.12.2012 20:08
Re: запуск скрипта от имени root
Сообщение allez » 13.12.2012 20:35
Re: запуск скрипта от имени root
Сообщение safronowmax » 13.12.2012 22:05
allez, вы имеете в виду например так:
#!bin/bash
sudo mkdir test
Re: запуск скрипта от имени root
Сообщение allez » 13.12.2012 22:23
Re: запуск скрипта от имени root
Сообщение safronowmax » 13.12.2012 22:33
Проблема в том, что данный скрипт будет отдавать данные в zabbix, и такой вариант не подойдет, попробовал в /etc/sudoerc прописать пользователя с правами root: vbox ALL=(ALL) ALL, но что-то все равно не работает
Re: запуск скрипта от имени root
Сообщение Bizdelnick » 13.12.2012 23:43
в консол и вку́пе (с чем-либо) в общем в ообще | в течени е (часа) нович ок нюанс п о умолчанию | приемл емо пробле ма проб овать тра фик |
Re: запуск скрипта от имени root
Сообщение Vascom » 14.12.2012 09:06
Re: запуск скрипта от имени root
Сообщение allez » 14.12.2012 12:23
Re: запуск скрипта от имени root
Сообщение eddy » 14.12.2012 13:54
Re: запуск скрипта от имени root
Сообщение trendix » 14.12.2012 20:52
Re: запуск скрипта от имени root
Сообщение drBatty » 17.12.2012 11:42
Скоро придёт
Осень
Re: запуск скрипта от имени root
Сообщение liaonau » 17.12.2012 18:27
Re: запуск скрипта от имени root
Сообщение drBatty » 18.12.2012 11:23
Скоро придёт
Осень
Re: запуск скрипта от имени root
Сообщение Kopilov » 18.12.2012 18:52
Re: запуск скрипта от имени root
Сообщение drBatty » 19.12.2012 16:31
Скоро придёт
Осень
Re: запуск скрипта от имени root
Сообщение Poor Fred » 19.12.2012 16:39
Как будет отдавать? Может быть, наоборот, zabbix-agent будет сам забирать? Тогда и пользователь должен быть другой. zabbix, как ни странно.
Re: запуск скрипта от имени root
Сообщение Kopilov » 19.12.2012 17:43
Re: запуск скрипта от имени root
Сообщение liaonau » 19.12.2012 19:22
Re: запуск скрипта от имени root
Сообщение drBatty » 20.12.2012 11:37
смотря на что. Когда KDE3 сменилась на KDE4 то очевидно и документация поменялась, но вот какой смысл менять загрузочные скрипты — мне непонятно. Ну а раз они не меняются, то и документация к ним тоже.
Источник
Как скрипт может проверить, запускается ли он от имени 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 прошли эту проверку, только пройдены.
Источник
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.
Источник