Updatedb command normal kullanıcı olarak nasıl kullanılır?


10

locateKomut Linux üzerinde çok yararlı bir araçtır, ancak çalıştırabilmesi kök görünüyor updatedbkullanmak çok unconvinent olan komutu. Peki sıradan bir kullanıcının updatedb komutunu çalıştırma ayrıcalığına nasıl sahip olunur?

updatedb locate komutu tarafından kullanılan db'yi güncellemek için kullanılan komuttur.

Ama updatedb normal kullanıcı olarak çalıştırmayı denediğinizde aşağıdaki hata mesajı var:

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

Veya:

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

Yanıtlar:


17

Komutu şu şekilde düzenleyin:

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

"updatedb (8)" adresinden:

-l, --require-visibility FLAG

'Set Bildirmeden önce dosyayı gerektiren görünürlük FLAG için oluşturulan veritabanında bayrağı'.

FLAG 0 veya hayır ise veya veritabanı dosyası "diğerleri" tarafından okunabiliyorsa veya slocate'e ait değilse, locate (1), locate (1) çalıştıran kullanıcı gerekli dizini okuyamasa bile veritabanı girdilerini çıkarır veritabanı girişi tarafından açıklanan dosyayı bulmak için.

FLAG 1 veya yes (varsayılan) ise, locate (1), her bir girdinin üst dizinlerinin izin veren kullanıcıya bildirmeden önce izinlerini kontrol eder. Dosya varlığını diğer kullanıcılardan gerçekten gizlemek için, veritabanı grubu slocate olarak ayarlanmıştır ve veritabanı izinleri, set-gid slocate olan locate (1) dışında bir yöntemle kullanıcılar tarafından veritabanının okunmasını yasaklar.

Görünürlük bayrağının yalnızca veritabanı slocate'e sahipse ve "diğerleri" tarafından okunamıyorsa kontrol edildiğini unutmayın.


--require-visibilitybayrağın ne olduğunu açıklıyorsun ... ama belki biraz neden açıklayabilirsin? neden @xaizek'in yaptığı şeyi yapmıyor ve veritabanını kullanmadan kullanıcı izni olan bir yerde veri tabanı oluşturmuyor --require-visibility?
Trevor Boyd Smith

daha sonra adam sayfasında soruma bir cevap var: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

Sadece şu -oargümanla evde veritabanı oluşturabilirsiniz updatedb:

updatedb -o ~/.locate.db

Ve şu şekilde kullanın slocate:

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

Muhtemelen için bir takma ad tanımlamak istersiniz slocate --database=~/.locate.db.


1
aslında -o seçeneği ile bile başarısız oldum, neden? updatedb -o dbdb updatedb: `
/home/mirror/tmp/dbdb.zwHn1W

1
@hugemeow neden olduğundan emin değilim. Belki / mirror / tmp, updateb grubunu değiştirmeyi yasaklayan standart olmayan seçeneklerle monte edilmiştir. xaizek:usersBenim için owner: grup çifti ile veritabanı dosyası oluştursa da , grup varsayılan dosyadır . /etc/updatedb.confDosyadaki seçenekleri de kontrol edebilirsiniz .
xaizek

bulmak yerine slocate kullanmak zorunda mıyım? centos üzerinde slocate bulunamıyor ...
hugemeow

1
@hugemeow slocate, eski sürümlerin daha güvenli bir sürümüdür locate. Ben centos olması gerektiğini düşünüyorum slocateadıyla yüklenmiş locate. Her neyse, davanızda hiçbir farklılık olmamalı ve temelde çoğu durumda (Slackware'de locatesadece sembolik bir bağlantıdır slocate).
xaizek

1
@hugemeow Daha mlocatehızlı, ancak yine de uyumlu olması gereken bir yazı slocate. Nedeni olup olmadığından emin değilim. Denemek istemiyorsanız slocate, hangi site çalışmıyorsa, Slackware aynalarından birinden kaynak indirin, paketlerin kaynaklarını içerir: buraya bakın .
xaizek

1

Tam bir çözüme sahip olmak için tüm adımlar (Centos 6.5'te test edilmiştir)

1) db'yi oluşturun:

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

2) db'yi kullanın:

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

3) bir takma ad oluşturun:

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

4) yerel ayarınızı kullanın db:

mylocate <my pattern>

$HOMEyerine kullanın ~, ya da sadece kurtulmak =. aşağıdakilerin her ikisi de çalışır: locate --database ~/.locate.dbveya locate --database=$HOME/.locate.db. bu konuya bakın: stackoverflow.com/questions/11587343/…
ardnew
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.