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
。
答え2
Apacheのサポート環境変数 最も簡単な方法はhttpd.confまたは.htaccessで設定することです。
SetEnv BACKEND 'printerModel /usr/lib/cups/backend/gutenprint53+usb -sin'
問題は動的に埋める方法です。 Apacheを再起動する必要はないので、.htaccessファイルで設定できます。文章を書くのも簡単です。
一部のワーカーやwww-data以外のものがその変数にアクセスしようとすると機能しません。
また、Debian ベースのシステムで Apache を実行している場合は、この変数を /etc/apache2/envvars に挿入することもできます。