Desperacko próbuję zamontować udział CIFS na pudełku z Debianem 10 za pośrednictwem internetowego interfejsu użytkownika i udostępnić go całemu systemowi. Polecenie mount zostało wykonane pomyślnie, ale punkt montowania nie jest wymieniony w / etc / mtab lub / proc / mounts i dlatego też nie jest wyświetlany przez polecenie mount.

Używam Apache2 jako serwera WWW i próbowałem różnych podejść z tym samym rezultatem.

Celem jest użycie skryptu php z Apache lub Nginx, który montuje udział, który jest ważny i widoczny dla całego systemu operacyjnego, tak jak gdybym użył polecenia mount w linii poleceń.

Próbowałem różnych sposobów z plikiem mount.php, który wywołuje skrypt bash, aby zamontować udział:

  • dodano dane www do sudoers bez hasła i wywołanie skryptu zawierającego "sudo mount ..."
  • użył skompilowanego w C opakowania, które jest wykonywane jako root, który wywołuje skrypt bash, który montuje udział
  • zainstalowany php-fpm z gniazdem z włączoną obsługą roota, aby wywołać skrypt bash
  • niech skrypt bash doda udział do / etc / fstab i uruchomi mount -a

Wszystkie te podejścia działają tak, jak powinny, jeśli są wywoływane z wiersza poleceń, nawet gdy są wywoływane jako użytkownik danych www (jeśli to możliwe).

Wydaje się, że wszyscy montują udział, gdy są wywoływani przez interfejs sieciowy, ponieważ jeśli użyję tych samych technik do uruchomienia montowania bez żadnych parametrów w skrypcie php ze strony internetowej, montowanie jest wymienione tak, jak powinno. Również druga próba zamontowania udziału za pośrednictwem interfejsu internetowego powoduje wyświetlenie komunikatu, że urządzenie jest zajęte.

Ale kiedy używam polecenia mount bez żadnych parametrów w wierszu poleceń, punktu montowania nie ma na liście ani nie znajduję go w / etc / mtab lub / proc / mounts.

W ostatnim podejściu, w którym pozwoliłem skryptowi edytować / etc / fstab i wywołać `` mount -a '', zachowanie jest dokładnie takie samo (wymienione w interfejsie internetowym, ale nie w wierszu poleceń), ale po ponownym uruchomieniu udział jest montowany zgodnie z oczekiwaniami i widocznymi.

Jestem więc bardzo pewien, że przeoczam pewnego rodzaju ograniczenie przestrzeni użytkownika / piaskownicy / terminala, w którym działa apache2, które ma pewien wpływ na polecenie montowania. Co jest dziwne, ponieważ mogę nawet edytować / etc / fstab za pomocą skryptów i wydaje się, że mam uprawnienia roota do wszystkiego - nawet do montowania, w przeciwnym razie w ogóle by się nie uruchomił. Ale w każdym razie polecenie mount wydaje się zapisywać swoje wyniki montowania w innym miejscu, gdy jest wywoływane przez interfejs sieciowy.

Czy ktoś ma pomysł, który wskazuje mi właściwy kierunek? ”

Z góry dziękuję, Axel

0
Axel Booltink 23 marzec 2020, 20:29

2 odpowiedzi

Najlepsza odpowiedź

Apache2 ma właściwość „PrivateTmp”, która jest ustawiona w /etc/systemd/multi-user.target.wants/apache2.service. Spróbuj skomentować to, umieszczając znak krzyżyka (#) przed linią.

Mount używa folderu tymczasowego i jeśli Apache używa prywatnego folderu tymczasowego, może nie pojawić się na liście montowań.

1
Monocito 1 kwiecień 2020, 10:20

Jeśli masz problemy z uprawnieniami i nie chcesz się nad tym zagłębiać, polecam użycie prostej funkcji Write to File w PHP, a następnie za pomocą CRON JOB wykonaj skrypt, który jeśli znajdziesz ten plik, usuń go i wykonaj funkcję, której pragniesz. To zadanie cron nie powinno mieć żadnych problemów z uprawnieniami na całym komputerze.

0
Ricardo Ortega Magaña 23 marzec 2020, 17:33