MAC 挂载smb共享文件后无法更改挂载路径权限

我在mac上使用sudo mount -t smbfs //user:password@apksamba.ops.ilongyuan.cn/cytus2 /Volumes/unity/cytus2 挂载了一个samba共享文件夹,但挂载之后我的挂载点权限就变成700了而且无法更改。但我想让我AMC上的所有用户都可以访问这个共享文件夹

发布日期 2020年7月29日 上午3:16

回复
回复量: 4

2020年7月30日 下午9:12 回应 tfg

个人理解的你的需求是:当每个用户登陆之后,都可以自动访问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的机制方面比较一致。





我可能会从我的建议或链接得到财务,或者其它形式的补偿

[经过版主编辑]


2020年7月31日 下午12:54 回应 tfg

对于初接触的人的确有点不太好入手,下面讲得具体些,但无法涉及过多的原理和解释,建议把前面和这里说的参考资料研读下,有助于理解这里所说的。


脚本保存

不要每个用户一个,就用一个,保存在公用区域,并设置所有人都可读+可执行。这个公共区域可以选择的地方有好多,比如,两个常见的目录:"/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共享文件后无法更改挂载路径权限

欢迎来到 Apple 支持社区
Apple 客户在其产品方面互相帮助的论坛。使用您的 Apple 帐户开始畅游其中吧!!