การสร้างจุดเชื่อมต่อโดยทางโปรแกรมใน macOS 10.12


4

Apple ยืนยันกับฉันแล้ว ( https://openradar.appspot.com/radar?id=4948585099558912 ) ที่มี macOS 10.12 การอนุญาตให้สร้างโฟลเดอร์ภายใน/Volumesจำเป็นต้องเข้าถึงรูท

การใช้mountคำสั่งต้องการจุดเชื่อมต่อที่มีอยู่ก่อนดังนั้นคุณจะต้อง sudo เพื่อสร้างโฟลเดอร์นั้นสำหรับจุดเชื่อมต่อ

ฉันพัฒนาแอพที่นำเสนอรายการแชร์เครือข่ายให้กับผู้ใช้และอนุญาตให้พวกเขาเลือกเมาท์ ฉันจัดการสิ่งนี้โดยการปิดกระบวนการคำสั่งในพื้นหลังที่ใช้mkdirและmountเชื่อมต่อไดรฟ์เครือข่าย แน่นอนตอนนี้ล้มเหลวเนื่องจากไม่มีสิทธิ์สร้างจุดเชื่อมต่อ

ทางเลือกหนึ่งที่ฉันกำลังมองหาในการปรับเปลี่ยน sudoers mkdirที่จะให้ผู้ใช้ทุกคนได้รับอนุญาตให้ใช้

ใครบ้างที่คิดว่าวิธีการติดตั้งไดรฟ์เครือข่ายผ่านทางโปรแกรมโดยไม่ต้องแจ้งรหัสผ่านหรือยุ่งกับ sudo?


ดูเหมือนว่าอาจมีข้อความแจ้งเตือนเดียวกันเกิดขึ้นเมื่อใช้ AppleScript ด้วยเช่นกัน: apple.stackexchange.com/questions/245819/…
mattdwen

เนื่องจากสิ่งนี้มีผลกระทบมากกว่าผู้ใช้ปัจจุบันดูเหมือนว่า Apple ได้รับสิทธิ์ที่ถูกต้องคุณต้องมีบัญชีผู้ดูแลระบบเพื่อทำสิ่งนี้ = หากคุณไม่ได้เป็นช่องโหว่ด้านความปลอดภัยและไม่ควร
ทำ

คำตอบ:


3

ขณะที่ผมตอบที่MacOS เซีย: AppleScript ติดปริมาณขอเก็บเข้าสู่ระบบผมคิดว่าวิธีที่จะทำตอนนี้คือการสร้างจุดเชื่อมต่อที่ไหนสักแห่งที่ผู้ใช้ไม่ต้องเขียนการเข้าถึงเช่นไดเรกทอรีบ้านของผู้ใช้:

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

หากเป็นแอปเฉพาะฉันขอแนะนำ ~ / Library / Application Support / AppName / mnt หรือสิ่งที่คล้ายกัน
Kent

ทำเครื่องหมายว่ายอมรับแล้วเนื่องจากแก้ไขปัญหาพื้นฐานได้ ฉันติดอยู่กับปัญหาว่าชื่อที่ใช้ร่วมกันบนเซิร์ฟเวอร์ไม่ถูกต้องและการสร้าง / Volumes / WhatEverNameIWant เป็นแฮ็คที่จะทำให้ชื่อบนเดสก์ท็อปดีขึ้นสำหรับผู้ใช้
mattdwen

ดีใจที่ได้เห็นวิธีแก้ปัญหานี้ แต่ฉันไม่เห็นว่ามันปลอดภัยกว่าความสามารถในการเมานต์ที่มีอยู่ก่อนหน้านี้ มันเหมือนกับว่า Apple กำลังล็อคประตูเล้าไก่ในขณะที่หน้าต่างเล้าไก่เปิดกว้าง
Br.Bill

3

ต่อไปนี้เป็นข่าวดีสำหรับ Sierra เกี่ยวกับความท้าทายในการติดตั้ง: Unix แบบอัตโนมัติทำงานได้อีกครั้งตามที่ควรจะเป็น

ดำเนินการตามรูทนี้: เพิ่มใน / etc / auto_master ของคุณเช่นบรรทัดนี้ไปยังแผนที่เมาท์แบบคงที่ ฉันเรียกมันว่า "สื่อ" แต่คุณสามารถทำอะไรก็ได้ที่คุณชอบ

/etc/auto_master:
/Volumes/Media   auto_media

จากนั้นสร้างไฟล์ / etc / auto_media ด้วยรายการของจุดเมานต์ของคุณซึ่งเป็นสองตัวอย่างสำหรับรูปภาพและเพลง My Synology NAS รองรับระบบไฟล์ Apple อย่างสมบูรณ์ แต่คุณสามารถทำได้บนเซิร์ฟเวอร์ไฟล์และเลือกระบบไฟล์อื่น ดู man auto_master

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

และทำให้โฟลเดอร์ mountpoint ด้วยตนเอง mkdir / Volume / Media และโหลดทั้งหมดด้วย automount -vc ถ้าคุณคลิกเป็น USER ใน Finder ไปที่โฟลเดอร์ / Volumes / Media Finder จะแสดงโฟลเดอร์ย่อย Bilder และ Musik โดยอัตโนมัติ หากคุณคลิกเข้าไปที่หนึ่งในนั้น automountd จะเมานต์ไดรฟ์โดยอัตโนมัติในฐานะผู้ใช้ที่ร้องขอและไม่เป็นรูท นี่คือกุญแจสู่การแก้ปัญหา !!! ตรวจสอบสถานะการติดตั้งมันจะแสดงดังต่อไปนี้:

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

โปรดทราบว่า "ติดตั้งโดยชื่อผู้ใช้" ที่ท้ายบรรทัดสุดท้ายด้านบน

ฉันรู้ว่า mkdir / Volumes / Media นั้นยังคงอยู่ใน Mac เครื่องหนึ่ง แต่โฟลเดอร์ทั้งหมดใน / Volumes จะถูกกำจัดออกไปบน Mac เครื่องอื่น ในกรณีนี้คุณต้องดำเนินการหลังจากรีบูตสคริปต์ที่สร้างโฟลเดอร์และรีโหลดตัวนับอัตโนมัติ บางสิ่งเช่นนี้

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

ฉันหวังว่ามันจะใช้ได้ผลกับทุกคน


2

สำหรับผู้ที่ต้องการโซลูชันที่ซับซ้อนจริง ๆ ฉันจำจากพื้นฐาน Unix ของฉันเมื่อ 20 ปีที่แล้ววิธีการทำงานของแผนที่ automount ที่ทำงานได้ ที่นี่ mapfile ไม่ได้เป็นแผนที่แบบคงที่ แต่สคริปต์ที่ปฏิบัติการได้ซึ่งส่งออกโดยทั่วไปพารามิเตอร์สำหรับจุดเชื่อมต่อ สิ่งที่ดีเกี่ยวกับเรื่องนี้คือคุณสามารถแก้ไขสิ่งอื่น ๆ ในสคริปต์เหล่านี้เช่นการปลุก NAS ที่ง่วงนอนหรือเพิ่มลิงก์เพิ่มเติมไปยังอุปกรณ์ที่ติดตั้ง นี่คือวิธีที่มันจะไป

/etc/auto_master
/Volumes/Media  auto_exec

สร้างสคริปต์ใน / etc และทำให้สามารถเรียกใช้งานได้ (chmod + x / etc / auto_exec) โดย automount daemon นี่คือของฉัน:

#!/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

ดังนั้นสคริปต์จะทำอะไรนอกจากโซลูชัน statis ฉันได้โพสต์ด้านบน

  1. คุณมีพารามิเตอร์ทั้งหมดเป็นตัวแปรในการเริ่มต้น กรุณากรอก

  2. มันเพิ่มผ่านลิงก์สัญลักษณ์ที่เป็นจุดยึดแบบดั้งเดิม มีประโยชน์มากอย่างเช่นก่อนหน้านี้โฟลเดอร์เพลงของฉันถูกเมาท์บน / Volumes / Musik แต่มันปรากฏใต้ / Volumes / Media / Musik ลิงค์ทำให้สามารถมองเห็นได้ภายใต้ / Volumes / Musik อีกครั้ง

  3. มันยิงและปลุกให้ NAS ของฉัน ดาวน์โหลดตัวอย่าง wolcmd ที่นี่: https://www.depicus.com/downloads/wolcmdmac.zipขอบคุณผู้เขียนที่แบ่งปันสิ่งนี้ได้อย่างอิสระ คุณต้องใส่มันในตำแหน่งใด ๆ ที่สอดคล้องกับสคริปต์ ฉันวางไว้ที่ / usr / local / bin

  4. มันบันทึกการกระทำทั้งหมดภายใต้ logfile คุณสามารถตรวจสอบได้อย่างอิสระโดยเรียกใช้ตัวอย่างเช่น "tail -f /tmp/automounter.log" ในหน้าต่างเทอร์มินัล เฉพาะการเมานต์เหล่านี้เท่านั้นที่จะถูกเรียกใช้งานโดยที่สัมผัสโฟลเดอร์ที่เกี่ยวข้อง


1

ในกรณีที่โฟลเดอร์ / Volumes / mountpoint ของคุณหายไปหลังจากรีบูตเครื่องและคุณไม่พบเน็ตในวิธีที่รวดเร็วในการบู๊ตหรือเข้าสู่ระบบ นี่คือสิ่งที่ฉันทำ:

ใส่ลงในโฟลเดอร์ตัวแทนการเปิดตัวของผู้ใช้: / Users / YourMacUser / Library / LaunchAgents ไฟล์ต่อไปนี้

<?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>

สคริปต์ mount-startup.sh ของฉันคือ:

#!/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

นั่นคือสิ่งที่สคริปต์ทำในเวลาที่ผู้ใช้ลงชื่อเข้าใช้

  1. มันตรวจสอบว่าจุดเชื่อมต่อใน / เล่มที่นั่นสร้างและโหลดใหม่เครื่อง นี่เป็นภารกิจหลักของสคริปต์ ที่เหลือคือความหรูหรา

  2. มันปลุก NAS ขึ้นมา NAS จะถูกปลุกด้วยสคริปต์ auto_exec หากเข้าถึงโฟลเดอร์ automount แต่ไดรฟ์ NAS ใช้เวลาพอสมควรในการบูตและ MacUser อาจทำอย่างอื่นหลังจากเข้าสู่ระบบ เมื่อคลิกที่โฟลเดอร์ automount แล้ว NAS ก็เริ่มทำงานแล้ว ดับเบิลวอลไม่เจ็บ

  3. สร้างลิงก์เมานต์ดั้งเดิมภายใต้ "ปริมาณ" อีกครั้ง ดับเบิลไม่เจ็บ

โปรดทราบว่าสคริปต์ตัวแทนนี้ได้รับการออกแบบให้ทำงานภายใต้สิทธิ์ของ USER โดยปกติแล้วคำสั่ง sudo จะขอรหัสผ่าน ฉันได้บีบเรื่องนี้โดยแฮ็ค "echo $ passpw | sudo -S ... " เห็นได้ชัดว่าการจัดเก็บรหัสผ่านอย่างชัดเจนในไฟล์สคริปต์ไม่ได้เป็นมืออาชีพเลยและก็โอเคสำหรับการใช้งานที่บ้านของฉัน หากต้องการทำสิ่งนี้อย่างมืออาชีพคุณควรโหลดสคริปต์เรียกใช้นี้ลงในรูท / ไลบรารีและไม่ต้องเข้าไปในห้องสมุดผู้ใช้ คุณสามารถลบส่วน "echo $ passpw | sudo -S" ทั้งหมดก่อนคำสั่งจริง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.