Použití příkazu mount/umount v bash scriptu, který se volá přes www(apache2)

Založil SED, 05. 08. 2021, 12:14:00

Předchozí téma - Další téma

SED

Ahoj,
  měl bych prosím dotaz, jestli někdo nezkoušel pracovat s příkazem mount/umount v bash scriptu, který volal přes www stránky. Mám problém s příkazem mount/umount.

O co jde ?
  Mám skript, který se volá na webu. Web zavolá skript a předá mu data do proměnné $user. Apache2 server běží pod uživatelem test a i tento uživatel má právo užívat mount/umount v linuxu. (nastaveno v /etc/sudoers) zatím jen pro testování. Využívám Debian 9.

skript, který se volá na webu:
  #!/bin/bash
  user=$1
  sudo mkdir /db/$user/_data
  sudo chown sftpspravce:sftpadministrace /db/$user/_data
  sudo chmod 755 /db/$user/_data
  #řádek zapíše mount příkaz do souboru, který se později volá cronem, kdyby se restartoval server a bylo by potřeba opětovné mountovaní
  echo sudo mount --bind /org/data /db/$user/_data >> /map/$user.sh
  sudo mount --bind /org/data /db/$user/_data >> /map/$user.sh
  #vytvoří záznam v crontabs pro skript, aby došlo k znovu namoutování adresářů
  echo @reboot /map/$user.sh >> /var/spool/cron/crontabs/test


Pokud zkouším funkčnost přímo z terminálu vše funguje v pořádku. Pokud, ale skript volám z webu, tak se vytvoří složky, oprávnění, ale už se neprovede mount příkaz.
Zkoušel jsem odladit chyby: sudo mount --bind /org/data /db/$user/_data >> /map/$user.sh 2> /chyby/error.txt , ale žádná chyba nenastala.

Nějak nemůžu přijít na to proč z terminálu vše funguje, ale z webu nefunguje jen příkaz mount.

Nemáte někdo prosím zkušenosti?
Děkuji

Petr Krčmář

V takových situacích bývá obvykle problém s jinak nastaveným prostředím, zejména s cestami v PATH. Nechej si někam příkazem env ty proměnné vypsat a porovnej je. Tipuju, že nemáš cestu k příkazu mount.

Musíš buď to prostředí u uživatele upravit nebo volat ten příkaz absolutní cestou.

SED

Záznamy v /etc/sudoers mám:
test ALL=NOPASSWD:/usr/bin/mount
test ALL=NOPASSWD:/usr/bin/umount

v $PATH mám /usr/bin: (+ přímo co jsem se díval tak v umístění /etc/bin jsou příkazy mount i umount)

Když spustím skript jako uživatel test přímo v terminálu, tak vše funguje v pořádku. Dojde k vytvoření symbolického linku, ale pokud to samé udělám přes web vytvoří se složka, oprávnění, ale už neproběhne mount nebo umount příkaz. A ani nedostanu žádnou chybu.


SED

Vyzkoušeno i přidání manuálně záznam do /etc/fstab a následně spuštěním příazu mount -a. Záznam se přídá v pořádku. Ale příkaz mount -a se neprovede. A chyba žádná nenastane.