7 votes

Création programmée de points de montage sous MacOS 10.12

Apple me l'a confirmé :

qu'avec MacOS 10.12, les autorisations pour créer un dossier à l'intérieur de /Volumes nécessitent un accès Root.

Utilisation de la mount nécessite que le point de montage existe d'abord, donc vous allez devoir faire un sudo pour créer ce dossier pour le point de montage.

Je développe une application qui présente une liste de partages réseau à un utilisateur, et lui permet de les monter de manière sélective. Je gère cela en lançant un processus de commande en arrière-plan qui utilise mkdir y mount pour monter le lecteur réseau. Bien sûr, cela échoue maintenant, car il n'a pas la permission de créer le point de montage.

Une option que j'envisage est de modifier sudoers pour donner à tous les utilisateurs la permission d'utiliser mkdir .

Quelqu'un d'autre peut-il penser à un moyen de monter de manière programmée un lecteur réseau via un terminal sans demander de mot de passe, ou sans avoir à utiliser sudo ?

0 votes

Il semble que les mêmes invites se produisent également lors de l'utilisation d'AppleScript : apple.stackexchange.com/questions/245819/

0 votes

Comme cela affecte plus que l'utilisateur actuel, il semble qu'Apple a maintenant obtenu les permissions correctes. Vous avez besoin d'un compte administrateur pour faire cela = si vous ne l'avez pas, c'est une faille de sécurité et cela ne devrait pas être possible.

4voto

mnewt Points 351

Comme je l'ai répondu à MacOS Sierra : AppleScript mount volume demande sans cesse une connexion Je pense que la façon de faire maintenant est de créer le point de montage quelque part où se trouve l'utilisateur. fait ont un accès en écriture, comme le répertoire personnel de l'utilisateur :

mkdir -p ~/mnt
mount_smbfs "//my_username:my_password@my_hostname/share" ~/mnt

0 votes

Si c'est spécifique à une application, je recommanderais ~/Bibliothèque/Application Support/AppName/mnt ou quelque chose de similaire.

0 votes

Marqué comme accepté, car il permet de contourner le problème fondamental. Je suis cependant coincé avec un problème dans la mesure où le nom du partage sur le serveur n'est pas correct, et la création de /Volumes/WhatEverNameIWant était un hack pour rendre le nom sur le bureau meilleur pour l'utilisateur.

0 votes

Je suis heureux de voir cette solution de contournement, mais je ne vois pas en quoi elle est plus sûre que la capacité de montage précédemment disponible. C'est comme si Apple verrouillait la porte du poulailler alors que la fenêtre du poulailler est grande ouverte.

3voto

Stefan Ried Points 71

Voici une bonne nouvelle autour de Sierra les défis croissants : L'automountd original d'Unix fonctionne à nouveau comme il est censé fonctionner.

Faites comme Root : Ajoutez dans votre /etc/auto_master par exemple cette ligne à une carte de montage statique. Je l'ai appelé "Media", mais vous pouvez faire ce que vous voulez.

/etc/auto_master:
/Volumes/Media   auto_media

puis créez un fichier /etc/auto_media avec les entrées de vos points de montage, il y en a deux dans l'exemple pour l'image et la musique. Mon NAS Synology supporte entièrement le système de fichiers Apple, mais vous pouvez faire cela sur n'importe quel serveur de fichiers et choisir un autre système de fichiers. Voir man auto_master.

/etc/auto_master:
Bilder  afp://yournasuser:naspw@Media/Bilder
Musik   afp://yournasuser:naspw@Media/Musik

Faites aussi le dossier de montage manuellement mkdir /Volume/Media et rechargez tout avec automount -vc Si vous cliquez maintenant en tant qu'UTILISATEUR dans le Finder sur le dossier /Volumes/Media, le Finder affichera automatiquement les sous-dossiers Bilder et Musik. Si vous cliquez dans l'un d'entre eux, automountd montera automatiquement les volumes EN TANT QUE l'UTILISATEUR qui en a fait la demande et NON en tant que Root. C'est la clé de la solution ! !! Vérifiez l'état du montage, il montrera ce qui suit :

