Wpis z mikrobloga

Mirki z #linux #raspbian #raspberrypi pomóżcie. Dodałem sobie w /etc/fstab linijkę:
tmpfs /var/tmp tmpfs nodev,nosuid,size=1M 0 0
Tworzy ona katalog /var/tmp i przypisuje go do ramu. Za pomocą skryptu w #python umieszczam w nim jakiś plik. Wszystko działa. Teraz potrzebuję mieć dostęp do tego pliku z poziomu serwera www - ze skryptu php. Napisałem sobie dodatkowy skrypt w pythonie, który zwróci zawartość tego pliku. Kod napisany w pythonie:

path = "/var/tmp/plik"
if os.path.exists(path):
with open(path , 'r') as myfile:
data=myfile.read()
sys.exit(data)

I teraz najlepsze. Gdy wywołam skrypt normalnie z konsoli (jestem zalogowany na konto "pi") to wszystko pięknie działa. Natomast gdy wywołam skrypt z poziomu php:

$ouput = shell_exec("/home/pi/skrypt.py 2>&1");
To skrypt wykonuje się poprawnie, natomiast wywala się na if os.path.exists(homepath): ponieważ plik według niego nie istnieje. A wywołując z usera "pi" istnieje...

Dodałem wpis w /etc/sudoers:
www-data ALL=(ALL) NOPASSWD: /home/pi/skrypt.py
www-data ALL=(ALL) NOPASSWD: /var/tmp/
Nie działa. Próbowałem wpisywać komendy:
sudo chown -R pi:www-data /var/tmp/plik
sudo chown www-data:www-data /var/tmp/
sudo chmod -R 777 /var/tmp/
Nadal bez skutecznie... Jak mogę rozwiązać problem?
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Rosly: 777 bo ustawiałem chown. Co do PHP to raczej tak, bo miałem podobny problem, aby wykonać z poziomu kodu PHP shell_exec to skryptu w pythonie - i pomogło właśnie dodanie wpisu w /etc/sudoers:
www-data ALL=(ALL) NOPASSWD: /home/pi/skrypt.py
  • Odpowiedz
@loginek0: w shellexec umiesc "strace python /home/pi/skrypt.py 2>&1 | tee jakisplik"
Gdzie jakis_plik musi byc w katalogu z prawami gdzie twoj php moze pisac
Nastepnie przeklej mi ten plik na jakis pastebin czy cos
  • Odpowiedz
@loginek0: musimy zrobic jeszcze jedna iteracje bo widze ze orginalnie wywolujesz skrypt z parametrem gethome
Widze w tym logu co podeslales ze skrypt zwraca błąd z braku parametru

command = ''.join(sys.argv[1]) #' '.join(sys.argv[1:]
list index out of
  • Odpowiedz
@loginek0: Ten nowy log wygląda identycznie jak stary. Jeśli jesteś na 100% pewien że utworzyłeś ten plik i nie pomyliłeś logów to prawdopodobnie masz ustawionego chroota albo jakiś inny jail jak pisze @dlycs bo w logu widzę że nie można odnaleźć ścieżki stat64("/var/tmp/home", 0x7ed7b748) = -1 ENOENT (No such file or directory)

Możesz w skrypcie pythonowym wywołać pwd lub ls żeby się zorientować do jakiego katalogu chroot cię ogranicza.
  • Odpowiedz