为什么我的非管理员用户不能使用 mlocate 命令?

为什么我的非管理员用户不能使用 mlocate 命令?

我有一个在 14.04 上运行的 node.js 软件代理,无法在新服务器上运行其许多 bash 脚本。我遇到的问题是受限用户似乎没有从locate 或 mlocate 命令返回任何内容。

我需要弄清楚为什么这个命令在我的管理员用户下有效,但在代理的用户名下无效。

admin@host ~ $ locate 6831-7
/home/example/6831-7.txt
/home/example/6831-7.pdf
/home/example/6831-7.psd

admin@host ~ $ sudo login limited
Password:
limited@host ~ $ locate 6831-7

#it returns nothing

没有返回任何内容到 stdout,这是我的脚本存在的问题。什么原因导致此程序在此受限用户下不返回?

答案1

尽管我将用户添加到了组中,但似乎只有这样才能解决问题。我使用以下命令编辑了数据库的权限:

sudo chmod o+r /var/lib/mlocate/mlocate.db

假设数据库位于 /var/lib 中,这将为数据库添加全局读取权限。受限用户能够立即像平常一样将定位返回到 stdout。

编辑:这个解决方案的问题是,updatedb 将世界权限返回为 0。所以这只是一个临时解决方案。

答案2

在我的测试中,当非 root 用户运行时locate,非 root 用户无权读取的目录的内容不会显示。

就你的情况而言, 上的权限是什么/home/example?如果用户limited对 没有读取权限/home/examplelocate则在 运行时不会显示该目录中的匹配文件limited。假设你的系统上没有其他名称中包含 6831-7 的文件,则你的结果应该是空的。

您可以通过查看是否limited可以用来locate查找系统上其他可供全世界读取的文件来测试这一点,例如/etc/timezone

limited@host$ locate timezone
/etc/timezone
/usr/share/help/C/gnome-help/clock-timezone.page
...

如果得到结果,则表明locate能够成功读取数据库。

答案3

关于此问题有一个错误报告:

我没有遵循那里的任何建议,因为我知道我使用chown$USER on/而不是/tmp/$USER/递归会破坏我的系统。花了一天时间重建我的系统以进行启动。locate命令是需要修复的遗留问题之一。

因为我的系统性能过剩,利用率低,我已经sudo updatedb通过 每隔 15 分钟运行一次cron。所以我只是修改了它以重置权限。

变更前:

$ sudo ll /var/lib/mlocate/mlocate.db

-rw-r----- 1 root mlocate 110953861 Jun 29 20:02 /var/lib/mlocate/mlocate.db

以下是变更的末尾crontab -e以及权限的样子:

# m h  dom mon dow   command
0   0   1   *   *     /bin/journalctl --vacuum-size=200M
*/15 *  *   *   *     nice updatedb && chmod o+r /var/lib/mlocate/mlocate.db
0  20   *   *   *     /sbin/fstrim /

$ while : ; do ll /var/lib/mlocate/mlocate.db ; sleep 5m ; done

-rw-r----- 1 root mlocate 110953861 Jun 29 20:02 /var/lib/mlocate/mlocate.db
-rw-r----- 1 root mlocate 110953861 Jun 29 20:02 /var/lib/mlocate/mlocate.db
-rw-r--r-- 1 root mlocate 110954083 Jun 29 20:15 /var/lib/mlocate/mlocate.db
-rw-r--r-- 1 root mlocate 110954083 Jun 29 20:15 /var/lib/mlocate/mlocate.db
-rw-r--r-- 1 root mlocate 110954083 Jun 29 20:15 /var/lib/mlocate/mlocate.db
-rw-r--r-- 1 root mlocate 110959759 Jun 29 20:30 /var/lib/mlocate/mlocate.db
-rw-r--r-- 1 root mlocate 110959759 Jun 29 20:30 /var/lib/mlocate/mlocate.db

在找到根本原因(双关语)之前,这只是一个创可贴。

相关内容