จะใช้คำสั่ง updatedb ในฐานะผู้ใช้ธรรมดาได้อย่างไร?


10

locateคำสั่งเป็นเครื่องมือที่มีประโยชน์มากในลินุกซ์ แต่ดูเหมือนว่ารากเท่านั้นที่สามารถเรียกใช้updatedbคำสั่งซึ่งเป็น unconvinent มากที่จะใช้มัน ดังนั้นวิธีการทำให้ผู้ใช้สามัญมีสิทธิ์ในการเรียกใช้คำสั่ง updateb?

updatedb คือคำสั่งที่ใช้เพื่ออัพเดต db ที่ใช้โดยคำสั่งค้นหา

แต่มีข้อความแสดงข้อผิดพลาดต่อไปนี้เมื่อพยายามเรียกใช้ updateb ในฐานะผู้ใช้ธรรมดา:

[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 หรือไม่หรือหากไฟล์ฐานข้อมูลสามารถอ่านได้โดย "others" หรือไม่ได้เป็นเจ้าของโดย slocate ให้ค้นหา (1) ส่งออกรายการฐานข้อมูลแม้ว่าผู้ใช้ที่ทำงานอยู่ Loc (1) ไม่สามารถอ่านไดเรกทอรีที่จำเป็นได้ เพื่อค้นหาไฟล์ที่อธิบายโดยรายการฐานข้อมูล

หาก FLAG เป็น 1 หรือใช่ (ค่าเริ่มต้น), ค้นหา (1) ตรวจสอบสิทธิ์ของไดเรกทอรีหลักของแต่ละรายการก่อนที่จะรายงานไปยังผู้ใช้ที่เรียกใช้ ในการทำให้การมีอยู่ของไฟล์ถูกซ่อนจากผู้ใช้รายอื่นกลุ่มฐานข้อมูลถูกตั้งค่าเป็น slocate และการอนุญาตของฐานข้อมูลนั้นห้ามมิให้ผู้ใช้อ่านฐานข้อมูลโดยใช้วิธีการอื่นนอกเหนือจากการค้นหา (1) ซึ่งเป็น set-gid slocate

โปรดทราบว่าการตั้งค่าสถานะการมองเห็นจะตรวจสอบก็ต่อเมื่อฐานข้อมูลเป็นเจ้าของโดย slocate และ "คนอื่น ๆ " ไม่สามารถอ่านได้


คุณอธิบายว่า--require-visibilityธงคืออะไร ... แต่บางทีคุณอาจอธิบายได้เล็กน้อยว่าทำไม เช่นทำไมไม่เพียงทำในสิ่งที่ @xaizek กำลังทำและสร้างฐานข้อมูลในตำแหน่งที่ผู้ใช้ของคุณได้รับอนุญาตโดยไม่ใช้--require-visibilityแฟล็ก
Trevor Boyd Smith

ภายหลังในหน้าคนมีคำตอบให้กับคำถามของฉัน: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 ถูกเมาท์ด้วยตัวเลือกที่ไม่ได้มาตรฐานซึ่งห้ามไม่ให้ updateb เปลี่ยนกลุ่ม แม้ว่ามันจะสร้างไฟล์ฐานข้อมูลกับxaizek:usersเจ้าของ: กลุ่มคู่สำหรับฉันดังนั้นกลุ่มจึงเป็นค่าเริ่มต้น นอกจากนี้คุณยังสามารถตรวจสอบตัวเลือกใน/etc/updatedb.confไฟล์
xaizek

ฉันต้องใช้ slocate แทนที่จะค้นหาหรือไม่ ไม่พบ slocate บน centos ...
hugemeow

1
@hugemeow เป็นรุ่นที่ปลอดภัยมากขึ้นจากเดิมslocate locateผมคิดว่า CentOS ควรจะได้รับการติดตั้งที่มีชื่อslocate locateอย่างไรก็ตามไม่ควรมีความแตกต่างในกรณีของคุณและโดยทั่วไปในกรณีที่เป็นไปได้มากที่สุด (ใน Slackware locateเป็นเพียงลิงก์สัญลักษณ์ไปslocate)
xaizek

1
@hugemeow มันเขียนว่าmlocateควรจะเร็ว slocateแต่ก็ยังเข้ากันได้กับ ฉันไม่แน่ใจว่ามันเป็นเหตุผล หากคุณ wan't ที่จะลอง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) ใช้ locale ของคุณเพื่อค้นหา 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.