[+] PHP - exec z użyciem polecenia do skanowania
[+] PHP - exec z użyciem polecenia do skanowania
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
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
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
Próbowałem również stworzyć plik scan.php, w którym jest zgrabne:
Kod: Zaznacz cały
<?php
shell_exec("scan testowa bw");
?>
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.
Użytkownik który próbuje się dostać do skanera powinien należeć do grupy:
Kod: Zaznacz cały
scanner
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
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.
Dziękuję jeszcze raz za pomoc.
Pozdrawiam, do zamknięcia.