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+usb
)sudo
。
必要に応じて、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
。