Почему мои не администраторы не могут использовать команду mlocate?
У меня программный агент node.js, работающий на 14.04, который не может запустить многие из его сценариев 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. Так что это только временное решение.
В моем тестировании, когда пользователь без полномочий 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
может успешно читать базу данных.
По этой проблеме есть отчет об ошибке:
Я не последовал ни одному из предложений, потому что знаю, как я сломал свою систему, используя
chown
в $USER на
/
вместо того
/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
Это просто пластырь, пока не будет найдена первопричина (отмечен каламбур).