Как запустить определенную программу как корень без подсказки пароля?

Можно выполнить в нем screen оконечный мультиплексор.

  • Разделять вертикально: ctrla затем |.
  • Разделять горизонтально: ctrla затем S (верхний регистр').
  • Не разделять: ctrla затем Q (верхний регистр 'q').
  • Переключаться от одного до другого: ctrla затем вкладка

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

РЕДАКТИРОВАНИЕ, основное экранное использование:

  • Новый терминал: ctrla затем c.
  • Следующий терминал: ctrla затем располагают с интервалами.
  • Предыдущий терминал: ctrla затем возвращаются.
  • Терминал N'th ctrla затем [n]. (работы для n ∈ {0,1 … 9})
  • Переключатель между терминалами с помощью списка: ctrla затем "(полезный, когда больше чем 10 терминалов)
  • Отправьте ctrla на базовый терминал ctrla затем a.
171
17.08.2011, 03:31
13 ответов

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

Сделав это, sudo будет обычно запрашивать пароль для всех команд кроме /path/to/my/program, который это будет всегда позволять Вам выполнить, не прося Ваш пароль.

95
27.01.2020, 19:28
  • 1
    был бы это все еще работать если /path/to/my/program был сценарий Python? –  sadmicrowave 03.03.2014, 22:29
  • 2
    Может программа вместо этого быть псевдонимом, установить для удара (т.е. в .bashrc)? Или даже сценарий оболочки внутри /usr/local/sbin? Испытывать. –  Nikos Alexandris 05.08.2016, 19:11

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

myusername ALL = (ALL) ALL
myusername ALL = (root) NOPASSWD: /path/to/my/program

Отметьте использование (root), позволить программе быть выполненной как корень, но не как другие пользователи. (Не давайте больше полномочий, чем минимум потребовал, если Вы не продумали последствия.)

Отметьте читателями, которые не запускают Ubuntu или кто изменил значение по умолчанию sudo конфигурация (sudo Ubuntu в порядке по умолчанию): Выполнение сценариев оболочки с поднятыми полномочиями опасно, необходимо запустить с чистой среды (после того как оболочка запустилась, слишком поздно (см., Позволяют setuid на сценариях оболочки), таким образом, Вам нужен sudo для заботы об этом). Удостоверьтесь, что Вы имеете Defaults env_reset в /etc/sudoers или что эта опция является значением по умолчанию времени компиляции (sudo sudo -V | grep env должен включать Reset the environment to a default set of variables).

137
27.01.2020, 19:28
  • 1
    исключая пойти корень от jhon с sudo su никакая передача-----> Джон ВСЕ = (ВЕСЬ) NOPASSWD:/bin/su –  bortunac 13.07.2014, 17:05
  • 2
    @adrian, Если Вы хотите позволить произвольные команды как корень, делает это john ALL=(ALL) NOPASSWD: all. Нет никакого смысла в движении через su. –  Gilles 'SO- stop being evil' 13.07.2014, 17:08
  • 3
    : я должен изменить полномочия своего сценария оболочки так, чтобы он мог быть изменен и читать пользователем root только для безопасности? Я думаю о взломщике, изменяющем сценарий, который имеет все разрешения, данные без потребности пароля, так, чтобы это сделало то, что он хочет. Очевидно, взломщик не может даже считать sudoers файл для знания, какие сценарии имеют это полномочие, но могут все еще попробовать всеми моими пользовательскими сценариями, после того как он находит папку, в которой они хранятся в надежде, которую некоторым разрешают, или что-то как этот. –  Jeffrey Lebowski 10.10.2017, 21:13
  • 4
    @JeffreyLebowski, Если у Вас есть правило sudo, которое запускает скрипт (прямо или косвенно) затем, жизненно важно, чтобы только базировались (или люди, у которых есть полномочия пользователя root так или иначе), может записать в файл сценария, и в каталог, содержащий файл сценария, и к его родительскому каталогу и так далее. Не имеет значения, что любой может считать файл сценария (если это не содержит пароль или что-то, но это - плохая идея, если существует пароль, которым это должно быть в его собственном файле, иначе существует слишком много риска случайной утечки его, например, вставкой копии что раздел кода в вопросе на этом сайте). –  Gilles 'SO- stop being evil' 10.10.2017, 21:51

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

myusername ALL=(ALL) NOPASSWD: /path/to/executable
10
27.01.2020, 19:28
  • 1
    (ALL) часть является дополнительной, пропущение ее имеет точно тот же эффект. Наличие (root) было бы лучше, хотя, но его отсутствие не объясняет проблему. –  Gilles 'SO- stop being evil' 12.05.2011, 14:39
  • 2
    +1 для sudo для этой команды и ничего иного! Никакая причина повредить всю систему... –  Johan 12.05.2011, 14:40
  • 3
    @Johan: Это уже было в вопросе. –  Gilles 'SO- stop being evil' 12.05.2011, 15:13

При выполнении сценария, необходимо выполнить его как sudo /path/to/my/script.

Править: На основе Вашего комментария к другому ответу Вы хотите выполнить это от значка. Необходимо будет создать a .desktop файл, который выполняет Вашу программу с sudo, точно так же, как на терминале.

Вы могли также рассмотреть использование gtk-sudo для визуальной подсказки пароля.

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

2
27.01.2020, 19:28
  • 1
    Не делайте сценарии оболочки setuid. Посмотрите Позволяют setuid на сценариях оболочки. –  Gilles 'SO- stop being evil' 12.05.2011, 14:38
  • 2
    , я рассмотрел даже упоминание его, потому что это - такая плохая опция. Я просто удалил его, потому что я волнуюсь, что этот автор вопроса мог бы использовать совет даже с предупреждением, что это был плохой совет! –  Caleb 12.05.2011, 14:41

Это решило проблему для меня (также попробовал некоторые из других ответов, которые, возможно, помогли):

Сценарий, который я называл, был в /usr/bin, каталог, к которому у меня нет полномочий записи (хотя я могу обычно читать любые файлы там). Сценарий был chmodded +x (исполняемое разрешение), но это все еще не работало. Перемещение этого файла к пути в моем корневом каталоге, вместо /usr/bin, Мне наконец удалось называть его с sudo, не вводя пароль.

Также что-то я сомневался о (разъясняющийся для будущих читателей): необходимо запустить скрипт как sudo. Ввести sudo при вызове сценария. Не использовать sudo для команды в Вашем сценарии, который на самом деле должен базироваться (изменяющаяся подсветка клавиатуры в моем случае). Возможно, это также работает, но Вы не должны, и это походит на лучшее решение не к.

2
27.01.2020, 19:28
  • 1
    Второй абзац имел ответ на мою проблему –  M. Ahmad Zafar 13.09.2013, 11:02
  • 2
    @MuhammadAhmadZafar Glad, которому это помогло! сон –  Luc 13.09.2013, 13:53
  • 3
    На самом деле использование sudo в сценарии превосходно, если Вы имеете соответствующие права (начаться sudoers) выполнять рассматриваемую команду без пароля. Это делает вещи немного более безопасными. –  peterph 19.07.2014, 11:21
  • 4
    мог действительно использовать этот ответ, переписанный в качестве пошагового, 'это - то, как Вы делаете это', а не как диалог с другими ответами –  Walrus the Cat 29.11.2017, 00:31
  • 5
    @WalrustheCat Обзора. Перечитывая мой ответ, я думаю, что, возможно, был смущен немного сам. Прямо сейчас, хотя, я не помню то, чем точная ситуация была так, я не могу действительно сделать лучшей рецензии. Если Вы понимаете это, возможно, комбинация нескольких ответов, любой ценой отправляете новый ответ! –  Luc 29.11.2017, 09:24

ПРЕДУПРЕЖДЕНИЕ: Этот ответ считали небезопасным. См. комментарии ниже

Полное решение: следующие шаги помогут Вам достигнуть желаемого вывода:

  1. Создайте новый файл сценария (замена create_dir.sh с Вашим желаемым названием сценария):

    vim ~/create_dir.sh
    

    Сценарий будет создан в корневом каталоге пользователя

  2. Добавьте некоторые команды это только a root или sudo пользователь может выполниться как создание папки на уровне корневого каталога:

    mkdir /abc
    

    Примечание: Не добавлять sudo к этим командам. Сохраните и выйдите (использование :wq!)

  3. Присвойтесь выполняют полномочия к нему использование:

    sudo chmod u+x create_dir.sh
    
  4. Внесите изменения так, чтобы этот сценарий не требовал пароля.

    1. Откройтесь sudoers файл:

      sudo visudo -f /etc/sudoers
      
    2. Добавьте следующую строку в конце:

      ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
      

      Замена ahmad с чем Ваше имя пользователя. Также удостоверьтесь, что это - последняя строка. Сохраните и выйдите.

  5. Теперь, когда выполнение команды добавляет sudo перед ним как:

    sudo ./create_dir.sh
    

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

Выполните легкие шаги, упомянутые здесь http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/

25
27.01.2020, 19:28
  • 1
    Было бы лучше, если бы Вы обеспечили соответствующие шаги здесь и использовали ссылку в качестве резервного копирования для более подробной информации. Тем путем Ваш ответ сохраняет возможное значение, даже если та ссылка больше не была бы действительна. –  Anthon 14.09.2013, 08:37
  • 2
    Этот совет небезопасен. sudo часть sudo chmod u+x create_dir.sh является ненужным, поскольку у пользователя есть (по-видимому), владение по его домашнему dir. Так как пользователь может записать в create_dir.sh, Вы эффективно дали свободную корневую оболочку тому пользователю. –  Lekensteyn 19.07.2014, 11:36
  • 3
    @Lekensteyn, Что значит также для любой программы, работающей как пользователь. Мог бы также просто позволить пользователю выполнять что-либо с sudo без пароля. –  pydsigner 23.05.2016, 04:41

Убедитесь, что судо не является псевдонимом. Запустите как это

/usr/bin/sudo /path/to/my/program

Например, псевдоним оболочки как этот:

alias sudo="sudo env PATH=$PATH"

может вызвать такое поведение.

4
27.01.2020, 19:28

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

Это файл:

sudo cat /etc/sudoers.d/10-installer

ЕДИНСТВЕННЫЙ способ увидеть его - под привилегиями root, вы не можете перечислить этот каталог без него, этот файл специфичен для Manjaro, вы можете найти эту конфигурацию с другим именем, но в том же каталоге.

В выбранном вами файле вы можете добавить следующие строки, чтобы получить желаемую конфигурацию (и):

Игнорировать аутентификацию для группы

%group ALL=(ALL) NOPASSWD: ALL

или Игнорировать аутентификацию для пользователя

youruser ALL=(ALL) NOPASSWD: ALL

или Игнорировать аутентификацию исполняемый файл для конкретного пользователя

youruser ALL=(ALL) NOPASSWD: /path/to/executable

КРАТКОЕ ПРИМЕЧАНИЕ: вы открываете дверь для использования SUDO без аутентификации, это означает, что вы можете запускать все, изменяя все в вашей системе, использовать его с ответственностью.

5
27.01.2020, 19:28

В идеале, если вы настраиваете команды, которые можно запускать через sudo, эти изменения следует вносить в отдельный файл в папке /etc/sudoers.d/ вместо прямого редактирования файла sudoers. Вы также всегда должны использовать visudo для редактирования файлов. НИКОГДА не следует предоставлять NOPASSWD для ВСЕХ команд.

Пример: sudo visudo -f /etc/sudoers.d/mynotriskycommand

Вставьте строку, предоставляющую разрешение: myuser ALL= NOPASSWD: /path/to/your/program

Затем сохраните и выйдите, и visudo предупредит вас о синтаксических ошибках.

Вы можете запустить sudo -l, чтобы увидеть разрешения, которые были предоставлены вашему пользователю, если какая-либо из специфичных для пользователя команд NOPASSWD появляется ДО любой %groupyouarein ALL= (ALL) ALL в выводе вам будет предложено ввести пароль.

Если вы обнаружите, что создаете много таких файлов sudoers.d, возможно, вы захотите создать их с именами для каждого пользователя, чтобы их было легче визуализировать. Имейте в виду, что порядок ИМЕН ФАЙЛОВ и ПРАВИЛ в файле очень важен, выигрывает ПОСЛЕДНИЙ загруженный, независимо от того, является ли он БОЛЕЕ или МЕНЬШЕ разрешающим, чем предыдущие записи.

Вы можете управлять порядком имен файлов, используя префикс 00-99 или aa/bb/cc, но также имейте в виду, что если у вас есть ЛЮБЫЕ файлы без числового префикса, они будут загружаться после пронумерованного файлы, переопределяя настройки. Это связано с тем, что в зависимости от ваших языковых настроек «лексическая сортировка» оболочка сначала использует числа сортировки, а затем может чередовать прописные и строчные буквы при сортировке в «возрастающем» порядке.

Попробуйте запустить printf '%s\n' {{0..99},{A-Z},{a-z}} | sort и printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort, чтобы узнать, печатает ли ваш текущий язык AaBbCc etc или ABC, затем abc, чтобы определить, какой префикс «последней» буквы лучше всего использовать было бы.

0
20.08.2021, 13:34

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

sudo chown root:root path/to/command/COMMAND_NAME
sudo chmod 4775 path/to/command/COMMAND_NAME

Это заставит команду выполняться от имени пользователя root без необходимости использования sudo.

11
20.08.2021, 13:34

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

super /path/to/your/script

Если вы хотите запустить какой-нибудь двоичный исполняемый файл (, например. который вы скомпилировали в ELF двоичный файл из некоторого исходного кода C)-который не скрипт -как root, вы можете подумать о том, чтобы сделать его setuid(и на самом деле /bin/login, /usr/bin/sudo, /bin/suи superиспользуют эту технику ). Однако будьте очень осторожны, вы можете открыть огромную дыру в безопасности .

Конкретно, ваша программа должна быть закодирована параноидально (, поэтому проверьте все аргументы, среду и внешние условия, прежде чем «действовать», предполагая потенциально враждебного пользователя ),тогда вы можете использовать seteuid (2)и друзей (см. также setreuid (2))осторожно (см. также возможности (7)& учетные данные (7)& execve (2)...)

Вы будете использоватьchmod u+s(read chmod (1))при установке такого двоичного файла.

Но будьте очень осторожны .

Прочтите много информации о setuid , в том числеAdvanced Linux Programming , прежде чем программировать подобные вещи.

Заметьте, что сценарий или любая переделанная-вещь не может быть setuid. Но вы можете закодировать (в C )небольшой двоичный файл setuid -, обернув его.

Имейте в виду, что в Linux код приложения взаимодействует с ядром Linux с помощью системных вызовов (2). Большинство из них могут выйти из строя, см. errno (3). Многие приложения для Linux (, например. GNU bash , GNU make , GNU gdb , GNOME)с открытым исходным кодом :вам разрешено загружать, затем изучать и вносить свой вклад их исходный код.

1
20.08.2021, 13:34

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

%sudo ALL=(root) NOPASSWD: /path/to/your/program

в/etc/sudoers

Обратите внимание, что %sudo делает это.

0
20.08.2021, 13:34

В качестве альтернативы вы можете использовать пакет python pudo .

Установка:

user$ sudo -H pip3 install pudo # you can install using pip2 also

Ниже приведен фрагмент кода для использования в автоматизации Python для запуска команд с привилегиями root:

user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'

Ниже приведен пример cmd для запуска команд с привилегиями root:

user$ pudo ls /root
Desktop  Downloads  Pictures  Music
1
20.08.2021, 13:34

Теги

Похожие вопросы