Comment utiliser la commande updatedb en tant qu'utilisateur ordinaire?

10

La locatecommande est un outil très utile sous Linux, mais il semble que seul root puisse exécuter la updatedbcommande, ce qui est très peu pratique pour l'utiliser. Alors, comment faire en sorte que l'utilisateur ordinaire ait le privilège d'exécuter la commande updatedb?

updatedb est la commande utilisée pour mettre à jour la base de données utilisée par la commande Locate.

Mais il y a le message d'erreur suivant lorsque vous essayez d'exécuter updatedb en tant qu'utilisateur ordinaire:

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

Ou:

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

Réponses:

17

Modifiez la commande pour:

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

de "updatedb (8)":

-l, --require-visibility FLAG

Définissez l' indicateur « Exiger la visibilité des fichiers avant de le signaler » dans la base de données générée à FLAG.

Si FLAG vaut 0 ou non, ou si le fichier de base de données est lisible par "autres" ou n'appartient pas à slocate, Locate (1) affiche les entrées de la base de données même si l'utilisateur exécutant Locate (1) n'a pas pu lire le répertoire nécessaire. pour connaître le fichier décrit par l'entrée de la base de données.

Si FLAG vaut 1 ou oui (par défaut), Locate (1) vérifie les autorisations des répertoires parents de chaque entrée avant de le signaler à l'utilisateur appelant. Pour rendre l'existence du fichier vraiment cachée aux autres utilisateurs, le groupe de base de données est défini sur slocate et les autorisations de base de données interdisent la lecture de la base de données par les utilisateurs en utilisant d'autres moyens que Locate (1), qui est set-gid slocate.

Notez que l'indicateur de visibilité n'est vérifié que si la base de données appartient à slocate et qu'elle n'est pas lisible par "autres".

user292632
la source
vous expliquez ce qu'est le --require-visibilitydrapeau ... mais vous pourriez peut-être expliquer un peu pourquoi? comme pourquoi ne pas simplement faire ce que fait @xaizek et générer la base de données dans un emplacement autorisé par votre utilisateur sans utiliser l' --require-visibilityindicateur?
Trevor Boyd Smith
plus loin dans la page de manuel, il y a une réponse à ma question: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
3

Vous pouvez simplement créer une base de données à domicile avec l' -oargument de updatedb:

updatedb -o ~/.locate.db

Et utilisez-le slocatecomme ceci:

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

Vous souhaitez probablement définir un alias pour slocate --database=~/.locate.db.

xaizek
la source
1
en fait, même avec l'option -o, j'ai échoué, pourquoi? updatedb -o dbdb updatedb: impossible de modifier le groupe de fichiers `/home/mirror/tmp/dbdb.zwHn1W ': opération non autorisée
hugemeow
1
@hugemeow ne sais pas pourquoi cela se produit. Peut-être que / mirror / tmp a été monté avec des options non standard, ce qui interdit à updatedb de changer de groupe. Bien qu'il crée un fichier de base de données avec la xaizek:userspaire propriétaire: groupe pour moi, le groupe est donc celui par défaut. Vous pouvez également vérifier les options dans le /etc/updatedb.conffichier.
xaizek
dois-je utiliser slocate plutôt que de localiser? ne peut pas trouver slocate sur centos ...
hugemeow
1
@hugemeow slocateest une version plus sécurisée de l'ancien locate. Je pense que les centos auraient dû être slocateinstallés avec leur nom locate. Quoi qu'il en soit, il ne devrait pas y avoir de différences dans votre cas, et fondamentalement dans la plupart des cas possibles (sur Slackware locateest juste un lien symbolique vers slocate).
xaizek
1
@hugemeow Il est écrit que cela mlocatedevrait être plus rapide, mais toujours compatible avec slocate. Je ne sais pas si c'est la raison. Si vous ne voulez pas essayer slocate, quel site ne fonctionne pas, téléchargez les sources à partir de l'un des miroirs Slackware, elles incluent les sources des packages: voir ici .
xaizek
1

Voici toutes les étapes pour avoir une solution complète (testée dans Centos 6.5)

1) générer le db:

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

2) utilisez le db:

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

3) créez un alias:

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

4) Utilisez votre locale localiser db:

mylocate <my pattern>
Yann Sagon
la source
utiliser $HOMEau lieu de ~, ou tout simplement se débarrasser de la =. les deux éléments suivants fonctionneront: locate --database ~/.locate.dbou locate --database=$HOME/.locate.db. voir ce fil: stackoverflow.com/questions/11587343/…
ardnew