Come usare il comando updatedb come utente normale?


10

Il locatecomando è uno strumento molto utile su Linux, ma sembra che solo root possa eseguire un updatedbcomando che è molto poco convincente per usarlo. Quindi, come rendere l'utente ordinario ad avere il privilegio di eseguire il comando updateb?

updatedb è il comando usa per aggiornare il db usato dal comando Locate.

Ma c'è il seguente messaggio di errore quando si tenta di eseguire updateb come utente normale:

[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

Risposte:


17

Modifica il comando in:

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

da "aggiornatob (8)":

-l, --require-visibility FLAG

Impostare il flag " richiedi visibilità file prima di segnalarlo " nel database generato su FLAG.

Se FLAG è 0 o no, o se il file del database è leggibile da "altri" o non è di proprietà di slocate, individuare (1) genera le voci del database anche se l'utente che esegue Locate (1) non ha potuto leggere la directory necessaria per scoprire il file descritto dalla voce del database.

Se FLAG è 1 o sì (impostazione predefinita), individuare (1) controlla le autorizzazioni delle directory principali di ciascuna voce prima di segnalarla all'utente che ha richiamato. Per rendere l'esistenza del file veramente nascosta agli altri utenti, il gruppo di database è impostato su slocate e le autorizzazioni del database vietano la lettura del database da parte degli utenti utilizzando mezzi diversi da Locate (1), che è set-gid slocate.

Si noti che il flag di visibilità viene controllato solo se il database è di proprietà di slocate e non è leggibile da "altri".


spieghi cos'è la --require-visibilitybandiera ... ma forse potresti spiegare un po 'il perché? come perché non fare semplicemente quello che fa @xaizek e generare il database in una posizione in cui l'utente ha l'autorizzazione senza usare il --require-visibilityflag?
Trevor Boyd Smith,

più avanti nella pagina man c'è una risposta alla mia domanda: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

Puoi semplicemente creare un database a casa con l' -oargomento di updatedb:

updatedb -o ~/.locate.db

E usalo in slocatequesto modo:

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

Probabilmente vuoi definire un alias per slocate --database=~/.locate.db.


1
infatti anche con l'opzione -o, ho fallito, perché? updatedb -o dbdb updatedb: impossibile cambiare il gruppo di file `/home/mirror/tmp/dbdb.zwHn1W ': Operazione non consentita
hugemeow,

1
@hugemeow non sono sicuro del perché accada. Forse / mirror / tmp è stato montato con opzioni non standard, che proibiscono a updateb di cambiare gruppo. Sebbene crei un file di database con il xaizek:usersproprietario: la coppia di gruppi per me, quindi il gruppo è quello predefinito. Puoi anche controllare le opzioni nel /etc/updatedb.conffile.
xaizek,

devo usare slocate piuttosto che individuare? non riesco a trovare slocate su centos ...
hugemeow,

1
@hugemeow slocateè una versione più sicura della vecchia locate. Penso che centos avrebbe dovuto essere slocateinstallato con il nome locate. Ad ogni modo, non dovrebbero esserci differenze nel tuo caso, e sostanzialmente nella maggior parte dei casi possibili (su Slackware locateè solo un collegamento simbolico a slocate).
xaizek,

1
@hugemeow È scritto che mlocatedovrebbe essere più veloce, ma comunque compatibile slocate. Non sono sicuro che sia il motivo. Se non vuoi provare slocate, quale sito non funziona, scarica le fonti da uno dei mirror di Slackware, includono le fonti dei pacchetti: vedi qui .
Xaizek,

1

Ecco tutti i passaggi per avere una soluzione completa (testato in Centos 6.5)

1) genera il db:

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

2) usa il db:

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

3) creare un alias:

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

4) usa il tuo local local db:

mylocate <my pattern>

usare $HOMEinvece di ~, o semplicemente sbarazzarsi di =. funzioneranno entrambi: locate --database ~/.locate.dbo locate --database=$HOME/.locate.db. vedi questa discussione: stackoverflow.com/questions/11587343/...
ardnew
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.