Работает следующий подход:
sudo -u authduser bash -c "ls /mounted/filesystem/path/*.user.js"
Муру был прав, что проблема похожа на Почему эта операция sudo mv с подстановочными знаками не работает? , кроме напротив в том, что root не имеет разрешений, а у обычного пользователя есть разрешения. Проблема сводится к порядку приоритета операций, и решение основано на расширении подстановочного знака после операции sudo, а не перед ней.
Проблема с подстановочным знаком заключается в том, что он расширяется оболочкой перед запуском команды sudo
.
Если только authduser
сможет перечислить файлы в /mounted/filesystem/path/
, но не ваш пользователь, выполняющий команду sudo
, тогда оболочка не сможет раскрыть подстановочный знак и передаст его без изменений. Поскольку ls
сам по себе не расширяет подстановочные знаки, это приведет к ошибке, которую вы видите.
См. Почему эта операция sudo mv с подстановочными знаками не работает? для получения более подробной информации об этом.
Для решения этой проблемы вы можете использовать sudo
аргумент -s
, который порождает оболочку в качестве целевого пользователя (, а не просто выполняет команду напрямую ), и в этом случае, если вы также дадите ему команда, она будет передана оболочке с использованием опции -c
(, которая является обычной опцией оболочки для интерпретации и выполнения команды, включая расширение с подстановочными знаками.)
В этом случае вы захотите поместить команду в кавычки (, предпочтительно в одинарные кавычки ), чтобы оболочка, выполняющая команду sudo
, не пыталась интерпретировать команду, а только ту, которая порождена sudo
в качестве целевого пользователя:
# sudo -u authduser -s 'ls /mounted/filesystem/path/*.user.js'
См. справочную страницу sudo для получения более подробной информации, в частности взгляните на параметр -s
.
ОБНОВЛЕНИЕ:Здесь невозможно использовать sudo -s
с командой. См. «sudo -s» запускает команду в оболочке,но подстановочные знаки или метасимволы не работают для получения дополнительной информации.