我有一个在 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/example
,locate
则在 运行时不会显示该目录中的匹配文件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
在找到根本原因(双关语)之前,这只是一个创可贴。