Strona 1 z 1

[+] PHP - exec z użyciem polecenia do skanowania

: 08 czerwca 2013, 16:56
autor: bishoop
Witam.
Mam taki problem. W sieci domowej piszę małą stronę, z poziomu której np. rodzice będą mogli bez problemu, jednym kliknięciem, zeskanować dany dokument i go pobrać.

Mam serwer pracujący na Debianie Wheezy. Uznałem, że pójdę na łatwiznę, i użyję funkcji exec() w tym kodzie. Polecenia takie jak echo i whoami działają bez problemu, jednak gdy chcę włączyć swój skrypt (skanowanie używając scanimage, convert z tiff na jpg, rm tiffa), który nie potrzebuje uprawnień roota, to nic się nie dzieje. Dosłownie nic, żadnych błędów itp.

Spróbowałem nawet użyć samego polecenia scanimage - bez rezultatów pozytywnych. Wszystko ma się zapisywać do tego samego katalogu, w którym jest ten plik php, a sama strona jest na oddzielnym wirtualnym hoście, na innym porcie, z włączonym SSL.

Co mam zrobić, by dla tego właśnie wirtualnego hosta miał możliwość używania skanera?
Jeszcze chciałbym w tej mini-stronie zamieścić restart CUPS-a, jednak z tym też będzie problem, gdyż do tego potrzebne są już uprawnienia roota.

Z góry dziękuję za pomoc,
Tomek

: 09 czerwca 2013, 13:48
autor: Bastian
Jeżeli nie działa z CLI ręcznie, to w skrypcie z użyciem exec() tym bardziej nie będzie działać. Wklej jakiego polecenia używasz do zeskanowania pliku.

: 09 czerwca 2013, 20:37
autor: bishoop

Kod: Zaznacz cały

#!/bin/bash
if [ "$2" = "bw" ]; then
scanimage -d pixma --resolution 300 --format tiff --mode Gray > /home/scanwww/$1.tiff
convert /home/scanwww/$1.tiff /home/scanwww/$1.jpg
rm /home/scanwww/$1.tiff
else
scanimage -d pixma --resolution 300 --format tiff --mode Color > /home/scanwww/$1.tiff
convert /home/scanwww/$1.tiff /home/scanwww/$1.jpg
rm /home/scanwww/$1.tiff
fi
Oczywiście próbowałem zrobić samym scanimage - bez efektu.
Próbowałem również stworzyć plik scan.php, w którym jest zgrabne:

Kod: Zaznacz cały

<?php
shell_exec("scan testowa bw");
?>
Wywołanie go przez ssh "php scan.php" daje oczekiwany rezultat drukowania. Jednak z poziomu strony używając shell_exec("php scan.php"); już nie.

: 09 czerwca 2013, 21:22
autor: Rafal_F
Sprawdź logi systemowe. Musi być jakiś ślad. Najczęściej w takich przypadkach problemem jest dostępem do urządzenia (uprawnienia).

: 09 czerwca 2013, 21:56
autor: bishoop

Kod: Zaznacz cały

scanimage: open of device pixma failed: Access to resource has been denied
convert.im6: Cannot read TIFF header. `/home/scanwww/testowa.tiff' @ error/tiff.c/TIFFErrors/508.
convert.im6: no images defined `/home/scanwww/testowa.jpg' @ error/convert.c/ConvertImageCommand/3044.
Czyli to co myślałem - nie chce dać mi praw do skanera - się nie dziwię szczerze. Więc jak to uprawnienie mogę nadać virtualhostowi?

: 10 czerwca 2013, 14:59
autor: Rafal_F
Użytkownik który próbuje się dostać do skanera powinien należeć do grupy:

Kod: Zaznacz cały

scanner

: 10 czerwca 2013, 18:46
autor: bishoop
Nic. Nawet po dodaniu www-data do root nie działa.

: 10 czerwca 2013, 20:02
autor: Bastian
Skonfiguruj sobie sudo, tak aby ten konkretny skrypt działał jako root bez hasła

Kod: Zaznacz cały

www    ALL=(ALL) NOPASSWD: /usr/bin/php -f /home/skrypt.php

: 10 czerwca 2013, 22:15
autor: bishoop
Bardzo mi się podoba rozwiązanie Bastiana - jest w miarę bezpieczne i łatwe, oraz rozwiązuje problem drugi z restartowaniem CUPS-a. Wiem, że dawanie jakiemukolwiek plikowi możliwości wykonania go przez stronę jako root jest niebezpieczne, ale to tylko jest na innym wirtualnym hoście w lokalnej sieci, z szyfrowanym połączeniem, więc nie powinno być źle.

Dziękuję jeszcze raz za pomoc.
Pozdrawiam, do zamknięcia.