You need to be root to run this script linux что делать

Обновлено: 04.07.2024

Цитата из справочной страницы bash, раздел Command Substitution:

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

Немного дальше, тот же раздел:

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

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

83 ответа

Я принимаю эту причину (после некоторого тестирования) с использованием системной переменной EUID, которая оказалась (примерно в 100 раз) быстрее, чем запуск команды (id -u), но все ответы работали отлично. – Malabarba 2 December 2010 в 15:59 Кроме того, $UID и $EUID являются багизмами. У простых оболочек, совместимых с POSIX, нет этих переменных, и вам нужно использовать id(1) . – David Foerster 16 October 2014 в 14:28 в сценарии bash вы можете использовать if ((EUID)); then, см. комментарий @ geirha – jfs 18 October 2014 в 00:38 Кроме того, $ UID и $ EUID - это базисы. У простых оболочек, совместимых с POSIX, нет этих переменных, и вам нужно использовать id (1) . – David Foerster 16 October 2014 в 14:28 в сценарии bash вы можете использовать , если ((EUID)); затем , см. комментарий @ geirha – jfs 18 October 2014 в 00:38 @Andrew: переменные заменяются до их передачи в sudo . Если вы запустите sudo sh -c 'echo $ EUID' , вы увидите ожидаемые результаты. – M. Dudley 19 November 2015 в 22:09

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

Тесты

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

Записан как root2, дает следующие результаты:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 оболочки. В настоящее время это вопрос личного выбора и потребностей.

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

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

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

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

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

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

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

Подскажите программу для реализации следующего. Есть скрипт, он должен запускаться от суперпользователя, так как выполняет некоторое привилегированное действие. Нужно что бы этот скрипт мог выполнить определенный пользователь от имени суперпользователя без ввода пароля и без прав на просмотр и редактирование самого скрипта. И понятно что только этот скрипт. Очевидно проблема решается написанием простой программы за час, но чудится мне что уже кто-то изобрел сей велосипед.



Очевидно проблема решается написанием простой программы за час

ты только что изобрёл sudo


Оно, конечно, похвально, что вот так от зубок отскакивает одно из реализаций решений для ТС-ов. Вот только это именно реализация, без понимания как оно делается, и не стадартная в мире юникс. Правильный ответ всё же — суидный враппер, который может делать а может не делать проверки и логи, что делает, например sudo, а может иметь гораздо более развесистый конфиг, что есть у sudo.


Я конечно дико извиняюсь, но ты сейчас пытаешься посоветовать ТСу для запуска скрипта из под рута написать собственный suid-wrapper? Потому что(поправь если я ошибаюсь), suid-бит на скриптах не работает.

И да, ТС просил готовую реализацию. sudo под это определение подходит. Если б ТС интересовался как оно в кишках работает - можно было бы и подсказать(в любой более-менее нормальной книги по UNIX/Linux об этом рассказывается), но у него несколько более прикладная задача(понятное дело - знать как оно в принципе работает не повредит, скорее наоборот - поможет избежать возможных проблем).

TL;DR: я тоже не во всем в восторге от sudo, но именно она эту задачу решает(правда скрипт придется запускать не как /path/to/script, а /path/to/interpreter /path/to/script - может ТСа это не устроит, но что гадать - пусть сам скажет?)

P.S. Фух, какое же я занудный с утра. Похоже надо накатить :-)



sudo под это определение подходит

Наверное, вы не выспались? Я дал более полное объяснение и нисколько не запрещал использовать sudo, как одной из реализации решения задачи.

vodz ★★★★★ ( 04.01.19 11:56:08 )
Последнее исправление: vodz 04.01.19 12:02:17 (всего исправлений: 1)


А, ну извини, видимо я неверно тебя понял.

создает скрыпт с нужными командами и делаем его исполняемым

все прально, теперь обучаем sudo не требовать пароль юзверя для конкретного скрыпта
тобеж вписываем в конец /etc/sudoers строчку сбрасываем таймстамп sudo и запскаем от sudo скрыпт - и о чудо пароль не требует. вот так непрнужденно можно сделать секретаршу в системе безопасности.

вариант2: chmod +s


Я его тоже не понял, выглядело как критика )))

НАТО это опасная антироссийская военная организация, сильнейшая в мире.

Если так, то почему она не уничтожила вашу помойку в самый удобный момент, в начале 90х? Вместо этого зачем-то они стали помогать выжить. А ублюдочная помойка, нарастив жирок и встав на ноги, снова начала выпендриваться.

Так что факты говорят о том что к сожалению на самом деле никакая не антироссийская. К сожалению. Иначе бы биомусорки уже не было бы почти 20 лет.

чтобы заслужить такое предательство.

Какое предательство? Они вам клялись в верности? С чего биомусор считает что их бывшие колонии должны быть их вечными рабами? Совок давно растерял свои колонии. Всё, забудьте. Но вы вместо того чтобы заниматься своими внутренними проблемами, повышать качество своей жизни, продолжаете жить в говне и при этом всё своё внимание уделять тому, как живут граждане другой страны. Сидит биомусор за телевизором, жрёт пустую гречку, т.к. им вождь запретил нормальные продукты, а по телевизору каждый выпуск новостей только о том как весело скачут хохлы, пиндосы совсем офигели и в конце вождь обещает что всё будет хорошо.

Так что не жди что такие как я будем каяться.

