Wie verwende ich den updateb-Befehl als normaler Benutzer?

19178
hugemeow

Der locateBefehl ist ein sehr nützliches Werkzeug unter Linux, aber es scheint, dass nur root einen updatedbBefehl ausführen kann, der für die Verwendung des Befehls nicht sehr überzeugend ist. Wie kann man also den normalen Benutzer dazu bringen, den Befehl zur Aktualisierung von updateb auszuführen?

updatedb ist der Befehl zum Aktualisieren der vom Befehl locate verwendeten Datenbank.

Wenn Sie versuchen, 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 
8

3 Antworten auf die Frage

14
user292632

Bearbeiten Sie den Befehl in:

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

aus "updatedb (8)":

-l, --require-visibility FLAG 

Setzen Sie das Kennzeichen " Dateisichtbarkeit vor dem 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, selbst wenn der Benutzer, der locate (1) ausführt, das erforderliche Verzeichnis nicht gelesen hat um die durch den Datenbankeintrag beschriebene Datei herauszufinden.

Wenn FLAG 1 oder Ja ist (Standardeinstellung), prüft locate (1) die Berechtigungen der übergeordneten Verzeichnisse jedes Eintrags, bevor es dem aufrufenden Benutzer gemeldet wird. Damit die Existenz der Datei für andere Benutzer wirklich verborgen bleibt, ist die Datenbankgruppe auf slocate eingestellt, und die Datenbankberechtigungen verbieten das Lesen der Datenbank durch Benutzer mit anderen Mitteln als locate (1), dem set-gid slocate.

Beachten Sie, dass das Sichtbarkeitsflag nur geprüft wird, wenn die Datenbank Slocate gehört und von "Anderen" nicht gelesen werden kann.

Sie erklären, was die "--require-visible" -Flagge ist ... aber könnten Sie vielleicht ein bisschen erklären, warum? Warum machen Sie nicht einfach das, was @xaizek tut, und generieren Sie die Datenbank an einem Ort, an dem Ihr Benutzer die Berechtigung hat, ohne das Flag "--require-visible" zu verwenden. Trevor Boyd Smith vor 5 Jahren 0
Später in der Manpage gibt es eine Antwort auf meine Frage: `SECURITY Datenbanken, die mit --require-visible no [tbs: oder 0] erstellt wurden, ermöglichen Benutzern das Auffinden von Namen von Dateien und Verzeichnissen anderer Benutzer, die sie sonst nicht wären können. " Trevor Boyd Smith vor 5 Jahren 0
3
xaizek

Sie können einfach eine Datenbank mit folgendem -oArgument erstellen updatedb:

updatedb -o ~/.locate.db 

Und benutze es mit slocateso:

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

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

in der Tat auch mit -o Option, ich habe versagt, warum? aktualisiertb -o dbdb aktualisiertb: Gruppe der Datei `/home/mirror/tmp/dbdb.zwHn1W 'kann nicht geändert werden: Vorgang nicht zulässig hugemeow vor 11 Jahren 1
@hugemeow nicht sicher, warum es passiert. Möglicherweise wurde / mirror / tmp mit nicht standardmäßigen Optionen gemountet, was es verbietet, dass updateb die Gruppe ändert. Obwohl es eine Datenbankdatei mit `xaizek: users` owner: group pair für mich erstellt, ist group die Standardeinstellung. Sie können auch die Optionen in der Datei / etc / updatedb.conf überprüfen. xaizek vor 11 Jahren 1
Muss ich slocate verwenden, anstatt zu lokalisieren? kann Slocate nicht auf Centos finden ... hugemeow vor 11 Jahren 0
@hugemeow `slocate` ist eine sicherere Version des alten` locate`. Ich denke, Centos sollte "slocate" mit dem Namen "locate" installiert haben. Auf jeden Fall sollte es in Ihrem Fall keine Unterschiede geben, und im Wesentlichen in den meisten möglichen Fällen (bei Slackware ist "locate" nur ein symbolischer Link zu "slocate"). xaizek vor 11 Jahren 1
jemand hat mir gesagt, dass mlocate besser ist als slocate :( übrigens, warum finde ich keinen Quellcode von slocate, ich möchte es vom Quellcode aus erstellen ... hugemeow vor 11 Jahren 0
@ hugemeow Es wird geschrieben, dass 'mlocate' schneller sein sollte, aber dennoch mit 'slocate' kompatibel ist. Ich bin mir nicht sicher, ob es der Grund ist. Wenn Sie `slocate` nicht ausprobieren möchten, welche Site nicht funktioniert, laden Sie Quellen von einem Slackware-Spiegel herunter. Dazu gehören die Quellen der Pakete: [siehe hier] (http://mirror.aarnet.edu.au/ pub / slackware / slackware-current / source / a / slocate /). xaizek vor 11 Jahren 1
Warum funktioniert der Befehl `updatedb -o db` nicht? hugemeow vor 11 Jahren 0
scheinen edit1, warum `updatedb -o db` nach etwa zwei Minuten Laufzeit fehlgeschlagen ist? hugemeow vor 11 Jahren 0
@ hugemeow Vielleicht ist es einfacher, den Systemadministrator zu bitten, Sie zur Gruppe `slocate` (oder` mlocate`) hinzuzufügen. Auch wenn die Gruppe nicht geändert werden kann, ist die Datei vorhanden, daher sollten Sie sie verwenden können (`updateb` wurde wahrscheinlich nicht entfernt, oder?). xaizek vor 11 Jahren 0
0
Yann Sagon

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

1) generiere die Datenbank:

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) Erstelle einen Alias:

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

4) benutze dein locale locate db:

mylocate <my pattern> 
Verwenden Sie "$ HOME" anstelle von "~" oder entfernen Sie einfach das "=". Beide der folgenden Funktionen funktionieren: `locate --database ~ / .locate.db` oder` locate --database = $ HOME / .locate.db`. Siehe diesen Thread: https://stackoverflow.com/questions/11587343/difference-between-home-and-tilde ardnew vor 6 Jahren 0