Почему мои не администраторы не могут использовать команду 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

Это просто пластырь, пока не будет найдена первопричина (отмечен каламбур).

Другие вопросы по тегам