Quiero permitir que un usuario ejecute grep (a través de sudo) y grep para una cadena específica en un archivo específico. No quiero permitir que este usuario pueda ejecutar grep en todos los archivos. El usuario no tiene acceso de lectura al archivo, de ahí el requisito de usar sudo. Estoy tratando de escribir un cheque nagios que agrupa el archivo de registro de otro servicio en la máquina.
Sin embargo, no funciona, sudo sigue pidiendo una contraseña.
Mi comando es: sudo grep "string I want (" /var/log/thefilename.log(sí, hay un (espacio en bruto y algunos espacios en la cadena que quiero grep)
/etc/sudoers.d/user-can-grep tiene este contenido:
user ALL=(root) NOPASSWD: /bin/grep "string I want (" /var/log/thefilename.log
Este archivo sudoers es propiedad root:rooty tiene permisos-r--r-----
El servidor es Ubuntu confiable 14.04.3 LTS.
¿Cómo puedo hacer que esto funcione?

sudo.grepywhich grepme dice que está usando/bin/grep. AFAIK en el archivo sudo necesita especificar la ruta completa del binario, incluso si lo llama sin la ruta completa.Respuestas:
Aparentemente, sudo aplana el comando en una cadena antes de compararlo con una especificación en el archivo sudoers. Entonces, en su caso, no necesita usar comillas ni ninguna otra forma de escape:
Editar : como @ user23013 señala en los comentarios, esto se puede explotar para grep para "string I want" en cualquier archivo (y, por extensión, también para "string I" y "string"). Por favor, considere detenidamente antes de usando la comprobación de argumentos de sudo!
También tenga en cuenta que las siguientes invocaciones son equivalentes, es decir, no podrá restringir a los usuarios a una representación específica:
Esto se debe al hecho de que las cotizaciones y los escapes son manejados por el shell y nunca llegan
sudo.fuente
sudoque escribiste una cosa (que coincide con la especificación), pero cuando se trata de ejecutarla, es algo completamente diferente.sudoers:user host = NOPASSWD: /usr/bin/vim Editing sudoers file(con la intención de permitir a los usuarios editar "Editar archivo de sudoers") puede explotarsecdingresando/etc/y ejecutándosesudo vim Editing sudoers file. Yo diría que para cualquier comando de complejidad razonable uno debe ir con el enfoque sugerido en su comentario: el shell proporciona una$@variable donde puede verificar que los argumentos están agrupados de la manera que espera que estén agrupados.( /var/logcualquier lugar y enlace simbólicothefilename.loga cualquier archivo, el usuario puede seleccionarstring I wantdesde cualquier archivo.grepque necesitaMucho más fácil de depurar, más fácil bloquear el acceso específico a un archivo específico y mucho más difícil de explotar.
fuente
Ya que sólo necesita root para el acceso a los archivos, considere el uso
cat,teeo algo similar y tuberías que agrep, o cualquier programa que necesita para funcionar. Por ejemplo, desudo cat /file/path | grep …esta manera restringe la raíz a donde la necesita absolutamente.fuente
sudoes genial, pero a veces no es la mejor opción. Para esto me gusta usarsuper.supertambién permite permisos elevados, sin embargo, asume alias de comando, lo cual es conveniente cuando se permiten líneas de comando complicadas, ya que se usan como líneas de comando simples.su super.tab se vería así:
y sería invocado como
super grepcmd.fuente
sudohasCmnd_Alias(que puede contener uno o más comandos, con o sin restricciones arg).