sudo -uを使用するときにパスからワイルドカード文字をエスケープする方法コマンド[重複]

sudo -uを使用するときにパスからワイルドカード文字をエスケープする方法コマンド[重複]

ルートカボチャが有効なNFSファイルサーバー上のファイルにアクセスする必要があります。私はArch Linuxでbashを使用しています。私はこの種のコマンドを使用しています。

# sudo -u authduser ls /mounted/filesystem/path/aa.user.js

これは成功し、出力は次のようになります。

/mounted/filesystem/path/aa.user.js

しかし、bb.user.jsのようないくつかのファイルがあります。次のコマンドを実行すると失敗します。

# sudo -u authduser ls /mounted/filesystem/path/*.user.js

出力は次のとおりです

ls: '/mounted/filesystem/path/*.user.js' にアクセスできません。そのファイルやディレクトリはありません。

私は引用、エスケープ、その他のさまざまな方法を試しましたが、成功しませんでした。正しいアプローチは何ですか?

答え1

ワイルドカードの問題は、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"はシェルでコマンドを実行しますが、ワイルドカードやメタ文字は機能しません。詳細については。

答え2

次の方法が有効です。

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

ムルが正しいです。質問は次のようになります。ワイルドカード文字を使用したsudo mv操作が機能しないのはなぜですか?とは別に反対ルートには権限はありませんが、一般ユーザーには権限があります。問題はタスクの優先順位に帰結し、回避策はsudo操作の前ではなく、後にワイルドカードを拡張することです。

関連情報