root以外のユーザーの環境変数を設定する:www-data(Webサーバー)

root以外のユーザーの環境変数を設定する:www-data(Webサーバー)

Gutenprint(/usr/lib/cups/backend/gutenprint53+usb)にはスクリプトがあります。これを使用するには、次の環境変数を設定する必要があります。

sudo BACKEND=printerModel /usr/lib/cups/backend/gutenprint53+usb -sin

私のrootアカウントとsudoでは問題なく使用できますが、Webサーバーで実行しようとすると次のエラーが発生します。

sudo: sorry, you are not allowed to set the following environment variables: BACKEND

gutenprint53 + usbはsudoとして実行する必要があるため、sudo visudoを使用して以下を追加しました。

www-data ALL = NOPASSWD: /usr/lib/cups/backend/gutenprint53+usb

私の質問は:www-dataが必要な環境変数を設定する方法はありますか?

重要:BACKENDの値は次のとおりです。その他だから、これは私のルートアカウントで事前に設定してwww-dataと共有できるわけではありません。

オペレーティングシステム:Raspbian GNU / Linux 10(ブレーカー)

ベストアンサー1

これに関するほとんどすべての質問と同様に、sudo答えはラッパースクリプトを書くことです。

この場合は、シェルスクリプトを作成してBACKEND変数を設定し、プログラムを実行してください。

例えば

#!/bin/sh

BACKEND=printerModel
export BACKEND

/usr/lib/cups/backend/gutenprint53+usb -sin

www-dataこれによりスクリプトの実行が許可されます(ただし実行されません.../gutenprint53+usbsudo

必要に応じて、www-dataプリンタモデルをラッパースクリプトに渡すことはできますが、渡されたデータが有効で安全であることを慎重に確認する必要があります。特に、Webユーザーが「printerModel」データを(直接的または間接的に)提供する場合にはさらにそうです。 。

BACKENDある変数にどのような値が有効かわからないので、探してgutenprint53+usbコーディングするのはあなたに任せます。

#!/bin/sh

# INSERT CODE HERE TO VALIDATE "$1"
#
# This should not test for "known bad" values, instead it 
# should test for "known GOOD" values and exit immediately
# if there is any doubt, anything it does not recognise.
# e.g.

case "$1" in
  printerModel) data_is_good=1 ;;
  AnotherModel) data_is_good=1 ;;
  *) exit 1 ;;
esac

[ "$data_is_good" -eq 1 ] || exit 1

BACKEND="$1"
export BACKEND

/usr/lib/cups/backend/gutenprint53+usb -sin

または、複数のラッパースクリプト(それぞれハードコーディングされたBACKEND設定が異なる)www-dataを持っていますsudo

おすすめ記事