루트가 아닌 사용자의 환경 변수 설정: www-data(웹 서버)

루트가 아닌 사용자의 환경 변수 설정: www-data(웹 서버)

Gutenprint(/usr/lib/cups/backend/gutenprint53+usb)에는 스크립트가 있습니다. 이를 사용하려면 다음과 같은 환경 변수를 설정해야 합니다.

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

내 루트 계정과 sudo에서는 아무 문제 없이 사용할 수 있지만, 웹 서버에서 실행하려고 하면 다음 오류가 발생합니다.

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프린터 모델이 래퍼 스크립트에 전달되도록 허용할 수 있지만 전달된 데이터가 유효하고 안전한지 주의 깊게 확인해야 합니다. 특히 웹 사용자가 "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

아파치 지원환경 변수. 가장 쉬운 방법은 httpd.conf 또는 .htaccess에서 설정하는 것입니다.

SetEnv BACKEND 'printerModel /usr/lib/cups/backend/gutenprint53+usb -sin'

문제는 동적으로 채우는 방법입니다. 아파치를 다시 시작할 필요가 없으므로 .htaccess 파일에서 설정할 수 있습니다. 글을 쓰는 것도 더 쉬울 것입니다.

일부 작업자나 www-data 이외의 다른 항목이 해당 변수에 액세스하려고 하면 작동하지 않습니다.

또한 Debian 기반 시스템에서 Apache를 실행하는 경우 이 변수를 /etc/apache2/envvars에 삽입할 수도 있습니다.

관련 정보