¿Cómo usar el comando updatedb como usuario ordinario?

10

El locatecomando es una herramienta muy útil en Linux, pero parece que solo root puede ejecutar un updatedbcomando que no es muy común para usarlo. Entonces, ¿cómo hacer que el usuario común tenga el privilegio de ejecutar el comando updatedb?

updatedb es el comando que se usa para actualizar la base de datos que usa el comando de localizar.

Pero existe el siguiente mensaje de error cuando intenta ejecutar updatedb como usuario normal:

[mirror@home code]$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

O:

updatedb -o db
updatedb: can not change group of file `/var/lib/gforge/chroot/home/users/bigmeow/tmp/db.uhEZFQ': Operation not permitted
enormemeow
fuente

Respuestas:

17

Edite el comando para:

updatedb --require-visibility 0 -o ~/.locate.db

de "updatedb (8)":

-l, --require-visibility FLAG

Establezca el indicador ' requerir visibilidad del archivo antes de informarlo ' en la base de datos generada a FLAG.

Si FLAG es 0 o no, o si el "archivo de base de datos es legible por" otros "o no es propiedad de slocate, localizar (1) genera las entradas de la base de datos incluso si el usuario que ejecuta ubicación (1) no pudo haber leído el directorio necesario para encontrar el archivo descrito por la entrada de la base de datos.

Si FLAG es 1 o sí (el valor predeterminado), localizar (1) verifica los permisos de los directorios principales de cada entrada antes de informarlo al usuario que invoca. Para hacer que la existencia del archivo esté realmente oculta para otros usuarios, el grupo de bases de datos está configurado para inclinarse y los permisos de la base de datos prohíben que los usuarios lean la base de datos utilizando otros medios que no sean localizar (1), que es establecer-gid slocate.

Tenga en cuenta que el indicador de visibilidad se verifica solo si la base de datos es propiedad de slocate y "otros" no la pueden leer.

usuario292632
fuente
explicas qué es la --require-visibilitybandera ... pero tal vez podrías explicar un poco sobre por qué. ¿por qué no simplemente hacer lo que @xaizek está haciendo y generar la base de datos en una ubicación que su usuario tenga permiso sin usar la --require-visibilitybandera?
Trevor Boyd Smith
más adelante en la página del manual hay una respuesta a mi pregunta:SECURITY Databases built with --require-visibility no [tbs: or 0] allow users to find names of files and directories of other users, which they would not otherwise be able to do.
Trevor Boyd Smith el
3

Simplemente puede crear una base de datos en casa con el -oargumento de updatedb:

updatedb -o ~/.locate.db

Y úsalo con slocateesto:

slocate --database=~/.locate.db <pattern>

Probablemente desee definir un alias para slocate --database=~/.locate.db.

xaizek
fuente
1
de hecho, incluso con la opción -o, fallé, ¿por qué? updatedb -o dbdb updatedb: no se puede cambiar el grupo de archivos `/home/mirror/tmp/dbdb.zwHn1W ': Operación no permitida
hugemeow
1
@hugemeow no estoy seguro de por qué sucede. Quizás / mirror / tmp se montó con opciones no estándar, que prohíben que updatedb cambie de grupo. Aunque crea un archivo de base de datos con el xaizek:userspropietario: par de grupo para mí, el grupo es el predeterminado. También puede verificar las opciones en el /etc/updatedb.confarchivo.
xaizek
¿Tengo que usar Slocate en lugar de localizar? no se puede encontrar pendiente en centos ...
hugemeow
1
@hugemeow slocatees una versión más segura de la anterior locate. Creo que los centos deberían haberse slocateinstalado con nombre locate. De todos modos, no debería haber diferencias en su caso, y básicamente en la mayoría de los casos posibles (en Slackware locatees solo un enlace simbólico slocate).
xaizek
1
@hugemeow Está escrito que mlocatedebería ser más rápido, pero aún compatible con slocate. No estoy seguro de si es la razón. Si no quiere probar slocatequé sitio no funciona, descargue las fuentes de uno de los espejos de Slackware, que incluyen las fuentes de los paquetes: consulte aquí .
xaizek
1

Aquí están todos los pasos para tener una solución completa (probado en Centos 6.5)

1) generar el db:

updatedb --require-visibility 0 -o ~/.locate.db

2) usa el db:

locate --database=/full/path/to/.locate.db (does not work with ~)
or
locate --database=.locate.db

3) crea un alias:

alias mylocate='locate --database=/full/path/to/.locate.db'

4) use su locale localizar db:

mylocate <my pattern>
Yann Sagon
fuente
usar en $HOMElugar de ~, o simplemente deshacerse de =. los dos siguientes funcionarán: locate --database ~/.locate.dbo locate --database=$HOME/.locate.db. vea este hilo: stackoverflow.com/questions/11587343/…
ardnew