Bagaimana cara menggunakan perintah updatedb sebagai pengguna biasa?

10

The locateperintah alat yang sangat berguna di Linux, tetapi tampaknya hanya root dapat menjalankan updatedbperintah yang sangat unconvinent untuk menggunakannya. Jadi bagaimana membuat pengguna biasa memiliki hak istimewa untuk menjalankan perintah updatedb?

updatedb adalah perintah yang digunakan untuk memperbarui db yang digunakan oleh perintah loc.

Tetapi ada pesan kesalahan berikut ketika mencoba menjalankan updatedb sebagai pengguna biasa:

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

Atau:

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

Jawaban:

17

Edit perintah ke:

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

dari "updatedb (8)":

-l, --require-visibility FLAG

Setel tanda ' memerlukan visibilitas file sebelum melaporkannya ' dalam basis data yang dihasilkan menjadi FLAG.

Jika FLAG adalah 0 atau tidak, atau jika file database dapat dibaca oleh "orang lain" atau itu tidak dimiliki oleh slocate, cari (1) output entri database bahkan jika pengguna yang menjalankan cari (1) tidak dapat membaca direktori yang diperlukan untuk mengetahui file yang dijelaskan oleh entri database.

Jika FLAG adalah 1 atau ya (default), cari (1) periksa izin direktori induk dari setiap entri sebelum melaporkannya ke pengguna yang memohon. Untuk membuat keberadaan file benar-benar disembunyikan dari pengguna lain, grup basis data diatur ke slocate dan izin basis data melarang membaca basis data oleh pengguna dengan menggunakan cara lain selain loc (1), yang merupakan set-gid slocate.

Perhatikan bahwa bendera visibilitas diperiksa hanya jika database dimiliki oleh slocate dan tidak dapat dibaca oleh "orang lain".

pengguna292632
sumber
Anda menjelaskan apa --require-visibilitybendera itu ... tapi mungkin Anda bisa menjelaskan sedikit tentang mengapa? seperti mengapa tidak lakukan saja apa yang dilakukan @xaizek dan hasilkan basis data di lokasi yang diizinkan pengguna Anda tanpa menggunakan --require-visibilitybendera?
Trevor Boyd Smith
kemudian di halaman manual ada jawaban untuk pertanyaan saya: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

Anda bisa membuat database di rumah dengan -oargumen updatedb:

updatedb -o ~/.locate.db

Dan gunakan dengan slocateseperti ini:

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

Anda mungkin ingin mendefinisikan alias untuk slocate --database=~/.locate.db.

xaizek
sumber
1
sebenarnya bahkan dengan opsi -o, saya gagal, mengapa? updatedb -o dbdb updatedb: tidak dapat mengubah grup file `/home/mirror/tmp/dbdb.zwHn1W ': Operasi tidak diizinkan
hugemeow
1
@hugemeow tidak yakin mengapa itu terjadi. Mungkin / mirror / tmp dipasang dengan opsi non-standar, yang melarang updatedb untuk mengubah grup. Meskipun itu menciptakan file database dengan xaizek:userspemilik: pasangan grup untuk saya, jadi grup adalah yang default. Anda juga dapat memeriksa opsi dalam /etc/updatedb.conffile.
xaizek
apakah saya harus menggunakan slocate daripada mencari? tidak dapat menemukan slocate pada centos ...
hugemeow
1
@hugemeow slocateadalah versi lama yang lebih aman locate. Saya pikir centos harus slocatediinstal dengan nama locate. Bagaimanapun, seharusnya tidak ada perbedaan dalam kasus Anda, dan pada dasarnya dalam banyak kasus yang mungkin (pada Slackware locatehanyalah tautan simbolis ke slocate).
xaizek
1
@hugemeow Ada tertulis yang mlocateseharusnya lebih cepat, tetapi masih kompatibel dengan slocate. Saya tidak yakin apakah itu alasannya. Jika Anda tidak ingin mencoba slocate, situs mana yang tidak berfungsi, unduh sumber dari salah satu mirror Slackware, mereka termasuk sumber paket: lihat di sini .
xaizek
1

Berikut ini semua langkah untuk mendapatkan solusi lengkap (diuji dalam Centos 6.5)

1) menghasilkan db:

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

2) gunakan db:

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

3) buat alias:

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

4) gunakan locale locas db Anda:

mylocate <my pattern>
Yann Sagon
sumber
gunakan $HOMEalih-alih ~, atau cukup singkirkan =. kedua hal berikut ini akan berfungsi: locate --database ~/.locate.dbatau locate --database=$HOME/.locate.db. lihat utas ini: stackoverflow.com/questions/11587343/…
ardnew