Type mount
...
map auto_media on /Volumes/Media (autofs, automounted, nobrowse)
//yournasuser@Media/Bilder on /Volumes/Media/Bilder (..automounted,.. mounted by yourMacUser)

Veuillez noter le "monté par nom d'utilisateur" à la fin de la dernière ligne ci-dessus.

Je me suis rendu compte que le mkdir /Volumes/Media est persistant sur un Mac, mais que tous les dossiers de /Volumes sont effacés sur un autre Mac. Dans ce cas, vous devez exécuter après le redémarrage un script qui crée le dossier et recharge le compteur automatique. Quelque chose comme ceci :

#!/bin/sh
mkdir /Volumes/Media
automount -vc

J'espère que cela fonctionne pour tout le monde.

3voto

Stefan Ried Points 71

Pour ceux qui veulent une solution vraiment sophistiquée, je me suis souvenu de mes bases Unix d'il y a 20 ans, comment les cartes exécutables d'automount fonctionnent. Ici, le mapfile n'est pas une carte statique, mais un exécutable script, qui sort essentiellement les paramètres pour les points de montage. La bonne chose à ce sujet, est que vous pouvez corriger d'autres choses dans ces script, comme réveiller un NAS endormi, ou ajouter des liens supplémentaires vers les périphériques montés. Voici comment cela se passe

/etc/auto_master
/Volumes/Media  auto_exec

créer un script dans /etc et le rendre exécutable (chmod +x /etc/auto_exec) par le démon automount. Voici le mien :

