Мне нужно запустить что-то как sudo без пароля, поэтому я использовал visudo
и добавил это в свой sudoers
файл:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Тогда я попробовал это:
$ sudo /path/to/my/program
[sudo] password for MYUSERNAME:
Почему он спрашивает пароль? Как я могу запускать / использовать команды от имени пользователя root без пользователя root, не спрашивая пароль?
/path/to/my/program
был сценарий Python?.bashrc
)? Или даже сценарий оболочки внутри/usr/local/sbin
? Попробовать./etc
, но некоторые системы помещают его в другое место. Если вы не можете его найти, попробуйтеman sudoers
. Локальное местоположение для этого файла должно быть подставлено вman
страницу во время созданияsudo
этой системы.Если есть несколько совпадающих записей
/etc/sudoers
, sudo использует последнюю. Поэтому, если вы можете выполнить какую-либо команду с запросом пароля, и вы хотите иметь возможность выполнить определенную команду без запроса пароля, вам понадобится последнее исключение.Обратите внимание на использование
(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
).источник
john ALL=(ALL) NOPASSWD: all
. Нет смысла проходить черезsu
.sudoers
вам не нужно делать ничего особенного:sudo
проверяйте это каждый раз.ВНИМАНИЕ : Этот ответ считается небезопасным. Смотрите комментарии ниже
Полное решение: следующие шаги помогут вам достичь желаемого результата:
Создайте новый файл скрипта (замените его
create_dir.sh
на желаемое имя скрипта):Скрипт будет создан в домашнем каталоге пользователя
Добавьте некоторые команды, которые может выполнять только пользователь
root
или,sudo
например, создав папку на уровне корневого каталога:Примечание: не добавляйте
sudo
к этим командам. Сохранить и выйти (используя:wq!
)Назначьте ему разрешения на выполнение, используя:
Внесите изменения, чтобы этот скрипт не требовал пароля.
Откройте
sudoers
файл:Добавьте следующую строку в конце:
Замените
ahmad
на то, что ваше имя пользователя. Также убедитесь, что это последняя строка. Сохранить и выйти.Теперь при запуске команды добавьте
sudo
перед этим:Это запустит команды внутри файла скрипта без запроса пароля.
Следуйте простым шагам, упомянутым здесь http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
источник
sudo
частьsudo chmod u+x create_dir.sh
не нужна, поскольку пользователь (предположительно) владеет своим домашним каталогом. Поскольку пользователь может писатьcreate_dir.sh
, вы фактически предоставили ему бесплатную корневую оболочку.chmod
это не нужно, поскольку вы полагаетесь наsudo
повышение своих привилегий.Я думаю, что ваш синтаксис неправильный. По крайней мере, я использую следующее, которое работает для меня:
источник
(ALL)
часть является необязательной, оставляя ее, имеет точно такой же эффект. Иметь(root)
было бы лучше, но его отсутствие не объясняет проблему.Если вы хотите избежать необходимости использовать sudo или изменять конфигурационный файл sudoers, вы можете использовать:
Это заставит команду работать от имени пользователя root без необходимости использования sudo.
источник
Если у вас есть дистрибутив, такой как Manjaro, вы должны сначала иметь дело с файлом, который переопределяет определение / etc / sudoers, вы можете удалить его или работать непосредственно с этим файлом, чтобы добавить свои новые конфигурации.
Этот файл:
ЕДИНСТВЕННЫЙ способ увидеть, что он находится под привилегиями root, вы не можете перечислить этот каталог без него, этот файл специфичен для Manjaro, вы можете найти эту конфигурацию с другим именем, но в том же каталоге.
В выбранном вами файле вы можете добавить следующие строки, чтобы получить желаемую конфигурацию (и):
Игнорировать аутентификацию для группы
или игнорировать аутентификацию для пользователя
или игнорировать аутентификацию исполняемого файла для конкретного пользователя
БЫСТРОЕ ПРИМЕЧАНИЕ: Вы открываете дверь для использования SUDO без аутентификации, это означает, что вы можете запускать все, что изменяет все из вашей системы, и использовать это с ответственностью.
источник
Убедитесь, что у sudo нет псевдонимов. Беги так
Например псевдоним оболочки, как этот:
может вызвать это поведение.
источник
sudoers
by sudo. Или вы говорите о перенаправленииsudo
на что-то, что всегда печатает это сообщение об ошибке, чтобы выкопать пароли? Это маловероятно, здесь ...alias sudo="sudo env PATH=$PATH"
у меня~/.bashrc
. Вместо того, чтобы просто решать это для себя и слепо заниматься своими делами, я представил свой ответ как возможное решение для всех, кто придет по этой теме.Когда вы выполняете свой скрипт, вам нужно запустить его как
sudo /path/to/my/script
.Изменить: на основе вашего комментария к другому ответу, вы хотите запустить это из значка. Вам нужно будет создать
.desktop
файл, который выполняет вашу программу с помощью sudo, как в терминале.Вы также можете рассмотреть возможность использования
gtk-sudo
для визуального запроса пароля.Вероятно, вам следует подумать о том, что вы не должны запускать вещи как root и что изменение системы дальше в будущем, так что вам вообще не нужны права root, было бы лучшим вариантом.
источник
Это решило проблему для меня (также попробовал некоторые другие ответы, которые могли бы помочь):
Сценарий, в который я звонил, находился в
/usr/bin
каталоге, к которому у меня нет прав записи (хотя я обычно могу читать любые файлы там). Сценарий был chmodded + x (исполняемый файл permisison), но он все еще не работал. Переместив этот файл по пути в моем домашнем каталоге, вместо этого/usr/bin
я наконец смог вызвать его с помощью sudo без ввода пароля.Также кое-что, в чем я сомневался (уточняю для будущих читателей): вам нужно запустить свой скрипт как sudo. Введите
sudo
при вызове сценария. Не используйтеsudo
для команды в вашем скрипте, которая на самом деле нуждается в root (в моем случае это изменение подсветки клавиатуры). Возможно, это тоже работает, но вам не нужно, и, кажется, лучшее решение не делать этого.источник
sudo
внутри скрипта прекрасно, если у вас есть соответствующие права (настроенныеsudoers
) для запуска рассматриваемой команды без пароля. Это делает вещи немного более безопасными.Другой возможностью может быть установка, настройка, а затем использование супер- команды для запуска вашего скрипта как
Если вы хотите запустить некоторый двоичный исполняемый файл (например , что вы скомпилирован в ELF двоичном из некоторого исходного кода C) -Какой это не script- как корень, вы можете рассмотреть возможность сделать это УИП (а на самом деле
/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 , прежде чем писать такие вещи.
Обратите внимание на то, что сценарий, или любой притон -ed вещь, не может быть УИП. Но вы можете закодировать (в C) небольшую setuid-двоичную оболочку.
источник
В идеале, если вы настраиваете, какие команды можно запускать через,
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
команд появляется перед любой%groupyouarein ALL=(ALL) ALL
командой в выходных данных, вам будет предложено ввести пароль.Если вы обнаружите, что создаете много этих файлов sudoers.d, то, возможно, вы захотите создать их по имени для каждого пользователя, чтобы их было проще визуализировать. Имейте в виду, что порядок ИМЕН ФАЙЛОВ и ПРАВИЛ в файле очень важен, выигрывает ПОСЛЕДНЯЯ загрузка, независимо от того, разрешено ли оно БОЛЕЕ или МЕНЬШЕ, чем предыдущие записи.
Попробуйте запустить
printf '%s\n' {{0..99},{A-Z},{a-z}} | sort
иprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort
посмотреть, печатает ли ваш текущий язык иAaBbCc
т. Д., ИлиABC
затемabc
определить, какой будет наилучший префикс «последней» буквы.источник
Чтобы позволить любому пользователю запускать программу как sudo без запроса пароля, вы можете добавить следующую строку
%sudo ALL=(root) NOPASSWD: /path/to/your/program
в
/etc/sudoers
Обратите внимание, что % sudo делает это.
источник
Следующее относится к случаю, когда вы хотите выполнить команду без пароля, только если она имеет определенный набор параметров, где часть параметров является переменной . AFAIK невозможно использовать переменные или диапазоны значений в объявлениях sudoers, т.е. вы можете явно разрешить доступ,
command option1
но неcommand option2
используя:user_name ALL=(root) /usr/bin/command option1
но если структура
command option1 value1
, гдеvalue1
могут варьироваться, вам нужно будет иметь явную sudoers линию для каждого возможного значенияvalue1
. Сценарий оболочки предоставляет способ обойти это.Этот ответ был вдохновлен ответом Ахмада Зафара и устраняет проблему безопасности.
sudo
./usr/local/bin/
), сделайте файл корневым (напримерchown root:wheel /usr/local/bin/script_name
) без прав на запись для других (напримерchmod 755 /usr/local/bin/script_name
).Добавьте исключение для sudoers, используя visudo:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
,Запустите ваш скрипт
sudo script_name
.Например, я хочу изменить время ожидания для отображения в macOS. Это делается с помощью:
sudo pmset displaysleep time_in_minutes
Я считаю изменение тайм-аута невинным действием, которое не оправдывает хлопот при наборе пароля, но
pmset
может многое, и я бы хотел оставить эти другие вещи за паролем sudo.Итак, у меня есть следующий скрипт
/usr/local/bin/ds
:В конце
sudoers
файла у меня есть следующая строка:user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
Чтобы установить тайм-аут на 3 минуты, я запускаю свой скрипт из учетной записи обычного пользователя
user_name
:sudo ds 3
PS Большая часть моего сценария является проверкой ввода, которая не является обязательной, поэтому также будет работать следующее:
источник