Intereting Posts
Комбинируйте fdisk и df на одном выходе Что использует всю память в моей виртуальной машине? Это не кэш диска Выполнение команд сразу Как отключить однопользовательский режим на удаленной машине? Производительность с плавающей запятой в Linux Вывод цветного скрипта только при вызове из интерактивной оболочки Как остановить брандмауэр от записи журналов в / var / log / messages? как автоповорот поверх логов Идентичная ситуация разные результаты! не может смотреть youtube через прокси-сервер У установки Debian нет пользователя uucp – как создать Как установить Ubuntu в нетбук, но сохраняя первоначальную установку win7 в хранилище Получение времени эпохи от отметки времени gmt Какие кодировки символов поддерживаются posix? wget зависает ПОСЛЕ завершения загрузки, на exit_group Как использовать отправку / получение btrfs для передачи моментальных копий резервных копий по медленному и ненадежному сетевому соединению?

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

Мне нужно запустить что-то как sudo без пароля, поэтому я использовал visudo и добавил его в файл sudoers :

 MYUSERNAME ALL = NOPASSWD: /path/to/my/program 

Затем я попробовал:

 $ sudo /path/to/my/program [sudo] password for MYUSERNAME: 

Почему он запрашивает пароль? Как я могу запускать / использовать команды как root с пользователем без полномочий root, не запрашивая пароль?

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

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

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

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

Обратите внимание на использование (root) , чтобы программа запускалась с правами 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 ).

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

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

     vim ~/create_dir.sh 

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

  2. Добавьте несколько команд, которые может выполнять только пользователь 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/

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

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

Убедитесь, что sudo не является псевдонимом. Выполнить так

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

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

 alias sudo="sudo env PATH=$PATH" 

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

Когда вы выполняете свой скрипт, вам нужно запустить его как sudo /path/to/my/script .

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

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

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

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

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

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

В некоторых дистрибутивах Manjaro в моем случае есть файл, который переопределяет файл / etc / sudoers

 sudo cat /etc/sudoers.d/10-installer 
  • ЕДИНСТВЕННЫЙ способ увидеть это под привилегиями root, вы не можете перечислить этот каталог без него.

Там вы найдете что-то вроде этого:

 youruser ALL=(ALL) 

Вы можете удалить этот файл и использовать cfg в файле / etc / sudoers


/ etc / sudoers :

В файле sudoers вы должны положить что-то вроде:

 %group ALL=(ALL) NOPASSWD: ALL 

или

 youruser ALL=(ALL) NOPASSWD: ALL 

или

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

Надеюсь, это поможет кому-то :).

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

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

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

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

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

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

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

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

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

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

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

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

 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 (читать chmod (1) ) при установке такого двоичного файла.

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

Прочитайте много вещей о setuid , включая Advanced Linux Programming , перед тем, как закодировать такую ​​вещь.

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