Wie verwende ich den Befehl updatedb als normalen Benutzer?

9

Der locateBefehl ist ein sehr nützliches Tool unter Linux, aber es scheint, dass nur root einen updatedbBefehl ausführen kann, dessen Verwendung sehr wenig überzeugend ist. Wie kann man also einen normalen Benutzer dazu bringen, das Privileg zu haben, den Befehl updateedb auszuführen?

updatedb ist der Befehl zum Aktualisieren der vom Befehl "findenden Datenbank" verwendeten Datenbank.

Beim Versuch, updateb als normaler Benutzer auszuführen, wird jedoch die folgende Fehlermeldung angezeigt:

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

Oder:

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

Antworten:

15

Bearbeiten Sie den Befehl wie folgt:

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

aus "aktualisiertb (8)":

-l, --require-visibility FLAG

Setzen Sie das Flag " Dateisichtbarkeit erforderlich, bevor Sie es melden " in der generierten Datenbank an FLAG.

Wenn FLAG 0 oder nein ist oder wenn die Datenbankdatei von "anderen" gelesen werden kann oder nicht im Besitz von slocate ist, gibt locate (1) die Datenbankeinträge aus, auch wenn der Benutzer, der locate (1) ausführt, das erforderliche Verzeichnis nicht gelesen haben konnte um die durch den Datenbankeintrag beschriebene Datei herauszufinden.

Wenn FLAG 1 oder yes ist (Standardeinstellung), überprüft location (1) die Berechtigungen der übergeordneten Verzeichnisse jedes Eintrags, bevor es dem aufrufenden Benutzer gemeldet wird. Um die Existenz der Datei wirklich vor anderen Benutzern zu verbergen, wird die Datenbankgruppe auf Slocate gesetzt, und die Datenbankberechtigungen verbieten das Lesen der Datenbank durch Benutzer auf andere Weise als auf find (1), was set-gid slocate ist.

Beachten Sie, dass das Sichtbarkeitsflag nur aktiviert ist, wenn die Datenbank Eigentum von slocate ist und von "anderen" nicht gelesen werden kann.

user292632
quelle
Sie erklären, was die --require-visibilityFlagge ist ... aber vielleicht könnten Sie ein wenig erklären, warum? Warum nicht einfach das tun, was @xaizek tut, und die Datenbank an einem Ort generieren, an dem Ihr Benutzer die Berechtigung hat, ohne das --require-visibilityFlag zu verwenden?
Trevor Boyd Smith
später auf der Manpage gibt es eine Antwort auf meine Frage: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

Sie können einfach eine Datenbank zu Hause mit dem -oArgument erstellen updatedb:

updatedb -o ~/.locate.db

Und benutze es slocateso:

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

Sie möchten wahrscheinlich einen Alias ​​für definieren slocate --database=~/.locate.db.

xaizek
quelle
1
sogar mit der Option -o habe ich versagt, warum? aktualisiertb -o dbdb aktualisiertb: Gruppe der Datei `/home/mirror/tmp/dbdb.zwHn1W 'kann nicht geändert werden: Operation nicht erlaubt
hugemeow
1
@hugemeow nicht sicher, warum es passiert. Möglicherweise wurde / mirror / tmp mit nicht standardmäßigen Optionen bereitgestellt, die es updateb verbieten, die Gruppe zu ändern. Obwohl xaizek:usersfür mich eine Datenbankdatei mit dem Eigentümer-Gruppen-Paar erstellt wird, ist die Gruppe die Standarddatei. Sie können auch Optionen in der /etc/updatedb.confDatei überprüfen .
Xaizek
Muss ich slocate verwenden, anstatt zu lokalisieren? kann Slocate auf Centos nicht finden ...
Hugemeow
1
@hugemeow slocateist eine sicherere Version von alt locate. Ich denke, Centos hätte slocatemit Namen installiert werden sollen locate. Auf jeden Fall sollte es in Ihrem Fall keine Unterschiede geben, und zwar in den meisten Fällen (auf Slackware locateist dies nur ein symbolischer Link zu slocate).
Xaizek
1
@hugemeow Es steht geschrieben, dass mlocatees schneller sein sollte, aber trotzdem kompatibel mit slocate. Ich bin mir nicht sicher, ob es der Grund ist. Wenn Sie nicht versuchen möchten slocate, welche Site nicht funktioniert, laden Sie Quellen von einem der Slackware-Spiegel herunter. Diese enthalten Quellen der Pakete: siehe hier .
Xaizek
1

Hier sind alle Schritte, um eine vollständige Lösung zu erhalten (getestet in Centos 6.5).

1) generiere die db:

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

2) benutze die db:

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

3) Erstellen Sie einen Alias:

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

4) Verwenden Sie Ihr Gebietsschema. Suchen Sie db:

mylocate <my pattern>
Yann Sagon
quelle
Verwenden Sie $HOMEanstelle von ~oder entfernen Sie einfach die =. Beide der folgenden Funktionen funktionieren: locate --database ~/.locate.dboder locate --database=$HOME/.locate.db. siehe diesen Thread: stackoverflow.com/questions/11587343/…
ardnew