一般ユーザーとしてupdatedbコマンドを使用するにはどうすればよいですか?


10

locateコマンドは、Linux上で非常に便利なツールですが、rootだけが実行できるようでupdatedb、それを使用することは非常にunconvinentあるコマンドを。では、通常のユーザーにupdatedbコマンドを実行する特権を与えるにはどうすればよいですか?

updatedb Locateコマンドで使用されるデータベースを更新するために使用するコマンドです。

しかし、updatedbを一般ユーザーとして実行しようとすると、次のエラーメッセージが表示されます。

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

または:

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

回答:


17

コマンドを次のように編集します。

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

「updatedb(8)」から:

-l, --require-visibility FLAG

「設定し、それを報告する前に、ファイルの可視性を必要と FLAGに生成されたデータベースのフラグを」。

FLAGが0またはnoの場合、またはデータベースファイルが「others」によって読み取り可能であるか、slocateが所有していない場合、locate(1)を実行しているユーザーが必要なディレクトリを読み取れなかった場合でも、locate(1)はデータベースエントリを出力します。データベースエントリによって記述されたファイルを見つけるため。

FLAGが1またはyes(デフォルト)の場合、locate(1)は、呼び出し元のユーザーに報告する前に、各エントリの親ディレクトリの権限をチェックします。ファイルの存在を他のユーザーから完全に隠すために、データベースグループはslocateに設定されており、データベースのアクセス許可は、locate(1)(set-gid slocate)以外の方法を使用するユーザーによるデータベースの読み取りを禁止しています。

可視性フラグがチェックされるのは、データベースがslocateによって所有されており、「その他」がそれを読み取れない場合のみです。


あなたは--require-visibility旗が何であるかを説明します...しかし多分あなたは理由について少し説明できますか?@xaizekが行っていることを実行して、--require-visibilityフラグを使用せずにユーザーが権限を持つ場所にデータベースを生成しないのはなぜですか?
Trevor Boyd Smith、

後のmanページ内の私の質問への答えがあります: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.
トレバー・ボイド・スミス

3

あなたは-o引数を指定して家にデータベースを作成することができますupdatedb

updatedb -o ~/.locate.db

次のslocateように使用します。

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

のエイリアスを定義する必要がありますslocate --database=~/.locate.db


1
実際に-oオプションを使用しても失敗しました。なぜですか?updatedb -o dbdb updatedb:ファイルのグループを変更できません `/home/mirror/tmp/dbdb.zwHn1W ':操作は許可されていません
hugemeow

1
@hugemeowなぜそれが起こるのかわからない。たぶん/ mirror / tmpが非標準オプションでマウントされていて、updatedbがグループを変更することを禁止しているかもしれません。それxaizek:usersは私のために所有者:グループのペアでddデータベースファイルを作成しますが、グループはデフォルトです /etc/updatedb.confファイル内のオプションを確認することもできます。
xaizek '19

見つけるのではなくslocateを使用する必要がありますか?centosでslocateを見つけることができません...
hugemeow

1
@hugemeow slocateはold のより安全なバージョンですlocate。centosはslocatenameでインストールされているはずlocateです。とにかく、あなたの場合、そして基本的にはほとんどの場合に違いはないはずです(Slackware locateはへのシンボリックリンクですslocate)。
xaizek 2012年

1
@hugemeow mlocate高速である必要がありますが、それでも互換性がありslocateます。それが理由かどうかはわかりません。試したくない場合はslocate、どのサイトが機能していないか、Slackwareミラーの1つからソースをダウンロードしてください。パッケージのソースが含まれています。こちらを参照してください
xaizek 2012年

1

完全なソリューションを作成するためのすべての手順を次に示します(Centos 6.5でテスト済み)

1)dbを生成します。

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

2)dbを使用します。

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

3)エイリアスを作成します。

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

4)ロケール検索dbを使用します。

mylocate <my pattern>

$HOME代わりに使用する~か、単にを取り除き=ます。次の両方が機能します:locate --database ~/.locate.dbまたはlocate --database=$HOME/.locate.db。このスレッドを参照してください。stackoverflow.com/questions/11587343/...
ardnew
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.