#!/bin/bash
# By www.stefan-ried.de 11/2016
# Open Source
#
# Name or IP of you NAS
server="yourNASServername"
# List of share you want to mount
shares="Bilder Musik Tina GemeinsameDateien"
# NAS use name
user="yourNasUser"
# NAS PW
userpw="yourNasPW"
# local logfile 
logfile="/tmp/automounter.log"
#
# automountd calls this without an argument to show the folders 
# or with a specific folder name as argument to retrieve the mount parameter for it
# 
# Make sure this file is in /etc and executable (chmod +a), call it auto_exec
# Add to /etc/auto_master for example this line
# /Volumes/Media    auto_exec
# 
# automount will then execute this file when the folder is accessed
# Reload the changes to your auto_master and auto_exec with automount -vc
# use tail -f /tmp/automounter.log to see whats going on, when you ls into /Volume/..
# have fun
#
if [ $# = 0 ]; then # List keys
    echo `date` "Showing Folders/Keys" $1   >> $logfile
    for mountpoint in $shares; do
        echo -e "$mountpoint"   >> $logfile
        echo -e "$mountpoint"
        # create symbolic links for legacy mount points under /Volumes
        # you can comment this out, if you don't need it
        if [ ! -L /Volumes/$mountpoint ]; then
            echo -e "Create Sym Link Volumes/$mountpoint"       >> $logfile
            ln -s /Volumes/$server/$mountpoint /Volumes/$mountpoint
        fi
    done
# fire a WOL to the NAS
    /usr/local/bin/wolcmd 0011321906C8 10.0.0.2 255.255.255.0 4343 >> $logfile
#   
else
    echo `date` "Requesting Mountpoint" $1  >> $logfile
    for mountpoint in $shares; do
        if [ $1 = $mountpoint ]; then
            echo -e "afp://$user:$userpw@Media/$mountpoint \\"      >> $logfile
            echo -e "afp://$user:$userpw@Media/$mountpoint \\"
        fi
    done
fi

Alors, que fait le script en plus de la solution statistique, que j'ai postée ci-dessus ?

  1. Vous avez tous les paramètres comme variables au début. Veuillez le remplir.

  2. Il ajoute via des liens symboliques les anciens points de montage. C'est très pratique, car avant par exemple mon dossier de musique était monté sur /Volumes/Musik, mais il apparaît sous /Volumes/Media/Musik. Le lien rend le dossier à nouveau visible sous /Volumes/Musik.

  3. Il tire et réveille sur le réseau de mon NAS. Téléchargez le wolcmd ici par exemple : https://www.depicus.com/downloads/wolcmdmac.zip Merci à l'auteur d'avoir partagé cette information en toute liberté. Vous devez le mettre à n'importe quel endroit cohérent avec le script. Je l'ai mis à /usr/local/bin

  4. Il enregistre toutes les actions dans un fichier journal. Vous pouvez le surveiller librement en exécutant par exemple "tail -f /tmp/automounter.log" dans une fenêtre de terminal. Seuls ces montages sont exécutés lorsque le dossier correspondant est touché.

1voto

Stefan Ried Points 71

Au cas où votre dossier /Volumes/mountpoint disparaîtrait après le redémarrage, et que vous ne trouviez pas assez rapidement sur le net comment lancer quelque chose au démarrage ou à la connexion. Voici ce que j'ai fait :

Placé dans le dossier de l'agent de lancement de l'utilisateur : /Users/YourMacUser/Library/LaunchAgents le fichier suivant

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
 <dict>
  <key>Label</key>
  <string>de.stefan-ried.mounter</string>
  <key>Program</key>
  <string>/Users/YouMacUserFolder/Library/LaunchAgents/mount-startup.sh</string>
  <key>RunAtLoad</key>
  <true/>
 </dict>
</plist>

Le script de mon mount-startup.sh script est le suivant :

#!/bin/sh
# By www.stefan-ried.de 11/2016
# Open Source
#
# Name or IP of you NAS
server="Media"
# List of share you want to mount
shares="Bilder Musik Tina GemeinsameDateien"
# NAS use name
user="YourNasUser"
# Mac PW
userpw="your Mac user pw"
# local logfile 
logfile="/tmp/automounter.log"
#
# automountd calls this without an argument to show the folders 
# or with a specific folder name as argument to retrieve the mount parameter for it
# 
# Make sure this file is in /etc and executable (chmod +a), call it auto_exec
# Add to /etc/auto_master for example this line
# /Volumes/Media    auto_exec
# 
# automount will then execute this file when the folder is accessed
# Reload the changes to your auto_master and auto_exec with automount -vc
# use tail -f /tmp/automounter.log to see whats going on, when you ls into /Volume/..
# have fun
#
echo `date` "Startup" $1    >> $logfile
if [ ! -e /Volumes/$server ]; then
        echo -e "Create Volumes/$server"        >> $logfile
        echo $userpw |sudo -S mkdir /Volumes/$server 
        echo $userpw |sudo -S automount -cv >> $logfile
fi
# fire a WOL to the NAS
echo $userpw |sudo -S /usr/local/bin/wolcmd 0011321906C8 10.0.0.2 255.255.255.0 4343 >> $logfile
# 
for mountpoint in $shares; do
    # create symbolic links for legacy mount points under /Volumes
    # you can comment this out, if you don't need it
    if [ ! -L /Volumes/$mountpoint ]; then
        echo -e "Create Sym Link Volumes/$mountpoint"       >> $logfile
        echo $userpw  | sudo -S ln -s /Volumes/$server/$mountpoint /Volumes/$mountpoint
    fi
done

C'est ce que les script font au moment de la connexion de l'utilisateur.

  1. Il vérifie si le point de montage dans /Volumes est là, le crée et recharge le compteur automatique. C'était la tâche principale du script. Le reste est du luxe.

  2. Ça réveille le NAS. Le NAS est également réveillé par le script d'auto_exec si un dossier de montage automatique est accédé. Mais les lecteurs NAS prennent un certain temps pour démarrer, et peut-être que le MacUser fait autre chose après la connexion. Une fois qu'il a cliqué sur le dossier automount, le NAS est déjà en marche. Le double wol ne fait pas de mal.

  3. Créez également les liens de montage hérités sous "Volumes" à nouveau. Le double ne fait pas de mal.

Veuillez noter que cet agent script est conçu pour être exécuté sous les privilèges USER. Habituellement, la commande sudo demande un mot de passe. J'ai surmonté cela par le hack "echo $passpw | sudo -S ...". Évidemment, stocker un mot de passe explicitement dans un fichier script n'est pas du tout professionnel et juste correct pour mon usage personnel. Pour faire cela professionnellement, vous devriez charger ce lancement script dans la /bibliothèque racine et non dans la bibliothèque de l'utilisateur. Vous pouvez simplement supprimer toute la partie "echo $passpw | sudo -S " avant la commande réelle.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X