Да всем насрать. Восстановите себе железный занавес, весь мир вздохнёт с облегчением. Я очень надеюсь что Пути всё же в скором времени вас отрежет от цивилизованного мира, отключит от сети, оставив только внутренний чебурнет. А когда решит уйти на пенсию, оставит после себя Кадырова в качестве преемника. А будете ли вы каяться, пофиг. История давно показала что вы настолько ублюдочная биомасса что никогда не раскаиваетесь в плохих поступках.

Но время всё раставляет по местам и вы не зря живёте так убого. Впрочем, несмотря на это, всё же живёте лучше чем заслуживаете. Хотя, какие там у вас перспективы?

Мы будем воевать (и поддерживать) за нейтральный военный статус Украины.

Root sudo Linux

В дистрибутивах Linux пользовательские привилегии предоставляются путем открытия доступа к root. Наличие таких прав позволяет использовать функциональность операционной системы более широко и выполнять необходимые действия в корневом каталоге.

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

Предназначение root-прав в Linux

Права обычного пользователя в Linux крайне ограничены. Он может управлять только своим каталогом и открывать для чтения определенные файлы из корня. Доступ для их изменения или установки программ отсутствует, что делает привилегии суперпользователя крайне важными при настройке ОС и решении разных проблем. Обычный пользователь ограничивается следующим набором прав:

  • чтение, запись и изменение любых атрибутов пользовательской папки;
  • то же самое и для каталога /tmp ;
  • выполнение программ в любом месте, где нет ограничений;
  • чтение файлов с соответствующим атрибутом для всех пользователей.

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

Безопасность использования прав суперпользователя

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

С серверной частью все гораздо сложнее, поскольку рут как таковой не предоставляет полной защиты. Часто используемые пароли взламываются путем перебора или поиском бэкдора. Поэтому не стоит полагаться исключительно на защиту паролем, если вы владеете файлами сайтов или используете сервер для других целей. Займитесь настройкой файрвола, если это повысит уровень защиты.

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

Команда sudo тесно связана с root в Linux, поскольку отвечает за передачу прав суперпользователя и позволяет от его имени выполнять команды в Терминале. Существует несколько ее вариаций, использующихся при разных обстоятельствах. Подходит эта команда как для выполнения всего одного действия, так и для передачи прав на всю текущую сессию.

Использование команды sudo в Linux

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

Еще sudo применяется для установки софта, команда в таком случае обретает вид:

Если же вы желаете использовать сразу несколько команд, например, введя sudo cat file.txt | grep text > file.txt , появится ошибка, поскольку при выполнении второй команды права суперпользователя отсутствуют, а значит, запись в файл невозможна. Решается такая ситуация добавлением sudo перед каждым выражением.

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

VDS Timeweb арендовать

Переключение на суперпользователя

Еще раз уточню, что команда sudo идеально подходит для получения необходимых привилегий без переключения учетной записи. Ее можно использовать как для выполнения одного действия, так и нескольких. Если вы желаете временно получить рут-права через эту команду, введите sudo -s или sudo -i . В первом случае домашний каталог остается текущим, а во втором меняется на /root.

Примерно так же работает и команда su , но она обладает дополнительными аргументами, которые следует уточнить:

  • -c – позволяет выполнить команду;
  • -g – устанавливает группу для пользователя;
  • -G – дополнительные группы для юзера;
  • - , -l , --login – один из режимов входа, при котором происходит переключение домашнего каталога;
  • -p – сохранение переменных окружения;
  • -s – выбор оболочки для выхода.

Есть вариант выполнить вход в оболочку под суперпользователем, но он имеет свои неудобства. Он заключается в переключении в доступную виртуальную консоль, что осуществляется комбинацией Ctrl + Alt + F1-F6 . Там понадобится ввести логин и пароль root для получения доступа. Главный недостаток этого метода – потеря возможности взаимодействия с графическим интерфейсом операционной системы.

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

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

Предоставление и отзыв прав суперпользователя

Каждому пользователю в Linux можно предоставить root-права, добавив его в соответствующую группу. Точно так же их можно и отнять, если вдруг это понадобится. Рассмотрю три варианта действий.

Создание нового пользователя с root

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

sudo Linux

  1. Откройте Терминал и введите команду sudo adduser user (user замените на нужное имя пользователя).
  2. В консоли появятся инструкции по созданию нового пользователя. Присвойте пароль и подтвердите действие, чтобы завершить создание.
  3. Добавьте новую учетную запись в группу sudo, введя sudo usermod -aG sudo user ( user здесь тоже понадобится заменить).
  4. Проверьте выполненные действия, переключившись на новую учетную запись через su testuser . Для подтверждения введите пароль (при вводе символы не отображаются на экране).
  5. Выполните любую команду с sudo и убедитесь, что все прошло успешно.

Для существующей учетной записи

Если учетная запись уже добавлена, в консоли остается ввести только одну команду, чтобы добавить пользователя в группу sudo и разрешить ему получение рут-прав. Сама команда представлена ниже, вам остается только скопировать ее и поменять имя юзера.

Предоставление прав суперпользователя существующей учетной записи в Linux

Используйте предыдущую инструкцию для проверки внесенных изменений.

Откат прав суперпользователя

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

Измените user на необходимое имя. Можете переключиться на эту учетную запись и убедиться в том, что теперь команды с sudo она выполнять не может.

Откат прав суперпользователя в Linux

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

Читайте также: