Як використовувати команду updatedb як звичайний користувач?


10

locateКоманда дуже корисний інструмент на Linux, але це тільки здається , корінь може виконати updatedbкоманду , яка дуже unconvinent , щоб використовувати його. Тож як зробити так, щоб звичайний користувач мав привілей для запуску оновленої команди?

updatedb це використання команди для оновлення db, використовуваного командою locate.

Але при спробі запуску оновлення як звичайного користувача є таке повідомлення про помилку:

[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 або ні, або якщо файл бази даних читається "іншими" або він не належить slocate, locate (1) видає записи бази даних, навіть якщо користувач, що працює locate (1), не зміг прочитати потрібний каталог щоб дізнатися файл, описаний записом бази даних.

Якщо FLAG дорівнює 1 або так (за замовчуванням), locate (1) перевіряє дозволи батьківських каталогів кожного запису, перш ніж повідомляти про це користувачеві, що викликає. Щоб зробити існування файлу по-справжньому прихованим від інших користувачів, група баз даних встановлюється для розміщення, а права доступу до бази даних забороняють читати базу даних користувачами, використовуючи інші засоби, ніж locate (1), який є встановленим gid slocate.

Зауважте, що прапор видимості перевіряється лише в тому випадку, якщо база даних належить slocate і її не читають "інші".


Ви поясніть, що таке --require-visibilityпрапор ... але, можливо, ви могли б трохи пояснити, чому? наприклад, чому б просто не робити те, що робить @xaizek, і генерувати базу даних у тому місці, де користувач має дозвіл, не використовуючи --require-visibilityпрапор?
Тревор Бойд Сміт

пізніше на сторінці чоловіка є відповідь на моє запитання: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 не впевнений, чому це відбувається. Можливо / зеркало / tmp було встановлено з нестандартними параметрами, які забороняють оновленняb змінювати групу. Хоча він створює файл баз даних з xaizek:usersвласником: група груп для мене, тому група є типовою. Ви також можете перевірити параметри у /etc/updatedb.confфайлі.
xaizek

чи потрібно використовувати slocate, а не знайти? не вдається знайти місця на центсі ...
hugemeow

1
@hugemeow slocate- це більш безпечна версія старої locate. Я думаю, що центоси повинні були slocateвстановити ім’я locate. У будь-якому випадку, у вашому випадку не повинно бути різниць, і в основному в більшості можливих випадків (Slackware locate- це лише символічне посилання на slocate).
xaizek

1
@hugemeow Це написано, що mlocateмає бути швидшим, але все ще сумісним slocate. Я не впевнений, чи це причина. Якщо ви не хочете спробувати slocate, який сайт не працює, завантажте джерела з одного з дзеркал Slackware, вони включають джерела пакунків: дивіться тут .
xaizek

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 db:

mylocate <my pattern>

використовувати $HOMEзамість цього ~або просто позбутися =. обидва з наступних буде працювати: locate --database ~/.locate.dbабо locate --database=$HOME/.locate.db. см цю тему: stackoverflow.com/questions/11587343 / ...
ardnew
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.