Как избежать использования подстановочного знака в пути при использовании команды sudo -u [дубликат]

-1
22.11.2018, 09:28
2 ответа

Работает следующий подход:

sudo -u authduser bash -c "ls /mounted/filesystem/path/*.user.js"

Муру был прав, что проблема похожа на Почему эта операция sudo mv с подстановочными знаками не работает? , кроме напротив в том, что root не имеет разрешений, а у обычного пользователя есть разрешения. Проблема сводится к порядку приоритета операций, и решение основано на расширении подстановочного знака после операции sudo, а не перед ней.

0
28.01.2020, 05:09

Проблема с подстановочным знаком заключается в том, что он расширяется оболочкой перед запуском команды 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» запускает команду в оболочке,но подстановочные знаки или метасимволы не работают для получения дополнительной информации.

1
28.01.2020, 05:09

Теги

Похожие вопросы