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:root
y tiene permisos-r--r-----
El servidor es Ubuntu confiable 14.04.3 LTS.
¿Cómo puedo hacer que esto funcione?
sudo
.grep
ywhich grep
me 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
sudo
que 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 explotarsecd
ingresando/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/log
cualquier lugar y enlace simbólicothefilename.log
a cualquier archivo, el usuario puede seleccionarstring I want
desde cualquier archivo.grep
que 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
,tee
o 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
sudo
es genial, pero a veces no es la mejor opción. Para esto me gusta usarsuper
.super
tambié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
sudo
hasCmnd_Alias
(que puede contener uno o más comandos, con o sin restricciones arg).