Я хочу разрешить одному пользователю запускать grep (через sudo) и grep для одной конкретной строки в одном конкретном файле. Я не хочу, чтобы этот пользователь мог запускать grep для всех файлов. Пользователь не имеет доступа для чтения к файлу, поэтому требуется использовать sudo. Я пытаюсь написать проверку nagios, который greps файл журнала другой службы на машине.
Однако это не работает, sudo продолжает спрашивать пароль.
Моя команда: sudo grep "string I want (" /var/log/thefilename.log
(да, есть (
строка и некоторые пробелы в строке, которую я хочу grep)
/etc/sudoers.d/user-can-grep
имеет это содержание:
user ALL=(root) NOPASSWD: /bin/grep "string I want (" /var/log/thefilename.log
Этот файл sudoers принадлежит root:root
и имеет разрешения-r--r-----
Сервер Ubuntu верен 14.04.3 LTS.
Как я могу сделать эту работу?
sudo
.grep
иwhich grep
сообщает, что использует/bin/grep
. AFAIK в файле sudo необходимо указать полный путь к двоичному файлу, даже если вы вызываете его без полного пути.Ответы:
Судя по всему, sudo объединяет команду в строку перед тем, как сравнить ее со спецификацией в файле sudoers. Итак, в вашем случае вам не нужно использовать кавычки или любую другую форму экранирования:
Редактировать : как @ user23013 указывает в комментариях, это можно использовать для grep для «строки, которую я хочу» в любом файле (и, соответственно, также для «строки I» и «строки».) Пожалуйста, внимательно подумайте, прежде чем используя проверку аргументов sudo!
Также обратите внимание, что следующие вызовы эквивалентны, то есть вы не сможете ограничить пользователей одним конкретным представлением:
Это связано с тем, что кавычки и экранирование обрабатываются оболочкой и никогда не достигают
sudo
.источник
sudo
вы напечатали одну вещь (которая соответствует спецификации), но когда дело доходит до ее выполнения, это совсем другое.sudoers
:user host = NOPASSWD: /usr/bin/vim Editing sudoers file
(с намерением разрешить пользователям редактировать "Редактирование файла sudoers") можно использоватьcd
вход/etc/
и запускsudo vim Editing sudoers file
. Я бы сказал, что для любой команды разумной сложности следует использовать подход, предложенный в вашем комментарии - оболочка предоставляет$@
переменную, где вы можете проверить, сгруппированы ли аргументы так, как вы ожидаете, что они будут сгруппированы.( /var/log
любом месте и символическую ссылкуthefilename.log
на любой файл, пользователь может grepstring I want
из любого файла.grep
вам нужноНамного легче отлаживать, легче блокировать определенный доступ к определенному файлу и намного сложнее его использовать.
источник
Так как вам нужно только корень для доступа к файлу, следует использовать
cat
,tee
или что - то подобное и трубопроводов , чтоgrep
или любой другой программы вам нужно запустить. Например,sudo cat /file/path | grep …
таким образом вы ограничиваете root там, где вам это абсолютно необходимо.источник
sudo
это здорово, но иногда это не совсем подходит. Для этого я люблю использоватьsuper
.super
также разрешает повышенные разрешения, однако предполагает псевдонимы команд, что удобно при разрешении сложных командных строк, поскольку они используются в качестве простых командных строк.ваш super.tab будет выглядеть так:
и будет вызываться как
super grepcmd
.источник
sudo
hasCmnd_Alias
(который может содержать одну или несколько команд, с или без ограничений arg).