Làm thế nào để sử dụng lệnh updateb như một người dùng bình thường?


10

Các locatelệnh là công cụ rất hữu ích trên Linux, nhưng có vẻ như chỉ có root có thể chạy updatedblệnh mà là rất unconvinent để sử dụng nó. Vậy làm thế nào để làm cho người dùng bình thường có đặc quyền để chạy lệnh updateb?

updatedb là lệnh sử dụng để cập nhật db được sử dụng bởi lệnh định vị.

Nhưng có thông báo lỗi sau khi thử chạy updateb như người dùng thông thường:

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

Hoặc là:

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

Câu trả lời:


17

Chỉnh sửa lệnh thành:

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

từ "updateb (8)":

-l, --require-visibility FLAG

Đặt cờ ' yêu cầu hiển thị tệp trước khi báo cáo cờ' trong cơ sở dữ liệu được tạo thành FLAG.

Nếu FLAG bằng 0 hoặc không hoặc nếu tệp cơ sở dữ liệu có thể đọc được bởi "người khác" hoặc nó không thuộc sở hữu của slocate, định vị (1) xuất ra các mục cơ sở dữ liệu ngay cả khi người dùng đang chạy định vị (1) không thể đọc thư mục cần thiết để tìm ra các tập tin được mô tả bởi các mục cơ sở dữ liệu.

Nếu FLAG là 1 hoặc có (mặc định), xác định vị trí (1) kiểm tra các quyền của thư mục mẹ của mỗi mục trước khi báo cáo cho người dùng gọi. Để làm cho sự tồn tại của tệp thực sự bị ẩn khỏi những người dùng khác, nhóm cơ sở dữ liệu được đặt thành slocate và các quyền cơ sở dữ liệu cấm người dùng đọc cơ sở dữ liệu bằng các phương tiện khác ngoài định vị (1), đó là slocate set-gid.

Lưu ý rằng cờ hiển thị chỉ được kiểm tra nếu cơ sở dữ liệu được sở hữu bởi slocate và nó không thể đọc được bởi "người khác".


bạn giải thích --require-visibilitylá cờ là gì ... nhưng có lẽ bạn có thể giải thích một chút về lý do tại sao? như tại sao không làm những gì @xaizek đang làm và tạo cơ sở dữ liệu ở một vị trí mà người dùng của bạn có quyền mà không cần sử dụng --require-visibilitycờ?
Trevor Boyd Smith

sau đó trong trang người đàn ông có câu trả lời cho câu hỏi của tôi: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

Bạn chỉ có thể tạo cơ sở dữ liệu tại nhà với -ođối số updatedb:

updatedb -o ~/.locate.db

Và sử dụng nó slocatenhư thế này:

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

Bạn có thể muốn xác định một bí danh cho slocate --database=~/.locate.db.


1
Trong thực tế ngay cả với tùy chọn -o, tôi đã thất bại, tại sao? updateb -o dbdb updateb: không thể thay đổi nhóm tệp `/home/mirror/tmp/dbdb.zwHn1W ':
Thao tác

1
@hugemeow không chắc tại sao nó lại xảy ra. Có thể / mirror / tmp được gắn với các tùy chọn không chuẩn, điều này cấm cập nhậtb để thay đổi nhóm. Mặc dù nó tạo tệp cơ sở dữ liệu với xaizek:userschủ sở hữu: cặp nhóm cho tôi, vì vậy nhóm là mặc định. Bạn cũng có thể kiểm tra các tùy chọn trong /etc/updatedb.conftập tin.
xaizek

Tôi có phải sử dụng slocate chứ không phải xác định vị trí? không thể tìm thấy slocate trên centos ...
hugemeow

1
@hugemeow slocatelà phiên bản cũ an toàn hơn locate. Tôi nghĩ rằng centos nên đã slocateđược cài đặt với tên locate. Dù sao, không nên có sự khác biệt trong trường hợp của bạn và về cơ bản trong hầu hết các trường hợp có thể xảy ra (trên Slackware locatechỉ là một liên kết tượng trưng đến slocate).
xaizek

1
@hugemeow Nó được viết mlocatenên nhanh hơn, nhưng vẫn tương thích slocate. Tôi không chắc đó có phải là lý do không. Nếu bạn không muốn thử slocate, trang web nào không hoạt động, hãy tải xuống các nguồn từ một trong các máy nhân bản Slackware, chúng bao gồm các nguồn của các gói: xem tại đây .
xaizek

1

Dưới đây là tất cả các bước để có một giải pháp hoàn chỉnh (được thử nghiệm trong Centos 6.5)

1) tạo db:

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

2) sử dụng db:

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

3) tạo bí danh:

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

4) sử dụng ngôn ngữ xác định vị trí của bạn db:

mylocate <my pattern>

sử dụng $HOMEthay vì ~, hoặc chỉ cần thoát khỏi =. cả hai điều sau đây sẽ hoạt động: locate --database ~/.locate.dbhoặc locate --database=$HOME/.locate.db. xem chủ đề này: stackoverflow.com/questions/11587343/ Cách
ardew 18/07/17
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.