1 votes

Comment monter et démonter des périphériques à distance à partir d'un service Web ?

Ne me demandez pas pourquoi, mais je dois trouver un moyen de autoriser l'utilisateur Apache www-data pour monter et démonter des périphériques au moment de l'exécution sur le système hôte. De tels dispositifs sont, par exemple, des lecteurs USB externes sur /dev/sdaXY formaté avec le système de fichiers NTFS.

J'exécute le service web sur une machine Debian utilisant Apache 2.2 et PHP 5.3. Lorsque j'essaie d'exécuter le mount via la commande exec() J'ai évidemment ces messages d'erreur :

exec('mount /dev/sda1 /media/usb_flash');
// -> mount: only root can do that

exec('sudo mount /dev/sda1 /media/usb_flash');
// -> sudo: no tty present and no askpass program specified

exec('sudo -n mount /dev/sda1 /media/usb_flash');
// -> sudo: sorry, a password is required to run sudo

Je suis conscient que seul root peut le faire (en fait, à partir de SSH, j'ai toujours besoin de sudo lors du montage) et que www-data ne peut pas être un sudoer . Mais je suis sûr qu'il y a un moyen, une solution de contournement, pour rendre ma tâche possible. Je ne sais pas par où commencer à chercher : Googler ma question est inutile, je parie que ce n'est pas un scénario commun.

1voto

Shashank Agrawal Points 119
  1. Essayez l'option requiretty dans sudoers.
  2. Une alternative est d'exécuter sudo dans screen.
  3. Si les points de montage sont statiques (et qu'il n'y a aucun risque que d'autres utilisateurs fassent du mal avec cela), vous pouvez créer une entrée fstab pour chacun de ces montages avec l'option user .

0voto

user1570825 Points 21

J'ai résolu le problème en utilisant pmount . Après avoir trouvé cet outil, il m'a semblé que c'était la solution la plus simple (aucun sudoers les modifications, pas de fstab des trucs, rien).

pmount - monter des périphériques hotpluggables arbitraires en tant qu'utilisateur normal
pmount (" policy mount ") est une enveloppe autour de la norme mount programme qui permet aux utilisateurs normaux de monter des périphériques amovibles sans entrée /etc/fstab correspondante.

Comme le dit le manuel, sous Debian, la permission d'exécuter pmount est limité aux membres du groupe système plugdev . J'ai dû exécuter la commande suivante une fois vis SSH, pour ajouter Apache usar au plugdev groupe :

sudo adduser www-data plugdev

J'ai redémarré Apache, et maintenant je peux monter et démonter mes disques USB à partir de PHP sans sudo :

exec('pmount /dev/sda1 usb_flash'); // Mounted on /media/usb_flash
exec('ls -al /media/usb_flash'); // List files, owned by www-data:600
exec('pumount usb_flash'); // Unmounted

-1voto

El setuid peut faire l'affaire : créez script qui monte votre disque, le possède par racine fixer le setuid et appeler ce script depuis apache

Vous pouvez définir les permissions requises (setuid et exec) avec cette commande :

chmod 4711 <your/script>

où le premier 4 est le setuid...

voir le wiki setuid pour plus de références.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X