MAC 挂载smb共享文件后无法更改挂载路径权限
我在mac上使用sudo mount -t smbfs //user:password@apksamba.ops.ilongyuan.cn/cytus2 /Volumes/unity/cytus2 挂载了一个samba共享文件夹,但挂载之后我的挂载点权限就变成700了而且无法更改。但我想让我AMC上的所有用户都可以访问这个共享文件夹
我在mac上使用sudo mount -t smbfs //user:password@apksamba.ops.ilongyuan.cn/cytus2 /Volumes/unity/cytus2 挂载了一个samba共享文件夹,但挂载之后我的挂载点权限就变成700了而且无法更改。但我想让我AMC上的所有用户都可以访问这个共享文件夹
个人理解的你的需求是:当每个用户登陆之后,都可以自动访问cytus2这个共享文件夹,而用户自己不用输入访问共享用的user和password。
解释
关键是必须是用户环境下挂载共享文件夹。也就是在每个用户登陆时,在该用户环境后自动为该用户挂载。要想每个用户挂载时彼此不冲突的关键是,这个挂载点(文件夹)必须是用户相关,一个方式是设在用户个人文件夹($HOME)里面,而不用系统默认的/Volumes
自动挂载
至少两种方式实现自动挂载:登陆脚本;autofs
我们这里只用了脚本方式,因为我们的情况比较复杂,也希望自己控制。所以,这里只讨论脚本方式。
要实现在用户登陆时自动执行脚本,可以使用login/logout hooks或者launchd,这个情况使用LaunchAgents。虽然,hooks还有被支持,当时Apple很早就声明过要丢弃这种方式,所以最好是用launchd。简单说就是制作一个launchd plist文件,并放在相应的位置并注册。具体技术细节,可以参考在线帮助:man launchd,和 man launchd.plst。也可以参考我的书《OS X系统管理和部署》,或者网上搜索。
auofs可以自己搜索相关文档
脚本
简单的脚本可以是:
#!/bin/sh
mkdir $HOME/cytus2
mount -t smbfs //user:password@apksamba.ops.ilongyuan.cn/cytus2 $HOME/cytus2
后话
这个可以繁琐也可以简单。以前,我们的需求是根据用户不同的群组和网段,自动挂载不同的共享,还要处理登出时取消挂载,还要判断内网,处理超时、以及各种可能出现的状况,所以脚本比较长。幸好的是macOS的机制方面比较一致。
我可能会从我的建议或链接得到财务,或者其它形式的补偿
[经过版主编辑]
samba账户是有共享文件夹的读写权限的。
对于初接触的人的确有点不太好入手,下面讲得具体些,但无法涉及过多的原理和解释,建议把前面和这里说的参考资料研读下,有助于理解这里所说的。
脚本保存
不要每个用户一个,就用一个,保存在公用区域,并设置所有人都可读+可执行。这个公共区域可以选择的地方有好多,比如,两个常见的目录:"/Users/Shared" 或者 "/Library/Application Support/"。当然,最好是在这些系统自带的目录中再创建一个自己的子目录,把管理用的脚本和其它资源文件都放在里面,便于管理。owner最好是root,以免他人随意改动。
比如,在"/Library/Application Support/"中的设置:
mngmtFolder="/Library/Application Support/yourcompanyname/"
sudo mkdir -p "$mngmtFolder"
sudo chown root:staff "$mngmtFolder"
sudo chmod -R 755 "$mngmtFolder"
测试再测试
不要急于考虑自动运行的问题,先确认脚本运行正常,多用户、多网路环境、多极端情况下的测试,把脚本完善好。尤其是,运行过程中自动记录logs,这样有助于排错和追踪。
自动运行测试,先在一个测试帐户中测试。
自动运行:
你需要的是用户登陆运行(Agent),而不是开机运行(Daemon),两者有“本质”区别。
详细的资料,除了前面提到的在线man和我的书,还可以参考Apple的官方文档:Creating Launch Daemons and Agents
因为你需要所有用户登陆时都自动运行,所以,我们需要访问“/Library/LaunchAgents/”目录。
先把下面的文本,修改必要的参数,比如yourcopanyname 和 脚本的目录和名称等,保存为一个纯文本文件,取名为“.plist”文件,比如:“com.yourcompany.mountsmb.plist”,保存在/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>com.yourcompany.mountsmb</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/yourcompanyname/mountsmb.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<false/>
</dict>
</plist>
这样,下面的命令,应该能看到该文件的存在:
$ ls -la /Library/LaunchAgents/
-rw-r--r-- 1 root wheel 439 31 Jul 13:08 com.yourcompany.mountsmb.plist
需要注意的是:这个plist文件的owner必须是root,权限则为:644,如上所示
注意事项
最好建立一个备用的管理员帐户,以备万一
如果遇到问题造成登陆问题,启动到安全模式。
由于launchd的工作原理,用户无法设定运行时机,登陆之后,可能需要等待一段时间,让launchd决定合适运行它。所以,logs在排错等时很重要。
望能顺利设置成功
我想请问一下如何配置开机自动执行这个脚本了,我在每一个用户的家目录下都定义的相应的挂载脚本。但我使用图形化界面定义开启执行脚本好像并没有生效,请问有没有办法使用命令行的方式实现开机自动执行了?
MAC 挂载smb共享文件后无法更改挂载路径权限